Ambassador

Overview

Ambassador provides a set of products and open source components including a cloud native API gateway. This article is a starting point for running Ambassador products on Kublr managed Kubernetes clusters.

Kublr provisions and manages Kubernetes clusters that are fully compatible and conformant with upstream open source Kubernetes. Therefore any instructions Ambassador provides in the documentations for generic Kubernetes will also work for Kublr.

At the same time Kublr provides additional options that allow automating components deployment as a part of cluster provisioning and operations processes. It enable easier implementation of “infrastructure-as-code” approach.

This article will focus on Kublr-specific Ambassador deployment options.

Deploy Ambassador Edge Stack

Ambassador Edge Stack can be deployed using standard Ambassador getting started and deployment guides. The methods include using Helm package.

Kublr allows including any additional helm packages in the cluster spec to be deployed and updated together with the Kublr cluster.

The simplest way to include Ambassador into your “infrastructure-as-code” script is to include the following fragment into a Kublr cluster specification:

spec:
  ...
  packages:
    ambassador:
      chart:
        url: 'https://getambassador.io/helm/ambassador-6.5.18.tgz'
      releaseName: ambassador
      namespace: ambassador
      helmVersion: 'v3.4.0'
      #values:
      #  key: value

As you can see, you can adjust the the Helm release name, the namespace into which edge stack is deployed, or the version and/or location of the ambassador helm package. In addition, if the package values customization is necessary, it can be done as well.

When the cluster is deployed you can verify that Ambassador helm packaged is a part of the cluster in the cluster’s “Applications” tab:

Cluster Applications Tab with Ambassador Helm Package

You can also verify the package deployment in the cluster terminal:

  • via Kublr helm package CRD objects:

    $ kubectl get -n ambassador helmcharts
    
    NAME         STATUS     CREATED
    ambassador   deployed   151m
    
  • via Helm:

    $ helm -n ambassador list
    
    NAME         NAMESPACE    REVISION   UPDATED               STATUS     CHART               APP VERSION
    ambassador   ambassador   1          2021-02-05 16:54:12   deployed   ambassador-6.5.18   1.11.1
    
  • via Kubectl:

    $ kubectl get -n ambassador pods
    
    NAME                                READY   STATUS    RESTARTS   AGE
    ambassador-6b585c74ff-hdp8w         1/1     Running   0          137m
    ambassador-6b585c74ff-tt7z8         1/1     Running   0          137m
    ambassador-6b585c74ff-vv9jk         1/1     Running   0          137m
    ambassador-redis-64b7c668b9-rhnws   1/1     Running   0          137m
    

Note that Kublr CLI terminal does not provide a persistent workspace and any changes you make in one sessions will not be available in follow-up sessions. It is recommended therefore to install kubectl and Ambassador edgectl tools locally to persist configuration.

It is still possible to download and use edgectl in Kublr terminal for the duration of the session; so you can follow Ambassador instructions with minor adjustments to install edgectl and login into the Edge Stack dashboard:

# download edgectl

$ curl -fL https://metriton.datawire.io/downloads/linux/edgectl -o edgectl && chmod a+x edgectl

# get Ambassador endpoint

$ AMB_HOST="$(kubectl -n ambassador get svc ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')" ; echo $AMB_HOST

52.226.45.155

# login into Ambassador dashboard

$ ./edgectl login --url $AMB_HOST

Connecting to the Ambassador Edge Policy Console in this cluster...
Visit the following URL to access the Ambassador Edge Policy Console:
https://52.226.45.155/edge_stack/admin/#token

Open the provided URL in the browser to login:

Ambassador Dashboard