Add on: Ambassador

:warning:Ambassador is available on the latest and 1.19+ tracks.

Ambassador API Gateway enables you to easily expose, secure, and manage traffic to your Kubernetes microservices of any type. Enable this add on with:

microk8s enable ambassador

You can now expose a Service by creating an Ingress . Note that Ambassador will only serve Ingress resources that include the annotation kubernetes.io/ingress.class: ambassador (otherwise they are just ignored).

For example:

cat<<EOF | microk8s.kubectl apply -f -
---
kind: Pod
apiVersion: v1
metadata:
  name: foo-app
  labels:
    app: foo
spec:
  containers:
  - name: foo-app
    image: hashicorp/http-echo:0.2.3
    args:
    - "-text=foo"
---
kind: Service
apiVersion: v1
metadata:
  name: foo-service
spec:
  selector:
    app: foo
  ports:
  # Default port used by the image
  - port: 5678
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: ambassador
spec:
  rules:
  - http:
      paths:
      - path: /foo
        backend:
          serviceName: foo-service
          servicePort: 5678
EOF

Now verify that the ingress works:

# should output "foo"
curl localhost/foo
2 Likes

(Suggested documentation for the Ambassador API Gateway)

Ambassador API Gateway enables you to easily expose, secure, and manage traffic
to your Kubernetes microservices of any type. Enable this add on with:

microk8s enable ambassador

Ambassador is now ready for use. Now you can try to expose a Service by creating an Ingress. Note well that Ambassador will only serve Ingress resources that include the annotation kubernetes.io/ingress.class: ambassador (otherwise they are just ignored).

cat<<EOF | microk8s.kubectl apply -f -
---
kind: Pod
apiVersion: v1
metadata:
  name: foo-app
  labels:
    app: foo
spec:
  containers:
  - name: foo-app
    image: hashicorp/http-echo:0.2.3
    args:
    - "-text=foo"
---
kind: Service
apiVersion: v1
metadata:
  name: foo-service
spec:
  selector:
    app: foo
  ports:
  # Default port used by the image
  - port: 5678
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: ambassador
spec:
  rules:
  - http:
      paths:
      - path: /foo
        backend:
          serviceName: foo-service
          servicePort: 5678
EOF

Now verify that the ingress works:

# should output "foo"
curl localhost/foo
1 Like

@inercia thanks for the example! I will get this added to the docs.

When i click on the ambassador docs link here (https://microk8s.io/docs/addon-ambassador) i get error 500.

I’ve poked around the posts here, but I can’t see anything wrong with the way it was added. I guess we’ll file an issue on the docs site

@balchua1 just FYI, this will be fixed soon - https://github.com/canonical-web-and-design/canonicalwebteam.discourse-docs/pull/42

2 Likes