PRODUCT RELEASE

New Kubernetes 1.18 Extends Ingress

Ambassador Edge Stack 1.4 allows users to preview new Kubernetes Ingress features

Last month, the Kubernetes team released Kubernetes 1.18, which extended Ingress. The two most exciting features include a new IngressClass resource and the new pathType field.

To minimize the risk for our users who want to try out these exciting new features, the Ambassador Edge Stack supports the latest version of the Kubernetes Ingress specifications.

As a team, we believe strongly in continually supporting evolving standards such as Kubernetes ingress, which we adopted and announced our initial support back in September 2019. Currently, the Ambassador Edge Stack is the only ingress controller that supports these new additions to the ingress specification.

Support for IngressClass

Kubernetes 1.18 introduced the IngressClass resource, effectively replacing the kubernetes.io/ingress.class annotation convention.

You may define an IngressClass resource with the spec.controller field value of getambassador.io/ingress-controller .

apiVersion: networking.k8s.io/v1beta1

kind: IngressClass

metadata:

name: ambassador

annotations:

ingressclass.kubernetes.io/is-default-class: "true"

spec:

controller: getambassador.io/ingress-controller

Ingress objects can then be updated to reference our newly created IngressClass, given spec.ingressClassName: ambassador

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: ingress-changes

spec:

ingressClassName: ambassador

[...]

The new IngressClass resource allows for extensibility by setting a spec.parameters field. At the moment, Ambassador makes no use of this field, and its usage is reserved for future development. If you wish to configure your Ambassador deployment further, using an Ambassador Module resource is still the recommended way.

Support for pathType

Paths can now define different matching behaviors using the pathType field:

Exact - matches the URL path exactly

- matches the URL path exactly Prefix - matches based on a URL path prefix

- matches based on a URL path prefix ImplementationSpecific - same behavior as Prefix for Ambassador

For example:

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: ingress-changes

spec:

ingressClassName: ambassador

rules:

- http:

paths:

- path: /foo/

pathType: ImplementationSpecific

backend:

serviceName: path-rules-prefix

servicePort: 80

- path: /bar/

pathType: Exact

backend:

serviceName: path-rules-exact

servicePort: 80

If unspecified, the pathType field will default to a value of ImplementationSpecific , which uses the same matching rules as the Ambassador Mappings' prefix field for backward compatibility reasons.

Added support for a single wildcard * as the first label in the hostname

Rules with a wildcard host will require the HTTP request host header to be equal to the suffix of the defined rule. Wildcards are only supported on the first level.

For example:

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: ingress-changes

spec:

ingressClassName: ambassador

rules:

- host: "*.foo.com"

http:

paths:

[...]

Additional Bug Fixes and Enhancements

The following additional fixes and enhancements apply to the Ambassador Edge Stack 1.4 and the Ambassador API Gateway:

Feature: Support Ingress Path types improvements from networking.k8s.io/v1beta1 on Kubernetes 1.18+

Feature: Support Ingress hostname wildcards

Feature: Support for the IngressClass Resource, added to networking.k8s.io/v1beta1 on Kubernetes 1.18+. For more about new Ingress support, see the Ingress Controller documentation.

Feature: Mapping s support the cluster_tag attribute to control the name of the generated Envoy cluster (thanks, Stefan Sedich!) See the Advanced Mapping Configuration documentation for more.

s support the attribute to control the name of the generated Envoy cluster (thanks, Stefan Sedich!) See the Advanced Mapping Configuration documentation for more. Feature: Support Envoy’s ability to force response headers to canonical HTTP case (thanks, Puneet Loya!) See the Ambassador Module documentation for more.

Bugfix: Correctly ignore Kubernetes services with no metadata (thanks, Fabrice!)

The following additional fixes and enhancements apply to the Ambassador Edge Stack 1.3:

Feature: edgectl install output has clearer formatting

output has clearer formatting Feature: edgectl install offers help when the installation does not succeed

offers help when the installation does not succeed Feature: edgectl install uploads installer and AES logs to a private area upon failure so Datawire support can help

uploads installer and AES logs to a private area upon failure so Datawire support can help Bugfix: The “Filters” tab in the WebUI no longer renders the value of OAuth client secrets that are stored in Kubernetes secrets.

Bugfix: The ACME client of one Ambassador install will no longer interfere with the ACME client of another Ambassador install in the same namespace with a different AMBASSADOR_ID.

Bugfix: edgectl intercept supports matching headers values against regular expressions once more

supports matching headers values against regular expressions once more Bugfix: edgectl install correctly handles more local and cluster environments

correctly handles more local and cluster environments For more about edgectl improvements, see the Service Preview and Edge Control documentation.

Installing and Upgrading to 1.4

To install the Ambassador Edge Stack, follow the quick start.

To upgrade from your current version of the Ambassador Edge Stack to 1.4, please follow the instructions here.

Get Started Today

The Ambassador Edge Stack is a complete superset of the Ambassador API Gateway (open-source), with integrated support for rate limiting, authentication, filter management, and more. The Edge Stack installs in minutes in any Kubernetes cluster. To get started, visit https://www.getambassador.io/user-guide/getting-started/

And, if Ambassador is working well for you, we’d love to hear about it. Drop us a line in the comments below, or @getambassadorio on Twitter.