Contour v0.5.0
Contour 0.5
Heptio is delighted to announce the release of Contour 0.5.
New and improved
The backend service protocol is now configurable
The Kubernetes Service object provides the ability to specify the layer 3 protocol, TCP or UDP, of a service but is mute on the subject of the service's layer 7 protocol. This presents a conundrum for those wishing to host services that speak HTTP/2 natively with as Envoy defaults to speaking HTTP/1 to all backend services.
To solve this Contour 0.5 introduces a new class of annotations on Service documents, contour.heptio.com/upstream-protocol.{protocol}
, which specifies the protocol used by the upstream. The annotation value contains a list of port names and/or numbers separated by a comma that must match with the ones defined in the Service
definition. For now, just h2
is supported, eg: contour.heptio.com/upstream-protocol.h2: "80,443"
will specify that port's 80 and 443 defined in the Service spec speak HTTP/2.
Fixes #152 with warm thanks to @glerchundi.
gRPC rate limits between Contour and Envoy substantially increased
Contour 0.5.0 resolves two sources of insufficient gRPC rate limits between Contour and Envoy. The symptoms of hitting gRPC limits vary, but revolve around the theme of "Envoy doesn't see changes in the API server until I restart Contour".
The underlying cause is a large number of Service objects in your cluster -- these don't have to be associated with an Ingress. Currently Contour creates a CDS Cluster record for any Service object it learns about through the API (see #298). Each CDS record will cause Envoy to open a new EDS stream, one per Cluster, which can blow through the default limits that Envoy, as the gRPC client, and Contour, as the gRPC server, have set.
The easiest ways to detect if this issue is occurring in your cluster is to look for lines about "cluster warming"
[2018-04-03 03:34:16.920][1][info][upstream] source/common/upstream/cluster_manager_impl.cc:388] add/update cluster test2/reverent-noether/80 starting warming
[2018-04-03 03:34:16.922][1][info][upstream] source/common/upstream/cluster_manager_impl.cc:388] add/update cluster test2/serene-bohr/80 starting warming
[2018-04-03 03:34:16.924][1][info][upstream] source/common/upstream/cluster_manager_impl.cc:388] add/update cluster test2/sleepy-hugle/80 starting warming
Without a matching "warming complete" message.
Many thanks to Alexander Lukyanchenko (@Lookyan) who provided the patches to increase the gRPC limits on both the Contour and Envoy sides. Fixes #291, #293, #299, and #306.
This fix is also available in Contour 0.4.1.
Other bug fixes and improvements in this release
- Contour is now built with Go 1.10.1. Thanks @emman27
- Envoy has been upgraded to version 1.6.0. Thanks @shaneog
- All the deployment manifests now use the same set of command line flags. Thanks @cmaloney
- Preparatory work to address #272 and #227 has landed in this release. The remaining work on these issues will land in 0.6 and may be backported to 0.5.1 if necessary.
Upgrading
Contour now targets the Envoy 1.6.0 API. You should ensure that your Deployment or Daemonset manifests are pinned to Envoy's v1.6.0
tag.
spec:
containers:
- image: docker.io/envoyproxy/envoy-alpine:v1.6.0