diff --git a/Makefile b/Makefile
index 190c64a4..8a673c4e 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ KINDCONFIG := $(or $(KINDCONFIG),control-plane/kind.yaml)
KUBECONFIG := $(shell pwd)/.kubeconfig
METALCTL_HMAC := $(or $(METALCTL_HMAC),metal-admin)
-METALCTL_API_URL := $(or $(METALCTL_API_URL),http://api.172.17.0.1.nip.io:8080/metal)
+METALCTL_API_URL := $(or $(METALCTL_API_URL),http://api.172.42.0.42.nip.io:8080/metal)
MKE2FS_CONFIG := $(shell pwd)/mke2fs.conf
# Default values
@@ -26,6 +26,8 @@ MINI_LAB_VM_IMAGE := $(or $(MINI_LAB_VM_IMAGE),ghcr.io/metal-stack/mini-lab-vms:
MINI_LAB_SONIC_IMAGE := $(or $(MINI_LAB_SONIC_IMAGE),ghcr.io/metal-stack/mini-lab-sonic:latest)
MINI_LAB_DELL_SONIC_VERSION := $(or $(MINI_LAB_DELL_SONIC_VERSION),4.5.1)
+MINI_LAB_INTERNAL_NETWORK=mini_lab_internal
+
MACHINE_OS=debian-12.0
MAX_RETRIES := 30
@@ -117,6 +119,8 @@ create-proxy-registries:
.PHONY: control-plane-bake
control-plane-bake:
+
+ @if ! docker network ls | grep -q mini_lab_internal; then docker network create mini_lab_internal --gateway 172.42.0.1 --ip-range=172.42.0.0/24 --subnet=172.42.0.0/24 --ipv6=false ; fi
@if ! which kind > /dev/null; then echo "kind needs to be installed"; exit 1; fi
@if ! kind get clusters | grep metal-control-plane > /dev/null; then \
kind create cluster $(KIND_ARGS) \
@@ -124,6 +128,7 @@ control-plane-bake:
--config $(KINDCONFIG) \
--kubeconfig $(KUBECONFIG); fi
$(MAKE) create-proxy-registries
+ docker compose up -d --force-recreate cloud-provider-kind
.PHONY: partition
partition: partition-bake
@@ -166,6 +171,7 @@ env:
.PHONY: cleanup
cleanup: cleanup-control-plane cleanup-partition
+ docker network rm --force mini_lab_internal
.PHONY: cleanup-control-plane
cleanup-control-plane:
@@ -438,7 +444,7 @@ build-dell-sonic:
fetch-virtual-kubeconfig:
# TODO: it's hard to get the latest issued generic kubeconfig secret... just take the first result for now
kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden $(shell kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden -l managed-by=secrets-manager,manager-identity=gardener-operator,name=generic-token-kubeconfig --no-headers | awk '{ print $$1 }') -o jsonpath='{.data.kubeconfig}' | base64 -d > .virtual-kubeconfig
- @kubectl --kubeconfig=.virtual-kubeconfig config set-cluster garden --server=https://api.gardener-kube-apiserver.172.17.0.1.nip.io:4443
+ @kubectl --kubeconfig=.virtual-kubeconfig config set-cluster garden --server=https://api.gardener-kube-apiserver.172.42.0.1.nip.io:4443
@kubectl --kubeconfig=.virtual-kubeconfig config set-credentials garden --token=$(shell kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden shoot-access-virtual-garden -o jsonpath='{.data.token}' | base64 -d)
@kubectl --kubeconfig=$(KUBECONFIG) config unset users.garden
@kubectl --kubeconfig=$(KUBECONFIG) config unset contexts.garden
diff --git a/compose.yaml b/compose.yaml
index a2f0d224..ac8610d0 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -6,6 +6,12 @@ services:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:z
- .:/mini-lab
+ # for developing role dependencies
+ # TODO: make this a switch
+ # - ${HOME}/.ansible/roles/ansible-common:/root/.ansible/roles/ansible-common:ro
+ - /home/benjamin/metal-stack/metal-stack/metal-roles:/root/.ansible/roles/metal-roles:ro
+ # - ${HOME}/.ansible/roles/metal-ansible-modules:/root/.ansible/roles/metal-ansible-modules:ro
+ - /home/benjamin/metal-stack/metal-stack/helm-charts:/helm-charts:ro
environment:
- ANSIBLE_DISPLAY_SKIPPED_HOSTS=${ANSIBLE_DISPLAY_SKIPPED_HOSTS:-false}
- ANSIBLE_INVENTORY=inventories/control-plane.yaml
@@ -128,6 +134,20 @@ services:
- REGISTRY_PROXY_TTL=168h
- REGISTRY_STORAGE_DELETE_ENABLED=true
- OTEL_TRACES_EXPORTER=none
+ cloud-provider-kind:
+ image: registry.k8s.io/cloud-provider-kind/cloud-controller-manager:v0.10.0
+ restart: always
+ networks:
+ - kind
+ environment:
+ - KIND_EXPERIMENTAL_DOCKER_NETWORK=${KIND_EXPERIMENTAL_DOCKER_NETWORK:-kind}
+ command:
+ # v0.10.0 of cloud controller does not support tcproutes, since it does not support the experimental gateway api channel
+ # using envoy-gateway deployed via roles/gateway instead
+ - --gateway-channel
+ - disabled
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
volumes:
proxy-docker:
proxy-gcr:
diff --git a/control-plane/kind.yaml b/control-plane/kind.yaml
index a55b4aaf..c0af5d47 100644
--- a/control-plane/kind.yaml
+++ b/control-plane/kind.yaml
@@ -2,7 +2,7 @@ kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerPort: 6443
- apiServerAddress: 0.0.0.0
+ apiServerAddress: 172.42.0.1
nodes:
- role: control-plane
extraMounts:
diff --git a/deploy_control_plane.yaml b/deploy_control_plane.yaml
index bd0f0241..1db87690 100644
--- a/deploy_control_plane.yaml
+++ b/deploy_control_plane.yaml
@@ -6,6 +6,8 @@
roles:
- name: ansible-common
tags: always
+ - name: gateway
+ tags: gateway
- name: ingress-controller
tags: ingress-controller
- name: metal-roles/control-plane/roles/prepare
diff --git a/deploy_gardener.yaml b/deploy_gardener.yaml
index 43eb72d4..888c6f8c 100644
--- a/deploy_gardener.yaml
+++ b/deploy_gardener.yaml
@@ -81,7 +81,7 @@
status:
loadBalancer:
ingress:
- - ip: "172.17.0.1"
+ - ip: "172.42.0.1"
tags: gardener
- name: Expose istio gateway through ingress-nginx (for local environments)
diff --git a/docs/overview-kamaji.drawio.svg b/docs/overview-kamaji.drawio.svg
index f6e083c1..e9b2b33e 100644
--- a/docs/overview-kamaji.drawio.svg
+++ b/docs/overview-kamaji.drawio.svg
@@ -470,13 +470,13 @@
- docker network 172.17.0.1/16
+ docker network 172.42.0.1/16
- docker network 172.17.0.1/16
+ docker network 172.42.0.1/16
diff --git a/docs/overview.drawio.svg b/docs/overview.drawio.svg
index 1267de68..fdb8f9b9 100644
--- a/docs/overview.drawio.svg
+++ b/docs/overview.drawio.svg
@@ -470,13 +470,13 @@
- docker network 172.17.0.1/16
+ docker network 172.42.0.1/16
- docker network 172.17.0.1/16
+ docker network 172.42.0.1/16
diff --git a/env.sh b/env.sh
index a01de375..daac37ec 100755
--- a/env.sh
+++ b/env.sh
@@ -24,4 +24,5 @@ DEPLOYMENT_BASE_IMAGE_TAG=${DEPLOYMENT_BASE_IMAGE_TAG}
CI=${CI:=false}
DOCKER_HUB_USER=${DOCKER_HUB_USER:=}
DOCKER_HUB_TOKEN=${DOCKER_HUB_TOKEN:=}
+KIND_EXPERIMENTAL_DOCKER_NETWORK=${MINI_LAB_INTERNAL_NETWORK:=}
EOF
diff --git a/files/certs/default-gateway/server.json b/files/certs/default-gateway/server.json
new file mode 100644
index 00000000..fb3a27a2
--- /dev/null
+++ b/files/certs/default-gateway/server.json
@@ -0,0 +1,20 @@
+{
+ "CN": "default-gateway",
+ "hosts": [
+ "api.172.42.0.42.nip.io",
+ "v2.api.172.42.0.42.nip.io"
+ ],
+ "key": {
+ "algo": "rsa",
+ "size": 4096
+ },
+ "names": [
+ {
+ "C": "DE",
+ "L": "Munich",
+ "O": "metal-stack",
+ "OU": "DevOps",
+ "ST": "Bavaria"
+ }
+ ]
+}
diff --git a/files/certs/grpc/server.json b/files/certs/grpc/server.json
index 17ba2a53..e1b8bc35 100644
--- a/files/certs/grpc/server.json
+++ b/files/certs/grpc/server.json
@@ -1,7 +1,7 @@
{
"CN": "metal-api",
"hosts": [
- "172.17.0.1",
+ "172.42.0.42",
"203.0.113.1"
],
"key": {
diff --git a/files/dev_images.yaml b/files/dev_images.yaml
index e0699518..91b8285c 100644
--- a/files/dev_images.yaml
+++ b/files/dev_images.yaml
@@ -1,6 +1,6 @@
---
# Do not change these values
metal_api_image_tag: dev
-metal_core_image_name: 172.17.0.1:5000/metalstack/metal-core
+metal_core_image_name: 172.42.0.42:5000/metalstack/metal-core
metal_core_image_tag: dev
-metal_hammer_image_url: http://172.17.0.1:20015/metal-hammer-initrd.img.lz4
+metal_hammer_image_url: http://172.42.0.42:20015/metal-hammer-initrd.img.lz4
diff --git a/files/startup-config/leaf01_4.4.3.json b/files/startup-config/leaf01_4.4.3.json
index 622b5df9..60393ec3 100644
--- a/files/startup-config/leaf01_4.4.3.json
+++ b/files/startup-config/leaf01_4.4.3.json
@@ -11,7 +11,7 @@
}
},
"DNS_SERVER": {
- "172.17.0.1": {},
+ "172.42.0.1": {},
"1.1.1.1": {},
"1.0.0.1": {}
},
diff --git a/files/startup-config/leaf01_4.5.1.json b/files/startup-config/leaf01_4.5.1.json
index cd4224ac..78106fe8 100644
--- a/files/startup-config/leaf01_4.5.1.json
+++ b/files/startup-config/leaf01_4.5.1.json
@@ -11,7 +11,7 @@
}
},
"DNS_SERVER": {
- "172.17.0.1": {},
+ "172.42.0.1": {},
"1.1.1.1": {},
"1.0.0.1": {}
},
diff --git a/files/startup-config/leaf02_4.4.3.json b/files/startup-config/leaf02_4.4.3.json
index 5a8d4a78..7359f574 100644
--- a/files/startup-config/leaf02_4.4.3.json
+++ b/files/startup-config/leaf02_4.4.3.json
@@ -11,7 +11,7 @@
}
},
"DNS_SERVER": {
- "172.17.0.1": {},
+ "172.42.0.1": {},
"1.1.1.1": {},
"1.0.0.1": {}
},
diff --git a/files/startup-config/leaf02_4.5.1.json b/files/startup-config/leaf02_4.5.1.json
index 41c8f118..335ef382 100644
--- a/files/startup-config/leaf02_4.5.1.json
+++ b/files/startup-config/leaf02_4.5.1.json
@@ -11,7 +11,7 @@
}
},
"DNS_SERVER": {
- "172.17.0.1": {},
+ "172.42.0.1": {},
"1.1.1.1": {},
"1.0.0.1": {}
},
diff --git a/inventories/group_vars/all/control_plane.yaml b/inventories/group_vars/all/control_plane.yaml
index 1a93b331..d1eec945 100644
--- a/inventories/group_vars/all/control_plane.yaml
+++ b/inventories/group_vars/all/control_plane.yaml
@@ -1,6 +1,6 @@
---
metal_control_plane_provider_tenant: metal-stack
-metal_control_plane_ingress_dns: 172.17.0.1.nip.io
+metal_control_plane_ingress_dns: 172.42.0.42.nip.io
metal_control_plane_stage_name: test
metal_control_plane_namespace: metal-control-plane
metal_control_plane_image_pull_policy: Always
diff --git a/inventories/group_vars/control_plane/dex.yaml b/inventories/group_vars/control_plane/dex.yaml
index 6866f208..f09642d9 100644
--- a/inventories/group_vars/control_plane/dex.yaml
+++ b/inventories/group_vars/control_plane/dex.yaml
@@ -8,7 +8,7 @@ auth_dex_static_clients:
name: "metal-stack"
secret: secret
redirectURIs:
- - 'http://v2.api.172.17.0.1.nip.io:8080/auth/oidc/callback'
+ - 'http://v2.api.172.42.0.42.nip.io:8080/auth/oidc/callback'
auth_dex_static_passwords:
- email: admin@metal-stack.io
diff --git a/inventories/group_vars/control_plane/gardener/gardenlet.yaml b/inventories/group_vars/control_plane/gardener/gardenlet.yaml
index 8fed1d0f..fe02bb70 100644
--- a/inventories/group_vars/control_plane/gardener/gardenlet.yaml
+++ b/inventories/group_vars/control_plane/gardener/gardenlet.yaml
@@ -1,5 +1,5 @@
---
-gardener_gardenlet_default_dns_domain: "gardener.172.17.0.1.nip.io"
+gardener_gardenlet_default_dns_domain: "gardener.172.42.0.1.nip.io"
gardener_gardenlet_default_dns_provider: powerdns
gardener_gardenlet_default_dns_credentials:
apiKey: "{{ powerdns_api_key | b64encode }}"
diff --git a/inventories/group_vars/control_plane/gardener/operator.yaml b/inventories/group_vars/control_plane/gardener/operator.yaml
index 5cddad2e..842293b6 100644
--- a/inventories/group_vars/control_plane/gardener/operator.yaml
+++ b/inventories/group_vars/control_plane/gardener/operator.yaml
@@ -1,5 +1,5 @@
---
-gardener_operator_ingress_dns_domain: "gardener.172.17.0.1.nip.io"
+gardener_operator_ingress_dns_domain: "gardener.172.42.0.1.nip.io"
gardener_operator_backup_infrastructure:
provider: S3
@@ -17,7 +17,7 @@ gardener_operator_backup_infrastructure_secret:
s3ForcePathStyle: "{{ 'true' | b64encode }}"
# enable mini-lab patches
-gardener_operator_patch_istio_ingress_gateway_service_ip: 172.17.0.1
+gardener_operator_patch_istio_ingress_gateway_service_ip: 172.42.0.1
gardener_operator_expose_virtual_garden_through_ingress_nginx: true
# for local setups this should be sufficient
diff --git a/inventories/group_vars/control_plane/ingress.yaml b/inventories/group_vars/control_plane/ingress.yaml
index 0ef8644b..fe68a6b6 100644
--- a/inventories/group_vars/control_plane/ingress.yaml
+++ b/inventories/group_vars/control_plane/ingress.yaml
@@ -2,3 +2,6 @@
ingress_tcp_service_exposals:
"4150": "{{ metal_control_plane_namespace }}/nsqd:4150"
"50051": "{{ metal_control_plane_namespace }}/metal-api:50051"
+gateway_tcp_listeners:
+ nsq: 4150
+ metal-api-grpc: 50051
\ No newline at end of file
diff --git a/inventories/group_vars/control_plane/metal.yml b/inventories/group_vars/control_plane/metal.yml
index 6e914d6e..c7980a60 100644
--- a/inventories/group_vars/control_plane/metal.yml
+++ b/inventories/group_vars/control_plane/metal.yml
@@ -3,7 +3,23 @@ metal_set_resource_limits: no
metal_check_api_health_endpoint: http://api.{{ metal_control_plane_ingress_dns }}:8080/metal/v1/health
metal_api_headscale_control_plane_address: "http://headscale.{{ metal_control_plane_ingress_dns }}:8080"
-# metal_helm_chart_local_path: /helm-charts/charts/metal-control-plane
+metal_helm_chart_local_path: /helm-charts/charts/metal-control-plane
+
+metal_deploy_ingress: false
+
+metal_api_httproute_enabled: true
+metal_api_httproute_hostnames:
+- "{{ metal_ingress_dns }}"
+metal_api_httproute_parent_refs:
+- name: metal-control-plane
+ namespace: "{{ metal_control_plane_namespace }}"
+ sectionName: http
+
+metal_api_tcproute_enabled: true
+metal_api_tcproute_parent_refs:
+- name: metal-control-plane
+ namespace: "{{ metal_control_plane_namespace }}"
+ sectionName: metal-api-grpc
metal_api_pdb_min_available: 1
metal_api_replicas: 1
@@ -23,7 +39,15 @@ metal_apiserver_oidc_discovery_url: https://zitadel.{{ metal_control_plane_ingre
metal_apiserver_oidc_end_session_url: "https://zitadel.{{ metal_control_plane_ingress_dns }}:4443/oidc/v1/end_session"
metal_apiserver_redis_password: change-me-soon
-metal_apiserver_admin_subjects: "admin@metal-stack.zitadel.172.17.0.1.nip.io@openid-connect"
+metal_apiserver_admin_subjects: "admin@metal-stack.zitadel.172.42.0.42.nip.io@openid-connect"
+
+metal_apiserver_httproute_enabled: true
+metal_apiserver_httproute_hostnames:
+- "{{ metal_ingress_v2_dns }}"
+metal_apiserver_httproute_parent_refs:
+- name: metal-control-plane
+ namespace: "{{ metal_control_plane_namespace }}"
+ sectionName: http
metal_api_images:
- id: firewall-ubuntu-3.0
diff --git a/inventories/group_vars/control_plane/minio.yaml b/inventories/group_vars/control_plane/minio.yaml
index 73801c7c..0e7566ee 100644
--- a/inventories/group_vars/control_plane/minio.yaml
+++ b/inventories/group_vars/control_plane/minio.yaml
@@ -2,4 +2,4 @@
minio_root_user: mini-lab
minio_root_password: change-me
-minio_dns_name: minio.172.17.0.1.nip.io
+minio_dns_name: minio.172.42.0.1.nip.io
diff --git a/inventories/group_vars/control_plane/nsq.yaml b/inventories/group_vars/control_plane/nsq.yaml
index b8983676..c7a1f802 100644
--- a/inventories/group_vars/control_plane/nsq.yaml
+++ b/inventories/group_vars/control_plane/nsq.yaml
@@ -9,3 +9,8 @@ nsq_certs_client_cert: "{{ lookup('file', 'certs/nsq/client.crt') }}"
nsq_certs_ca_cert: "{{ lookup('file', 'certs/ca.pem') }}"
nsq_broadcast_address: nsqd
+
+nsq_tcproute_enabled: true
+nsq_tcproute_parent_refs:
+- name: metal-control-plane
+ sectionName: nsq
diff --git a/inventories/group_vars/control_plane/powerdns.yaml b/inventories/group_vars/control_plane/powerdns.yaml
index bde65e72..d001532f 100644
--- a/inventories/group_vars/control_plane/powerdns.yaml
+++ b/inventories/group_vars/control_plane/powerdns.yaml
@@ -10,11 +10,11 @@ powerdns_load_balancer_dns_name: "ns.{{ metal_control_plane_ingress_dns }}"
powerdns_api_dns_name: "powerdns-api.{{ metal_control_plane_ingress_dns }}"
powerdns_zones:
- - name: "gardener.172.17.0.1.nip.io."
+ - name: "gardener.172.42.0.1.nip.io."
kind: Master
nameservers:
- "{{ powerdns_load_balancer_dns_name }}."
- - name: "gardener-kube-apiserver.172.17.0.1.nip.io."
+ - name: "gardener-kube-apiserver.172.42.0.1.nip.io."
kind: Master
nameservers:
- "{{ powerdns_load_balancer_dns_name }}."
diff --git a/inventories/group_vars/control_plane/zitadel.yaml b/inventories/group_vars/control_plane/zitadel.yaml
index f45059d2..10fc1776 100644
--- a/inventories/group_vars/control_plane/zitadel.yaml
+++ b/inventories/group_vars/control_plane/zitadel.yaml
@@ -6,6 +6,11 @@ zitadel_port: 8080
zitadel_skip_verify_tls: true
zitadel_insecure: true
+zitadel_httproute_enabled: true
+zitadel_httproute_parent_refs:
+- name: metal-control-plane
+ sectionName: https
+
zitadel_init_config:
static_users:
- first_name: Olli
@@ -23,4 +28,4 @@ zitadel_init_config:
# later id will be added but currently not possible with zitadel
id: metal-stack
name: metal-stack
- redirect_uri: http://v2.api.172.17.0.1.nip.io:8080/auth/openid-connect/callback
+ redirect_uri: http://v2.api.172.42.0.42.nip.io:8080/auth/openid-connect/callback
diff --git a/inventories/group_vars/leaves/main.yaml b/inventories/group_vars/leaves/main.yaml
index fbc83ac4..e1d1e596 100644
--- a/inventories/group_vars/leaves/main.yaml
+++ b/inventories/group_vars/leaves/main.yaml
@@ -12,7 +12,7 @@ sonic_config_frr_render: false
sonic_config_loopback_address: "{{ lo }}"
sonic_config_mgmt_interface:
ip: "{{ ansible_host }}/16`"
- gateway_address: "172.17.0.1"
+ gateway_address: "172.42.0.1"
sonic_config_mgmt_vrf: false
sonic_config_nameservers: "{{ router_nameservers }}"
diff --git a/inventories/group_vars/partition/common.yaml b/inventories/group_vars/partition/common.yaml
index 61da08a0..d91f43df 100644
--- a/inventories/group_vars/partition/common.yaml
+++ b/inventories/group_vars/partition/common.yaml
@@ -14,4 +14,4 @@ metal_partition_metal_api_grpc_ca_cert: "{{ lookup('file', 'certs/ca.pem') }}"
metal_partition_metal_api_grpc_client_cert: "{{ lookup('file', 'certs/grpc/client.pem') }}"
metal_partition_metal_api_grpc_client_key: "{{ lookup('file', 'certs/grpc/client-key.pem') }}"
-metal_partition_mgmt_gateway: 172.17.0.1
+metal_partition_mgmt_gateway: 172.42.0.42
diff --git a/inventories/group_vars/partition/router.yaml b/inventories/group_vars/partition/router.yaml
index bdcbc460..a85d2998 100644
--- a/inventories/group_vars/partition/router.yaml
+++ b/inventories/group_vars/partition/router.yaml
@@ -1,5 +1,5 @@
---
router_nameservers:
- - 172.17.0.1
+ - 172.42.0.1
- 1.1.1.1
- 1.0.0.1
diff --git a/mini-lab.sonic.yaml b/mini-lab.sonic.yaml
index 5d46a128..a14ad7e0 100644
--- a/mini-lab.sonic.yaml
+++ b/mini-lab.sonic.yaml
@@ -2,7 +2,7 @@ name: mini-lab
prefix: ""
mgmt:
- network: bridge
+ network: mini_lab_internal
topology:
defaults:
diff --git a/mini-lab.sonic.yaml.annotations.json b/mini-lab.sonic.yaml.annotations.json
new file mode 100644
index 00000000..6e468112
--- /dev/null
+++ b/mini-lab.sonic.yaml.annotations.json
@@ -0,0 +1,61 @@
+{
+ "freeTextAnnotations": [],
+ "freeShapeAnnotations": [],
+ "trafficRateAnnotations": [],
+ "groupStyleAnnotations": [],
+ "networkNodeAnnotations": [],
+ "nodeAnnotations": [
+ {
+ "id": "exit",
+ "position": {
+ "x": 360,
+ "y": 420
+ }
+ },
+ {
+ "id": "external_service",
+ "position": {
+ "x": 160,
+ "y": 180
+ }
+ },
+ {
+ "id": "mini_lab_ext",
+ "position": {
+ "x": 280,
+ "y": 300
+ }
+ },
+ {
+ "id": "leaf01",
+ "position": {
+ "x": 500,
+ "y": 360
+ }
+ },
+ {
+ "id": "leaf02",
+ "position": {
+ "x": 520,
+ "y": 460
+ }
+ },
+ {
+ "id": "machine01",
+ "position": {
+ "x": 640,
+ "y": 320
+ }
+ },
+ {
+ "id": "machine02",
+ "position": {
+ "x": 680,
+ "y": 420
+ }
+ }
+ ],
+ "edgeAnnotations": [],
+ "aliasEndpointAnnotations": [],
+ "viewerSettings": {}
+}
\ No newline at end of file
diff --git a/roles/gateway/defaults/main.yml b/roles/gateway/defaults/main.yml
new file mode 100644
index 00000000..5bb8dff6
--- /dev/null
+++ b/roles/gateway/defaults/main.yml
@@ -0,0 +1,8 @@
+---
+gateway_namespace: "{{ metal_control_plane_namespace }}"
+gateway_http_port: 8080
+gateway_https_port: 4443
+
+gateway_tcp_listeners: {}
+ # nsq: 4150
+ # metal-api: 50051
diff --git a/roles/gateway/files/gatewayclass.yaml b/roles/gateway/files/gatewayclass.yaml
new file mode 100644
index 00000000..a750b9fd
--- /dev/null
+++ b/roles/gateway/files/gatewayclass.yaml
@@ -0,0 +1,6 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: GatewayClass
+metadata:
+ name: eg
+spec:
+ controllerName: gateway.envoyproxy.io/gatewayclass-controller
\ No newline at end of file
diff --git a/roles/gateway/tasks/main.yml b/roles/gateway/tasks/main.yml
new file mode 100644
index 00000000..3bc063cf
--- /dev/null
+++ b/roles/gateway/tasks/main.yml
@@ -0,0 +1,34 @@
+- name: Deploy envoy-gateway
+ kubernetes.core.helm:
+ release_name: envoy-gateway
+ release_namespace: envoy-gateway-system
+ create_namespace: true
+ chart_ref: "oci://docker.io/envoyproxy/gateway-helm"
+ chart_version: "{{ envoy_gateway_chart_version | default(omit) }}"
+ # values: "{{ lookup('template', 'values.yaml') | from_yaml }}"
+ wait: true
+- name: Deploy Envoy GatewayClass
+ kubernetes.core.k8s:
+ definition: "{{ lookup('file', 'gatewayclass.yaml') | from_yaml }}"
+- name: Deploy metal-control-plane nsq_namespace
+ kubernetes.core.k8s:
+ kind: Namespace
+ name: "{{ metal_control_plane_namespace }}"
+- name: Deploy metal-control-plane EnvoyProxy
+ kubernetes.core.k8s:
+ definition: "{{ lookup('template', 'envoyproxy.yaml') | from_yaml }}"
+- name: Deploy default-tls certificate secret
+ kubernetes.core.k8s:
+ definition:
+ apiVersion: v1
+ kind: Secret
+ type: kubernetes.io/tls
+ metadata:
+ name: default-tls
+ namespace: "{{ gateway_namespace }}"
+ data:
+ tls.crt: "{{ lookup('file', 'certs/default-gateway/server.pem') | b64encode }}"
+ tls.key: "{{ lookup('file', 'certs/default-gateway/server-key.pem') | b64encode }}"
+- name: Deploy metal-control-plane Gateway
+ kubernetes.core.k8s:
+ definition: "{{ lookup('template', 'gateway.yaml') | from_yaml }}"
\ No newline at end of file
diff --git a/roles/gateway/templates/envoyproxy.yaml b/roles/gateway/templates/envoyproxy.yaml
new file mode 100644
index 00000000..edb7c0fe
--- /dev/null
+++ b/roles/gateway/templates/envoyproxy.yaml
@@ -0,0 +1,14 @@
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: EnvoyProxy
+metadata:
+ name: metal-control-plane
+ namespace: "{{ gateway_namespace }}"
+spec:
+ provider:
+ type: Kubernetes
+ kubernetes:
+ envoyService:
+ externalTrafficPolicy: Local
+ type: LoadBalancer
+ loadBalancerIP: 172.42.0.42
\ No newline at end of file
diff --git a/roles/gateway/templates/gateway.yaml b/roles/gateway/templates/gateway.yaml
new file mode 100644
index 00000000..8bcf5ccf
--- /dev/null
+++ b/roles/gateway/templates/gateway.yaml
@@ -0,0 +1,35 @@
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: Gateway
+metadata:
+ name: metal-control-plane
+ namespace: "{{ gateway_namespace }}"
+spec:
+ gatewayClassName: eg
+ addresses:
+ - value: 172.42.0.42
+ infrastructure:
+ parametersRef:
+ group: gateway.envoyproxy.io
+ kind: EnvoyProxy
+ name: metal-control-plane
+ listeners:
+ - protocol: HTTP
+ port: {{ gateway_http_port }}
+ name: http
+ hostname: "*.{{ metal_control_plane_ingress_dns }}"
+ - protocol: HTTPS
+ port: {{ gateway_https_port }}
+ name: https
+ hostname: "*.{{ metal_control_plane_ingress_dns }}"
+ tls:
+ mode: Terminate
+ certificateRefs:
+ - group: ""
+ kind: Secret
+ name: default-tls
+{% for name, port in gateway_tcp_listeners.items() %}
+ - protocol: TCP
+ name: {{ name }}
+ port: {{ port }}
+{% endfor %}
diff --git a/scripts/roll_certs.sh b/scripts/roll_certs.sh
index 7fc34acd..13487d85 100755
--- a/scripts/roll_certs.sh
+++ b/scripts/roll_certs.sh
@@ -13,7 +13,8 @@ rm *.csr
for component in \
grpc \
- masterdata-api; do
+ masterdata-api \
+ default-gateway; do
pushd $component
echo "generating $component certs"