@@ -500,7 +500,13 @@ kubectl apply -f metallb-bgp-advertisement.yml
500500{{< /tabs >}}
501501<br/>
502502
503- Now that MetalLB is configured, enable `ingress` in the `tenant-root` :
503+ Now that MetalLB is configured, enable traffic routing for the `tenant-root`.
504+ You can use Ingress (nginx), Gateway API (Envoy Gateway), or both simultaneously.
505+
506+ {{< tabs name="traffic_routing_metallb" >}}
507+ {{% tab name="Ingress (default)" %}}
508+
509+ Enable `ingress` in the `tenant-root` :
504510
505511` ` ` bash
506512kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '
@@ -535,6 +541,66 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(
535541root-ingress-controller LoadBalancer 10.96.91.83 192.168.100.200 80/TCP,443/TCP 48m
536542` ` `
537543
544+ {{% /tab %}}
545+ {{% tab name="Gateway API" %}}
546+
547+ First, enable Gateway API on the platform :
548+
549+ ` ` ` bash
550+ kubectl patch packages.cozystack.io cozystack.cozystack-platform --type=merge -p '{
551+ "spec": {
552+ "components": {
553+ "platform": {
554+ "values": {
555+ "gateway": {
556+ "gatewayAPI": true,
557+ "gatewayClass": "tenant-root"
558+ }
559+ }
560+ }
561+ }
562+ }
563+ }'
564+ ` ` `
565+
566+ Then enable `gateway` on the root tenant :
567+
568+ ` ` ` bash
569+ kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '
570+ {"spec":{
571+ "gateway": true
572+ }}'
573+ ` ` `
574+
575+ Wait for the gateway HelmRelease to become ready :
576+
577+ ` ` ` bash
578+ kubectl -n tenant-root get hr gateway
579+ ` ` `
580+
581+ Expected output :
582+ ` ` ` console
583+ NAME AGE READY STATUS
584+ gateway 1m True Helm upgrade succeeded for release tenant-root/gateway.v1 with chart gateway@...
585+ ` ` `
586+
587+ Verify the GatewayClass is accepted :
588+
589+ ` ` ` bash
590+ kubectl get gatewayclass tenant-root
591+ ` ` `
592+
593+ Expected output :
594+ ` ` ` console
595+ NAME CONTROLLER ACCEPTED AGE
596+ tenant-root gateway.envoyproxy.io/gatewayclass-controller True 1m
597+ ` ` `
598+
599+ For more details on the Gateway API architecture and configuration, see [Gateway API]({{% ref "/docs/v1/networking/gateway-api" %}}).
600+
601+ {{% /tab %}}
602+ {{< /tabs >}}
603+
538604# ## 4.b. Node Public IP Setup
539605
540606If your cloud provider does not support MetalLB, you can expose ingress controller using external IPs on your nodes.
@@ -566,7 +632,13 @@ kubectl patch packages.cozystack.io cozystack.cozystack-platform --type=merge -p
566632}'
567633` ` `
568634
569- Next, enable `ingress` for the root tenant :
635+ Next, enable traffic routing for the root tenant.
636+ You can use Ingress (nginx), Gateway API (Envoy Gateway), or both.
637+
638+ {{< tabs name="traffic_routing_public_ip" >}}
639+ {{% tab name="Ingress (default)" %}}
640+
641+ Enable `ingress` for the root tenant :
570642
571643` ` ` bash
572644kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '{
@@ -590,21 +662,97 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP
590662root-ingress-controller ClusterIP 10.96.91.83 192.168.100.11,192.168.100.12,192.168.100.13 80/TCP,443/TCP 48m
591663` ` `
592664
665+ {{% /tab %}}
666+ {{% tab name="Gateway API" %}}
667+
668+ Enable Gateway API on the platform and `gateway` on the root tenant :
669+
670+ ` ` ` bash
671+ kubectl patch packages.cozystack.io cozystack.cozystack-platform --type=merge -p '{
672+ "spec": {
673+ "components": {
674+ "platform": {
675+ "values": {
676+ "gateway": {
677+ "gatewayAPI": true,
678+ "gatewayClass": "tenant-root"
679+ }
680+ }
681+ }
682+ }
683+ }
684+ }'
685+
686+ kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '{
687+ "spec":{
688+ "gateway": true
689+ }
690+ }'
691+ ` ` `
692+
693+ The EnvoyProxy will automatically create a ClusterIP Service with the configured externalIPs. Verify :
694+
695+ ` ` ` bash
696+ kubectl get svc -n cozy-envoy-gateway
697+ ` ` `
698+
699+ Expected output shows the merged Envoy service with externalIPs :
700+ ` ` ` console
701+ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
702+ envoy-tenant-root-... ClusterIP 10.96.83.194 192.168.100.11,192.168.100.12,192.168.100.13 80/TCP,443/TCP 1m
703+ ` ` `
704+
705+ For more details, see [Gateway API]({{% ref "/docs/v1/networking/gateway-api" %}}).
706+
707+ {{% /tab %}}
708+ {{< /tabs >}}
709+
593710# # 5. Finalize Installation
594711
595712# ## 5.1. Setup Root Tenant Services
596713
597- Enable `etcd` and `monitoring` for the root tenant :
714+ Enable core services for the root tenant. Choose the tab matching the traffic routing you configured in step 4 :
715+
716+ {{< tabs name="root_tenant_services" >}}
717+ {{% tab name="Ingress" %}}
718+
719+ ` ` ` bash
720+ kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '
721+ {"spec":{
722+ "ingress": true,
723+ "monitoring": true,
724+ "etcd": true
725+ }}'
726+ ` ` `
727+
728+ {{% /tab %}}
729+ {{% tab name="Gateway API" %}}
730+
731+ ` ` ` bash
732+ kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '
733+ {"spec":{
734+ "gateway": true,
735+ "monitoring": true,
736+ "etcd": true
737+ }}'
738+ ` ` `
739+
740+ {{% /tab %}}
741+ {{% tab name="Both" %}}
598742
599743` ` ` bash
600744kubectl patch -n tenant-root tenants.apps.cozystack.io root --type=merge -p '
601745{"spec":{
602746 "ingress": true,
747+ "gateway": true,
603748 "monitoring": true,
604749 "etcd": true
605750}}'
606751` ` `
607752
753+ {{% /tab %}}
754+ {{< /tabs >}}
755+
608756# ## 5.2. Check the Cluster State and composition
609757
610758Check the provisioned persistent volumes :
@@ -725,3 +873,4 @@ In this example, `grafana.example.org` is located at 192.168.100.200.
725873
726874- [Configure OIDC]({{% ref "/docs/v1/operations/oidc/" %}}).
727875- [Create a user tenant]({{% ref "/docs/v1/getting-started/create-tenant" %}}).
876+ - [Set up Gateway API]({{% ref "/docs/v1/networking/gateway-api" %}}) as an alternative to ingress-nginx.
0 commit comments