The information in this documentation is geared towards users that want to use Gloo Gateway proxies with the Kubernetes Gateway API. If you want to use the Gloo Edge API instead, see the Gloo Gateway (Gloo Edge API) documentation.
Argo CD
Use Argo CD to automate the deployment and management of Gloo Gateway.
Argo Continuous Delivery (Argo CD) is a declarative, Kubernetes-native continuous deployment tool that can read and pull code from Git repositories and deploy it to your cluster. Because of that, you can integrate Argo CD into your GitOps pipeline to automate the deployment and synchronization of your apps.
customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io created
Install Argo CD in your cluster.
kubectl create namespace argocd
until kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.3/manifests/install.yaml > /dev/null 2>&1; do sleep 2; done
# wait for deployment to complete
kubectl -n argocd rollout status deploy/argocd-applicationset-controller
kubectl -n argocd rollout status deploy/argocd-dex-server
kubectl -n argocd rollout status deploy/argocd-notifications-controller
kubectl -n argocd rollout status deploy/argocd-redis
kubectl -n argocd rollout status deploy/argocd-repo-server
kubectl -n argocd rollout status deploy/argocd-server
Update the default Argo CD password for the admin user to solo.io.
Verify that the gloo-gateway GatewayClass is created. You can optionally take a look at how the gateway class is configured by adding the -o yaml option to your command.
kubectl get gatewayclass gloo-gateway
Open the Argo CD UI and verify that you see the Argo CD application with a Healthy and Synced status.
Use the following YAML file to create an Argo CD application and deploy the Gloo Gateway Enterprise Helm chart. Make sure to enter your license key in the license_key field.
kubectl apply -f- <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gloo-gateway-ee-helm
namespace: argocd
spec:
destination:
namespace: gloo-system
server: https://kubernetes.default.svc
project: default
source:
chart: gloo-ee
helm:
skipCrds: false
values: |
gloo:
discovery:
enabled: false
disableLeaderElection: true
gatewayProxies:
gatewayProxy:
disabled: true
kubeGateway:
enabled: true
gloo-fed:
enabled: false
glooFedApiserver:
enable: false
grafana:
defaultInstallationEnabled: false
license_key: <enterprise-license-key>
observability:
enabled: false
prometheus:
enabled: false
settings:
disableKubernetesDestinations: true
repoURL: https://storage.googleapis.com/gloo-ee-helm
targetRevision: 1.18.0-beta2
syncPolicy:
automated:
# Prune resources during auto-syncing (default is false)
prune: true
# Sync the app in part when resources are changed only in the target Kubernetes cluster
# but not in the git source (default is false).
selfHeal: true
syncOptions:
- CreateNamespace=true
EOF
Verify that the gloo control plane is up and running.
Verify that the gloo-gateway GatewayClass is created. You can optionally take a look at how the gateway class is configured by adding the -o yaml option to your command.
kubectl get gatewayclass gloo-gateway
Open the Argo CD UI and verify that you see the Argo CD application with a Healthy and Synced status.
Verify that the gateway is created successfully. You can also review the external address that is assigned to the gateway. Note that depending on your environment it might take a few minutes for the load balancer service to be assigned an external address.
kubectl get gateway http -n gloo-system
Example output:
NAME CLASS ADDRESS PROGRAMMED AGE
http gloo-gateway a3a6c06e2f4154185bf3f8af46abf22e-139567718.us-east-2.elb.amazonaws.com True 93s
The name and namespace of the gateway resource that serves the route. In this example, you use the HTTP gateway that you created earlier.
spec.hostnames
A list of hostnames that the route is exposed on.
spec.rules.backendRefs
The Kubernetes service that serves the incoming request. In this example, requests to www.example.com are forwarded to the httpbin app on port 9000. Note that you must create the HTTP route in the same namespace as the service that serves that route. To create the HTTP route resource in a different namespace, you must create a ReferenceGrant resource to allow the HTTP route to forward requests to a service in a different namespace. For more information, see the Kubernetes API Gateway documentation.
Verify that the HTTPRoute is applied successfully.
kubectl get -n httpbin httproute/httpbin -o yaml
Send a request to the httpbin app.
Get the external address of the gateway and save it in an environment variable.
export INGRESS_GW_ADDRESS=$(kubectl get svc -n gloo-system gloo-proxy-http -o=jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}")
echo $INGRESS_GW_ADDRESS
Send a request to the httpbin app and verify that you get back a 200 HTTP response code. Note that it might take a few seconds for the load balancer service to become fully ready and accept traffic.
Now that you have Gloo Gateway set up and running, check out the following guides to expand your API gateway capabilities.
Check out this blog post to learn how you can use Argo CD to deploy an application and how to manually sync the app with your cluster. This blog post also includes other guides for how to set up request matching, apply policies, or rollout a new version of an app.
Add routing capabilities to your httpbin route by using the Traffic management guides.
Explore ways to make your routes more resilient by using the Resiliency guides.
Secure your routes with external authentication and rate limiting policies by using the Security guides.
info
Keep in mind that you can only have one installation of Gloo Gateway with the Kubernetes Gateway API at a time. Installing the product twice causes required Kubernetes resources that are cluster-scoped, such as GatewayClass, to fail. You can still create multiple Gateway resources to configure HTTP and HTTPS listeners on Gloo Gateway.