Using Kubernetes API Gateway with Argo Rollouts

Quick start - Argo Rollouts Gateway API plugin https://rollouts-plugin-trafficrouter-gatewayapi.readthedocs.io/en/latest/quick-start/

StepNameNamespaceOnce PerKindPurpose
2egdefaultClusterGatewayClassCreate a gateway
2egdefaultClusterGateway
3gateway-controller-roleargo-rolloutsClusterClusterRoleAllow Argo Rollouts to edit Http Routes
3gateway-admin?ClusterClusterRoleBinding
4argo-rollouts-http-routedefaultApplicationHTTPRouteCreate an HTTP route
5argo-rollouts-stable-servicedefaultApplicationServiceCreate a Rollout
5argo-rollouts-canary-servicedefaultApplicationService
5rollouts-demodefaultApplicationRollout

Argo Rollouts Gateway API plugin

Install the Gateway Provider (Cluster)

Envoy Gateway, eenmalig per cluster1

vagrant ssh c2d-argocd
helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.5.0 \
   -n envoy-gateway-system --create-namespace

Show me

[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$ helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.5.0 \
   -n envoy-gateway-system --create-namespace
NAME: eg
LAST DEPLOYED: Fri Jan 24 11:55:30 2025
NAMESPACE: envoy-gateway-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
**************************************************************************
*** PLEASE BE PATIENT: Envoy Gateway may take a few minutes to install ***
**************************************************************************

Envoy Gateway is an open source project for managing Envoy Proxy as a standalone or Kubernetes-based application gateway.

Thank you for installing Envoy Gateway! 🎉

Your release is named: eg. 🎉

Your release is in namespace: envoy-gateway-system. 🎉

To learn more about the release, try:

  $ helm status eg -n envoy-gateway-system
  $ helm get all eg -n envoy-gateway-system

To have a quickstart of Envoy Gateway, please refer to https://gateway.envoyproxy.io/latest/user/quickstart.html.

To get more details, please visit https://gateway.envoyproxy.io and https://github.com/envoyproxy/gateway.
[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$

kubectl wait --timeout=5m \
    -n envoy-gateway-system deployment/envoy-gateway \
  --for=condition=Available

Show me

[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$ kubectl wait --timeout=5m \
    -n envoy-gateway-system deployment/envoy-gateway \
  --for=condition=Available
deployment.apps/envoy-gateway condition met
[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$

Create a gateway (Cluster)

---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
  name: eg
  namespace: default
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: eg
  namespace: default
spec:
  gatewayClassName: eg
  listeners:
    - name: http
      protocol: HTTP
      port: 80
k get gatewayclass -n default
k get gateway -n default

Show me

[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$ k get gatewayclass -n default
NAME   CONTROLLER                                      ACCEPTED   AGE
eg     gateway.envoyproxy.io/gatewayclass-controller   True       88s
[vagrant@c2d-argocd ~ (|microk8s:argo-rollouts)]$ k get gateway -n default
NAME   CLASS   ADDRESS    PROGRAMMED   AGE
eg     eg      1.1.4.10   True         91s

Allow Argo Rollouts to edit Http Routes (Cluster)

Create an HTTP route (Application)

[root@c2d-argocd ~ (|microk8s:argo-rollouts)]# k get httproutes -n default
NAME                       HOSTNAMES   AGE
argo-rollouts-http-route               17s

Create a Rollout (Application)

Verify

Argo Rollouts Gateway API plugin

kubectl rollout restart deployment -n argo-rollouts argo-rollouts
  --namespace argo-rollouts


Last modified May 23, 2025: argocd C2-664 C2-679 C2-722 (40968af)