In this installation guide, you install Gloo Gateway in a Kubernetes cluster by using Argo CD. Argo CD is a declarative continuous delivery tool that is especially popular for large, production-level installations at scale. This approach incorporates Helm configuration files.

Before you begin

  1. Create or use an existing Kubernetes cluster.
  2. Install the following command-line tools.
    • kubectl, the Kubernetes command line tool. Download the kubectl version that is within one minor version of the Kubernetes clusters you plan to use.
    • argo, the Argo CD command line tool.
  3. 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   
      
  4. Update the default Argo CD password for the admin user to solo.io.
      # bcrypt(password)=$2a$10$79yaoOg9dL5MO8pn8hGqtO4xQDejSEVNWAGQR268JHLdrCw6UCYmy
    # password: solo.io
    kubectl -n argocd patch secret argocd-secret \
      -p '{"stringData": {
        "admin.password": "$2a$10$79yaoOg9dL5MO8pn8hGqtO4xQDejSEVNWAGQR268JHLdrCw6UCYmy",
        "admin.passwordMtime": "'$(date +%FT%T%Z)'"
    }}'
      

Install

Install Gloo Gateway by using Argo CD.

  1. Install the custom resources of the Kubernetes Gateway API version 1.4.0.

      kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yaml
      

    Example output:

      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
    customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created
      
  2. Port-forward the Argo CD server on port 9999.

      kubectl port-forward svc/argocd-server -n argocd 9999:443
      
  3. Open the Argo CD UI.

  4. Log in with the admin username and solo.io password.

  5. Set your Gloo Gateway license key as an environment variable. If you do not have one, contact an account representative. If you want to use the capabilities of agentgateway enterprise, you need an additional agentgateway enterprise license.

      export GLOO_GATEWAY_LICENSE_KEY=<gloo-gateway-license-key>
    export AGENTGATEWAY_LICENSE_KEY=<agentgateway-license-key>
      
  6. Create an Argo CD application to deploy the Gloo Gateway CRD Helm chart.

      kubectl apply -f- <<EOF
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: gloo-gateway-crds-helm
      namespace: argocd
    spec:
      destination:
        namespace: gloo-system
        server: https://kubernetes.default.svc
      project: default
      source:
        chart: gloo-gateway-crds
        helm:
          skipCrds: false
        repoURL: us-docker.pkg.dev/solo-public/gloo-gateway/charts
        targetRevision: 2.0.1
      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
        - ServerSideApply=true
    EOF
      
  7. Create an Argo CD application to install the Gloo Gateway Helm chart.

      kubectl apply -f- <<EOF
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: gloo-gateway-helm
      namespace: argocd
    spec:
      destination:
        namespace: gloo-system
        server: https://kubernetes.default.svc
      project: default
      source:
        chart: gloo-gateway
        helm:
          skipCrds: false
          parameters:
          - name: controller.image.pullPolicy
            value: "Always"
          - name: licensing.glooGatewayLicenseKey
            value: "$GLOO_GATEWAY_LICENSE_KEY"
            forceString: true
          - name: licensing.agentgatewayLicenseKey
            value: "$AGENTGATEWAY_LICENSE_KEY"
            forceString: true
        repoURL: us-docker.pkg.dev/solo-public/gloo-gateway/charts
        targetRevision: 2.0.1
      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    
        - ServerSideApply=true
    EOF
      
  8. Verify that the control plane is up and running.

      kubectl get pods -n gloo-system 
      

    Example output:

      NAME                             READY   STATUS    RESTARTS   AGE
    gloo-gateway-6b5bb4db6b-c2pkq   1/1     Running   0          4m4s
      
  9. Verify that the gloo-gateway-v2 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 
      
  10. Open the Argo CD UI and verify that you see the Argo CD application with a Healthy and Synced status.

Next steps

Now that you have Gloo Gateway set up and running, check out the following guides to expand your API gateway capabilities.

Cleanup

You can remove the resources that you created in this guide.

Follow the Uninstall with Argo CD guide.