In a microservices world, the development workflow goes from product definition all the way to operations. This is why, at Datawire, we believe it’s crucial for a services team to have full control over the entire workflow. Yet giving a team of developers unfettered access to operational infrastructure can be a recipe for shooting yourself in the foot.
In working with organizations adopting Kubernetes, we’ve seen first hand how it’s possible to safely give developers access to some crucial operational infrastructure. Developers can use Kubernetes manifests to safely define how their infrastructure is supposed to run, without worrying (too much) about shooting themselves in the foot.
We’re excited to announce Ambassador 0.17, which extends the concept of self-service operational infrastructure to your edge service. With 0.17, Ambassador now supports Kubernetes annotations for configuration.
Here’s an example annotation:
apiVersion: v1 kind: Service metadata: name: hello-world-canary annotations: getambassador.io/config: | --- apiVersion: ambassador/v0 kind: Mapping name: hello-world-canary-mapping prefix: /hello/ service: hello-world-canary weight: 10 spec: selector: app: hello-world-canary ports: - port: 80 targetPort: http-api type: ClusterIP
In this example, we’re configuring a new mapping in Ambassador named
hello-world-canary-mapping that maps the
hello prefix to the
In this release, we’re also adding support for canary deployments. By specifying the
weight parameter as shown in the example above, you can tell Ambassador to route a specific percentage of traffic (10% in the above example) to the given service. We’ve found this to be extraordinarily useful capability in our own service rollouts, as developers can easily do a canary deployment with a trivial configuration change. Rollback is as simple as deleting the service and deployment.
Header and Host matching
Ambassador 0.17 also supports mappings that match HTTP headers (including the Host header) in addition to the URL prefix, allowing your application to more easily take advantage of header data or host-based routing. Of course, header matching can be trivially combined with weights to allow for maximum flexibility when rolling out upgrades or entirely new services.
Envoy and Ambassador
Ambassador uses the Envoy Proxy for all of the L7 routing capabilities. Envoy’s incredibly powerful and has a ton of features. In response to our many customer feature requests, we’ve gradually been exposing more features of Envoy in Ambassador’s configuration.