Skip to content

Releases: projectcontour/contour

Contour 1.5.0

29 May 02:22
Compare
Choose a tag to compare

We are delighted to present version 1.5.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

New and improved

TLS Fallback Certificate Support

The Contour HTTPProxy API now includes better support for TLS clients that don't support SNI by allowing cluster operators to specify a fallback certificate that terminates TLS sessions where no SNI server name is provided. This feature is opt-in since it is incompatible with TLS client certificate validation and allows SNI name bypass, which may be undesirable in some deployments. Access to the fallback certificate is managed with the usual Contour TLS certificate delegation mechanism.

(Associated PRs: #2528, #2477, #2504, #2477. #2535, #2543)

Thanks @stevesloka for designing and implementing this feature.

gRPC Certificate Rotation

The TLS keys and certificates that secure the gRPC session between Envoy and Contour can now be rotated without needing to restart any Pods.

(Associated PRs: #2333, #2555)

Thanks @tsaarni for driving this feature over the last couple of releases, both in the Contour and Envoy projects.

The example Contour deployment now uses certificates that include the CA certificate bundle. This change makes the example deployment compatible with certificates generated by cert-manager.

(Associated PRs: #2547)

HTTPProxy Load Balancer Address Support

Contour now updates the status of HTTPProxy documents with the status.loadBalancer.addresses field. This brings HTTPProxy to parity with Ingress, and makes it easier to program automatic DNS record creating for HTTPProxy objects.

(Associated PRs: #2551)

Thanks @youngnick.

TLS Request Misdirection

Contour now programs Envoy to serve a 421 response when HTTP/2 clients use aggressive wildcard certificate matching to re-use the wrong TLS session. This resolves errors where client requests to multiple HTTPProxy objects that are all served with a wildcard TLS certificate can respond with a 404 error when the Host header in the HTTP request doesn't match the SNI server name that was used to establish the TLS session.

(Associated PRs: #2483)

Multiple Load Balancer Address Support

Contour now supports multiple addresses in the --ingress-status-address flag of the contour serve subcommand. This allows sites that deploy Envoy without an external load balancer to more easily publish all the addresses of the Envoy proxies into DNS.

(Associated PRs: #2542)

Thanks @al45tair for this improvement.

Versioned Deployment YAML

The Contour project now publishes the example deployment YAML for each release version. https://projectcontour.io/quickstart/contour.yaml still serves the YAML for the latest release, but you can pin to a specific version with a URL like https://projectcontour.io/quickstart/v1.5.0/contour.yaml.

(Associated PRs: #2552)

Documentation Improvements

  • Improved HTTPProxy API documentation (#2467, #2460)
  • Improved TimeoutPolicy API documentation (#2460)
  • Improved documentation for proxy protocol support on AWS ELBs (#2480) (thanks @savithruml)
  • Miscellaneous documentation improvements (#2500, #2508)

Upgrading

Please consult the upgrade documentation.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.4.0

24 Apr 02:28
Compare
Choose a tag to compare

We are delighted to present version 1.4.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

New and improved

TLS Client authentication

This release adds support for configuring HTTPProxy objects to request validation of client certificates, allowing the use of client certificates for client authentication. This closes #1090.

See the documentation for how to use the feature.

(Associated PRs: #2250, #2390, #2410)

Thanks @tsaarni for getting this implemented.

Ingress changes

Ingress class

As described in #2199, previously, when configured to accept a certain ingress.class annotation, Contour would watch objects with that annotation, and also with no annotation. This caused problems in clusters with more than one ingress controller.

As of #2394, having an ingress.class annotation configured now means that only objects that have that have a matching annotation will cause changes in Contour.

Note that this logic change applies to both Ingress and HTTPProxy documents.

#2340 also updated the annotations documentation to make the various behaviour options more clear.

Ingress Status

Contour now has the ability to write a status.loadBalancer.addresses block to Ingress objects. This block is used by services which need to know how to reach an Ingress' backing service from outside the cluster, like external-dns.

There are two ways for Contour to find this information:

  • by watching a Service object for the Envoy service, and putting the associated status.loadBalancer block from that Service into all associated Ingress objects. This is what is used in the example deployment.
  • Operators can also specify an address on Contour's command line, using the --ingress-status-address flag.

This closes #403, another old outstanding request.

(Associated PRs: #2373, #2386, #2416, #2420)

Separate Health and Metrics listeners

The Contour health and metrics services can now be configured to listen on separate addresses or ports using the new --health-address and --health-port flags. This gives operators the ability to restrict access to Contour's Prometheus metrics.

(Associated PRs: #2407)

Thanks @pickledrick for completing this change.

SNI Improvements

Virtual hosts that are exposed over TLS are now strongly bound to their TLS server name. This is a security improvement that means that clients cannot connect to hostname "A" at the TLS layer and them make HTTP requests for hostname "B".

(Associated PRs: #2381)

When Contour configures an ExternalName service, it now automatically sets the SNI server name used for the proxies HTTP request to match the request's Host header. This improves the compatibility of ExternalName services that proxy to HTTPS resources..

(Associated PRs: #2442)

Configuration documentation

The Contour configuration file is now documented.

Contour Namespace environment variable

In this release, Contour now inspects the CONTOUR_NAMESPACE environment variable. If CONTOUR_NAMESPACE is set, Contour will use this value as the namespace for performing leader election and the namespace for inspecting the Envoy service for load balancer addresses. In either case, explicit configuration values in the configuration file and command-line flags override the environment variable.

Other Improvements

  • Contour now has a metric which indicates the currently running version. (#2383) Thanks @pickledrick.
  • Contour now also has a command line flag to print the current version (#2399) Thanks @pickledrick
  • Add ServiceAccount for Envoy (#2449)
  • Add docs search to the site (#2458)
  • Add explanation of certgen Job image tag usage (#2424)
  • Add github label automation. (#2436)
  • Add ingress class filtering to ingress status updating (#2416)
  • Add redirect for /docs to latest version (#2419)
  • Add the demos and deep dives YouTube link to resources (#2375)
  • Changed targetPort for httpbin pods (#2384)
  • Fix the PR template with new links and frontmatter (#2382)
  • Migrate Service and Ingress to client-go dynamic client (#2373)
  • Move CRD informer list generation to k8s (#2352)
  • Update hostNetworking docs in site deploy-options (#2405)
  • Upgrade Envoy go-control-plane and fix related changes to the spec (#2432)
  • Use the downward api to give the default namespace for configuration variables (#2389)
  • build: apply standard Docker image labels (#2400)
  • build: omit the DWARF symbol table (#2398)
  • build: run misspell across the whole repository (#2439)
  • build: support older git versions to detect current branch (#2415)
  • cmd/contour: remove hard-coded default log fields (#2446)
  • doc: document the Contour configuration file (#2445)
  • docs: update DCO guidelines in CONTRIBUTING (#2425)
  • enable merge_slashes on the httpconnection manager for all listeners so that requests with multiple slashes are merged and processed properly (#2406)
  • hack: improve git tag pushing (#2393)
  • internal/annotation: Refactor annotations code from internal/dag (#2412)
  • internal/assert: Add docs to assert.Equal (#2417)
  • internal/contour: add contour version to metrics (#2383)
  • internal/contour: inprove routeVisitor readability (#2370)
  • internal/dag: improve diagnostics for Secrets errors (#2422)
  • internal/health: separate health and metrics services (#2407)
  • internal: extract Envoy sort polices (#2379)
  • site: add code highlighting (#2440)
  • site: remove misleading comment in example deployment (#2377)
  • site: update contributing guidelines (#2408)
  • site: update slack links (#2444)
  • updating the website with Contour maintainers (#2404)
  • upgrade Envoy version to v1.14.1 (#2434)
  • use sni for clusters when requestHeaderPolicy is set (#2442)

Upgrading

Please consult the upgrade documentation.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.3.0

20 Mar 05:14
Compare
Choose a tag to compare

We are delighted to present version 1.3.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

All Contour users should upgrade to Contour 1.3.0 and Envoy 1.13.1.

New and improved

Contour 1.3.0 includes several new features as well as the usual smattering of fixes and minor improvements.

Removed the --use-extensions-v1beta1-ingress flag

The --use-extensions-v1beta1-ingress flag was removed from the contour serve command. If you have a previous deployment that specifies this command, you must remove it or Contour will fail to start.

PR: #2303
Thanks @davechaney

Renamed the tcpproxy.include field to be singular

The TCPProxy field has only ever supported including a single child document. In order to make this clearer, the includes field is now named include. The includes field is deprecated.

PR: #2201
Thanks @stevesloka

Reject HTTPProxies that lack at least one Service per route

The rule that Route field must reference at least one Service is now enforced.

PR: #2332
Thanks @davecheney

Improved graceful shutdown

Contour now does a better job of gracefully shutting down when it receives SIGINT or SIGTERM.

PR: #2350
Thanks @davecheney

Minor Improvements

  • Add "mitre" to the skip list for lint-misspell #2356
  • Add Contour Philosophy document #2335
  • Add release tooling scripts. #2353
  • Add simple debug logging flag #2286
  • Fix community meeting times #2343
  • Fix the build for units tests. #2361
  • Fixes Contour architecture overview docs #2307
  • Prepare documentation site for v1.3.0 release. #2362
  • Update Envoy dashboard with extra metrics #2324
  • api: enforce at least one service entry per route & tcpproxy #2274
  • build(deps): bump nokogiri from 1.10.5 to 1.10.8 in /site dependencies #2293
  • cmd/contour: change registerEventHandler to new InformerSyncList type #2276
  • cmd/contour: connect all informers to the dynamicHandler #2346
  • cmd/contour: simplify leadership election setup #2348
  • cmd/contour: unify client creation #2339
  • cmd/contour: update leadership election logger context #2305
  • design: add draft for ingress status loadbalancer support stale #2121
  • doc: improve HeaderCondition API documentation #2334
  • docs: document the allowed LoadBalancer strategies #2336
  • examples/contour: update to Envoy 1.13.1 #2314
  • golangci.yml: remove exclude for deleted path #2277
  • hack: pin golangci-lint version to v1.23.8 #2341
  • internal/contour: further clean up holdoff timer logic #2289
  • internal/contour: remove holdoffmaxdelay forced update #2285
  • internal/dag,envoy: use constant for ca.crt #2327
  • internal/dag: clean up TLS validation errors #2300
  • internal/dag: move extension ingress translation to a helper #2301
  • internal/k8s: simplify DynamicConverter #2342
  • makefile: Add a 'make checkall' target #2292
  • site/resources/envoy: add Contour 1.2.1 and Envoy 1.13.1 #2317
  • site: Add docs on how to rotate gRPC certs #2282
  • site: Remove heptio annotations from documentation #2308
  • site: Update the kubernetes tested version to match the kubernetes matrix #2318
  • site: correct Tero's GitHub profile link #2322
  • site: fix API docs rendering #2329
  • site: s/Recommended/Required Envoy #2321
  • site: update architecture overview to include a diagram #2328

Upgrading

Please consult the upgrade documentation.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.2.1

03 Mar 19:27
Compare
Choose a tag to compare

Contour 1.2.1 is patch release for the Contour 1.2 series to address several high severity security issues in Envoy.

Contour 1.2.1 contains no code changes from 1.2.0. This release only tags newer versions of our example and quickstart manifests to reflect the change in Envoy version.

All Contour users should upgrade to Contour 1.2.1 and Envoy 1.13.1.

Envoy 1.13.1

See the Envoy 1.13.1 announcement for details on the vulnerabilities

Upgrading

Please consult the upgrade documentation.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.2.0

21 Feb 02:03
Compare
Choose a tag to compare

We are delighted to present version 1.2.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

All Contour users should upgrade to Contour 1.2.0 and Envoy 1.13.0.

New and improved

Contour 1.2.0 includes several new features as well as the usual smattering of fixes and minor improvements.

Hot-Reload Certificates

Contour now has support for certificate rotation for XDS gRPC interface between Contour and Envoy.
It is achieved by lazily loading certificates and key every time new TLS connection is established by Envoy.

This change addresses only the certificate rotation in Contour (server) and similar support is needed for Envoy (client) to cover the whole use case.

PR: #2198

Thanks @tsaarni

Envoy Shutdown Manager

The Envoy process, the data path component of Contour, at times needs to be re-deployed.
This could be due to an upgrade, a change in configuration, or a node-failure forcing a redeployment.

Contour now offers a new sub-command to named envoy shutdown-manager which will assist in an Envoy rollout to minimize connection errors from clients.
The shutdown manager first sends the healthcheck fail request to Envoy and then begins polling the http/https listeners for active connections from the /stats endpoint available on localhost:9001.
When the connections reach zero or a configured parameter, the pod is allowed to be terminated.
If the pods configurable termination grace period seconds is met before the open connections are fully drained, the pod will be terminated.

This new component runs as another container in the Envoy pod.

Design: https://github.com/projectcontour/contour/blob/master/design/envoy-shutdown.md
PR: #2227

Thanks @stevesloka

Record EventHandler Operation Metrics

Contour adds some new Prometheus metrics for the various API operations and kinds observed from the Kubernetes informers.
This information is helpful to understand the amount of changes that Contour is processing from a Kubernetes cluster.
This change also includes a sample Grafana dashboard.

% curl -s 127.0.0.1:8000/metrics |  grep eventhandler
# HELP contour_eventhandler_operation_total Total number of eventHandler operations received by operation and object kind
# TYPE contour_eventhandler_operation_total gauge
contour_eventhandler_operation_total{kind="contour.heptio.com/IngressRoutev1beta1",op="onAdd"} 2
contour_eventhandler_operation_total{kind="contour.heptio.com/TLSCertificateDelegationv1beta1",op="onAdd"} 1
contour_eventhandler_operation_total{kind="projectcontour.io/HTTPProxyv1",op="onAdd"} 1
contour_eventhandler_operation_total{kind="unknown",op="onAdd"} 76

PR: #2244
PR: #2261

Thanks @davecheney, @youngnick

SafeRegex limit raised

Raise the SafeRegex size limit from 1,000 to 1048576.
There is no evidence that this number is sufficient for all possible regex patterns, thus the limit represents the "no limit" limit because it is currently not
possible for envoy to reject a regex entry in a way that Contour can trace back to the original input.

PR: #2241

Thanks @davecheney

Minor improvements

  • Contour is built with Go 1.13.8
  • Update Envoy to 1.13.0
  • Envoy go-control-plane updated to v0.9.2
  • Upgrade google/go-cmp to version 0.4.0
  • Upgrade client-go to v0.17.0
  • Contour now utilizes the Dynamic client for CRD resources

Bug fixes

Add HTTPProxy Service.Protocol Validation

Adds an enum validation to limit the values for the service.protocol field.

Note: Users will need to reapply the crd spec to get the validation

PR: #2158

Thanks @stevesloka

HTTPProxy requestHeadersPolicy Validation

For an HTTPProxy, a requestHeaderPolicy can only be able to set host header at the HTTProxy.Routes.Service level.

PR: #2157

Thanks @stevesloka

Ensure certgen handles already-existing secrets correctly

The cert-gen example job now ensures that the the Job will succeed if the secrets already exist.

PR: #2178

Thanks @youngnick

Other changes

  • Add Kubernetes Support Matrix
  • Update Envoy list of required extensions

Upgrading

Please consult the Upgrading document for further information on upgrading from Contour 1.1.0 to Contour 1.2.0.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.1.0

10 Jan 03:11
Compare
Choose a tag to compare

We are delighted to present version 1.1.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

All Contour users should upgrade to Contour 1.1.0 and Envoy 1.12.2 as there are some critical vulnerabilities that should be patched.

New and improved

Contour 1.1.0 includes several new features as well as the usual smattering of fixes and minor improvements.

Envoy CVEs

Three CVEs have been addressed by Envoy, the highest security defect is considered 9.0 (critical) severity.

See the Envoy 1.12.2 announcement for details on the vulnerabilities.

As Envoy have not provided fixes for Envoy 1.11 and earlier all Contour users should also upgrade to Envoy 1.12.2.

Prefix Rewrite Support

Prefix rewrite support was removed right before HTTPProxy was released in Contour v1.0.0. Support has now been added back to HTTPProxy and is expressed as a pathRewritePolicy:

apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
  name: rewrite-example
spec:
  virtualhost:
    fqdn: rewrite.bar.com
  routes:
  - services:
    - name: s1
      port: 80
    conditions:
    - prefix: /v1/api
    pathRewritePolicy:
      replacePrefix:
      - prefix: /v1/api
        replacement: /app/api/v1

Thanks @jpeach

Support for specifying a service's protocol in HTTPProxy

Contour now supports defining what protocol Envoy should use when proxying to an upstream application.
(See design doc: https://github.com/projectcontour/contour/blob/master/design/httpproxy-protocol-selection.md)

A new field has been added to the Service spec which encodes the protocol data. Values for this field are: h2, h2c, and tls.

Note: Previously, that data was extracted from the Kubernetes service annotation projectcontour.io/upstream-protocol.{protocol}.

spec:
  virtualhost:
    fqdn: dashboard.kubernetes.com
    tls:
      secretName: kubernetes-dashboard-tls
  routes:
    - conditions:
      - prefix: /
      services:
        - name: kubernetes-dashboard
          protocol: tls # <--- NEW FIELD
          port: 443

Thanks @mattmoor

Support per-Split header manipulation

Adds support for adding and removing request or response headers for each service target in a Contour HTTPProxy resource.
Manipulating headers are also supported per-Service or per-Route.
Headers can be set or removed from the request or response as follows:

apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
  name: header-manipulation
  namespace: default
spec:
  virtualhost:
    fqdn: headers.bar.com
  routes:
    - services:
        - name: s1
          port: 80
          requestHeaderPolicy:
            set:
              - name: X-Foo
                value: bar
            remove:
              - X-Baz
          responseHeaderPolicy:
            set:
              - name: X-Service-Name
                value: s1
            remove:
              - X-Internal-Secret

Thanks @mattmoor

Requests to external domains rewrite host via externalName service

To proxy to another resource outside the cluster (e.g. A hosted object store bucket for example), configure that external resource in a service type externalName.
Then define a headerRequestPolicy which replaces the Host header with the value of the external name service defined previously.

See the externalName section of HTTPProxy docs for more details.

Note: The host rewrite only applied to services which target externalNames.

Thanks: @stevesloka

Minor improvements

  • Various documentation upgrades to projectcontour.io
  • Contour uses SaveRegex now in Envoy configuration
  • Contour is built with Go 1.13.5
  • Add namespace env var to certgen job. Thanks @dhxgit

Bug fixes

Reject a TCPProxy HTTPProxy without Valid TLS Details

To be a valid HTTPProxy, if the tcpproxy stanza is provided, the HTTPProxy must also feature a virtualhost.tls spec with either passthrough: true, or a valid secretName.

Fixes #1958

Thanks @davecheney

301 Upgrade Insecure Routes Irrespective of TCP Proxying

Clean the HTTPProxy spec.virtualhost.tls validation logic and fix the last issue with HTTPProxy TCPProxy logic.

If a HTTPProxy is using TCP proxying then its secure port is forwarded according to the spec.tcpproxy schema.
The insecure port, port 80 is not tcp forwarded and remains connected to a L7 http connection manager.
Because by definition a HTTPProxy using TCP proxying must supply a valid spec.virtualhost.tls block, our 301 upgrade logic applies.
Thus, after this change, if a route on the insecure listener is not using permitInsecure: true, it will by 301 upgraded.

Fixes #1952

Thanks @davecheney

Reject Certificates without CN or SubjectAltName

Envoy crashes when processing a TLS certificate that does not have SubjectAltNames or a CN field in the Subject, so Contour now rejects any certificate which lacks a Subject CommonName (CN) or SubjectAltName extension.

Upstream Envoy issue: envoyproxy/envoy#9182

Fixes #1965

Thanks @davecheney

Run contour & cert-gen job as non-root

Adds securityContext to Contour & certgen jobs manifest examples to not run as root.

Thanks @surajssd

Cert gen now accepts certificate lifetime argument

A certificate-lifetime argument has been added to the Contour certgen job which allows for a duration in days the certificates used for Envoy<>Contour communication to be valid.

Fixes #2017

Thanks @tsaarni

Other bug fixes

  • Contour no longer generates ingress_https route for tcpproxy vhost. Fixes #1954.
  • Quickstart can be re-applied to an existing cluster

Upgrading

Please consult the Upgrading document for further information on upgrading from Contour 1.0.1 to Contour 1.1.0.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.0.1

10 Dec 20:38
Compare
Choose a tag to compare

Contour 1.0.1 is patch release for the Contour 1.0 series to address several high severity security issues in Envoy.

Contour 1.0.1 contains no code changes from 1.0.0. This release only tags newer versions of our example and quickstart manifests to reflect the change in Envoy version.

All Contour users should upgrade to Contour 1.0.1 and Envoy 1.12.2.

Envoy 1.12.2

See the Envoy 1.12.2 announcement for details on the vulnerabilities

Upgrading

Please consult the upgrade documentation.

Are you a Contour user? We would love to know!

If you're using Contour and want to add your organization to our adopters list, please visit this page. If you prefer to keep your organization name anonymous but still give us feedback into your usage and scenarios for Contour, please post on this GitHub thread

Contour 1.0.0

01 Nov 01:46
Compare
Choose a tag to compare

We are delighted to present version 1.0.0 of Contour, our layer 7 HTTP reverse proxy for Kubernetes clusters.

Contour 1.0.0 is the latest stable release. All Contour users should upgrade to 1.0.0.

New and improved

Contour 1.0.0 contains many bug fixes and improvements over 0.15.3, the previous stable release.

HTTPProxy CRD

Over a year ago Contour 0.6 introduced the IngressRoute. IngressRoute was our attempt to address the issues preventing Kubernetes developers from utilizing modern web development patterns in multi-tenant Kubernetes clusters.

As part of preparations for bringing Contour to 1.0 IngressRoute has been renamed to HTTPProxy. This name reflects both the procedural changes necessitated by the Heptio acquisition and the desire to clarify Contour's role in the crowded Kubernetes networking space.

HTTPProxy brings with it two new concepts--inclusion and conditions--both of which, like the transition from IngressRoute to HTTPProxy, represent evolutions of the delegation model and our limited support for prefix based matching.

HTTPProxy is considered stable and our sincere desire is that future changes will be made in a backward-compatible manner. For more information, please consult the HTTPProxy documentation.

None of this work would have been possible without the dedication of @stevesloka. Thank you does not sufficiently capture the amount of effort Steve has dedicated to this feature.

IngressRoute deprecation

With the introduction of HTTPProxy, IngressRoute CRD is now marked as deprecated.

While deprecated, IngressRoute CRD will continue to be supported in its current state in Contour 1.0. The plan of record is IngressRoute will be removed in early 2020.

For more information please read the IngressRoute to HTTPProxy upgrade guide

IngressRoute and HTTPProxy status update improvements

IngressRoute and HTTPProxy status updates are now performed by the lead Contour in the deployment. The lead Contour is determined via Kubernetes' standard leader election mechanisms.

If leader election is disabled, all Contours will write status back to the Kubernetes API.

Fixes #1425, #1385, and many other issues with status loops over the years.

HTTPProxy and IngressRoute OpenAPIv3 schema validation

Contour 1.0.0 includes updated OpenAPIv3 schema validations. These schemas are automatically generated from the CRD documents themselves and should be more complete and consistent than the previous hand-rolled versions.

Fixes #513, #1414. Thanks @youngnick

Website improvements

As part of the continued preparations for the 1.0 release Contour's documentation has been relocated to the https://projectcontour.io website. Specifically;

Huge thanks to @jpeach for his work re-organizing and copy editing the website content.

Envoy keepalive tuning

Contour 1.0.0 addresses an issue where connections between Contour and Envoy could become stuck half-open (one side thinks the connection is open, the other side doesn't) or half-closed (one side closes the connection, the other side never gets the message).

The common theme was the cluster was using an overlay network which suggested the overlay was timing out long-running TCP connections. Contour 1.0.0 configures various keep alive mechanisms to detect networking issues between Envoy and Contour.

Fixes #1744. Thanks, @youngnick, @bgagnon, and @ravilr.

Contour now waits for a full cache

Contour now delays serving traffic to Envoy until each of the API informers caught up to the API server. This change reduces the likelihood that Envoy can connect to a Contour instance in the process of startup and thus observe an incomplete view of the cluster.

Updates #1280. Thanks, @jpeach and @stevesloka.

networking.k8s.io/v1beta1 Ingress support

Support for the networking.k8s.io/v1beta1.Ingress object has been added.

Fixes #1685

contour.heptio.com annotations deprecated

As part of the move to the projectcontour.io namespace, the Heptio branded contour.heptio.com annotations have been migrated to their respective projectcontour.io versions. The previous contour.heptio.com annotations should be considered deprecated. Contour will continue to be supported by these deprecated forms for the moment. They will be removed at some point after Contour 1.0.

Client request timeout

The ability to specify a Contour wide request timeout has been added to the configuration file.

See the configuration file example for more information.

Fixes #1073. Thanks, @youngnick.

TLS certificate validation

Contour now attempts to validate the contents of a TLS certificate before presenting it to Envoy. This validation only extends to asserting the certificate is well-formed. Expired, incorrect hostname details, or otherwise well-formed but invalid certificates are not rejected. IngressRoutes and HTTPProxys that reference invalid secrets will have their Status: fields set accordingly.

Fixes #1065

Envoy 1.11.2

Contour 1.0.0 requires Envoy 1.11.2.

See the Envoy 1.11.2 announcement for details.

Structured JSON htaccess logs

By default, Envoy emits request logs in its own format. See the Envoy docs for details.

Contour 1.0.0 adds support for JSON formatted logs. To enable JSON formatted logs, either add --accesslog-format=json to your contour serve line, or add accesslog-format: json to your config file.

Please see the documention and design document for more information.

Fixes #624. Thanks, @youngnick.

Leadership improvements

Leader election now uses a ConfigMap named leader-elect in the projectcontour namespace by default.
This can be changed using the config file.

Contour image registry changes

Contour's image registry has moved from gcr.io/hepto-images/contour to docker.io/projectcontour/contour.
Please update your image locations to docker.io/projectcontour/contour:v1.0.0.

GitHub organization changes

Contour's source code has moved from github.com/heptio/contour to github.com/projectcontour/contour.

GitHub is pretty good about redirecting people for a time, but eventually, the github.com/heptio organization will go away and redirects will cease. Please update your bookmarks.

Contour namespace changes

Contour's default namespace has changed from heptio-contour to projectcontour.

TLS Passthrough and HTTP redirect

Under certain circumstances, it is now possible to combine TLS passthrough on port 443 with port 80 served from the same service. The use case for this feature is the application on port 80 can provide a helpful message when the service on port 443 does not speak HTTPS.

For more information see #910 and #1450.

Per route traffic mirroring

Per route, a service can be nominated as a mirror. The mirror service will receive a copy of the traffic sent to any non-mirror service. The mirrored traffic is considered read only, any response by the mirror will be discarded.

Fixes #459

Per route idle timeout

Per route, idle timeouts can be configured via the HTTPProxy CRD.

Fixes #944

Contour ignores unrelated Secrets

Contour now ignores Secrets which are not related to Ingress, IngressRoute, HTTPProxy, or TLSCertificateDelegation operations. This substantially reduces the number of updates processed by Contour.

Fixes #1372

Contour filters Endpoint updates

Contour now supports filtering update notifications. Specifically, Envoy's EDS watches will no longer fire unless the specific EDS entry requested is updated. This should significantly reduce the number of spurious EDS updates send to Envoy.

Updates #426, #499

Minor improvements

  • The contour binary now executes a graceful shutdown when sent SIGTERM. Thanks, @alexbrand. Fixes #1364.
  • Contour now preserves the X-Request-Id header if present. Fixes #1509.
  • Contour's quickstart documentation now references the current stable version of Contour. Fixes #952.
  • Contour will no longer present a secret via SDS if that secret is not referenced by a valid virtualhost. #1165
  • The envoyproxy/go-control-plane package has been upgraded to version 0.9.0. go-control-plane 0.9.0 switches to the google/protobuf library which results in a 4mb smaller binary. Neat.
  • Our CONTRIBUTING documentation has been updated to encourage contributors to squash their commits. Thanks @stevesloka.
  • The markup of several of our pages has been corrected to render properly on GitHub. Thanks @sudeeptoroy.
  • Envoy's /healthz endpoint has been replaced with /ready for Pod readiness. Fixes #1277. Thanks @rochacon.
  • IngressRoute objects now forbid * anywhere in the spec.virtualhost.fqdn field. Fixes #1234.
  • make help target added. Thanks @jpeach.
  • HTTPProxy prefix conditions must start with a slash. Fixes #1628. Thank...
Read more

Contour 1.0.0-rc.2

25 Oct 05:18
Compare
Choose a tag to compare
Contour 1.0.0-rc.2 Pre-release
Pre-release

VMware is enraptured to present version 1.0.0-rc.2 of Contour, our layer 7 HTTP reverse proxy for Kuberentes clusters. As always, without the help of the many community contributors this release would not have been possible. Thank you!

Contour 1.0.0-rc.2 is the second, and hopefully last, release candidate on the path to Contour 1.0.

The current stable release at this time remains Contour 0.15.3.

New and improved

Contour 1.0.0-rc.2 contains many bug fixes and improvements over rc.1.

Website improvements

As part of the continued preparations for the 1.0 release Contour's documentation has been relocated to the https://projectcontour.io website. Specifically;

Huge thanks to @jpeach for his work re-organising and copy editing the website content.

IngressRoute and HTTPProxy status update improvements

IngressRoute and HTTPProxy status updates are now performed by the lead Contour in the deployment. The lead Contour is determined via Kubernetes' standard leader election mechanisms.

If leader election is disabled, all Contours will write status back to the Kubernetes API.

Fixes #1425, #1385, and many other issues with status loops over the years.

HTTPProxy and IngressRoute OpenAPIv3 schema validation

Contour 1.0.0-rc.2 includes updated OpenAPIv3 schema validations. These schemas are automatically generated from the CRD documents themselves and should be more complete and consistent than the previous hand rolled versions.

Fixes #513, #1414. Thanks @youngnick

TCPProxy delegation

Contour 1.0.0-rc.2 now supports TCPProxy delegation. See the relevant section in the HTTPProxy documentation.

Fixes #1655.

Envoy keepalive tuning

Contour 1.0.0-rc.2 addresses an issue where connections between Contour and Envoy could become stuck half-open (one side thinks the connection is open, the other side doesn't) or half-closed (one side closes the connection, the other side never gets the message).

The common theme was the cluster was using an overlay network which suggested the overlay was timing out long running TCP connections. Contour 1.0.0-rc.2 configures various keep alive mechanisms to detect networking issues between Envoy and Contour.

This fix is also included in Contour 0.15.3 and later.

Fixes #1744. Thanks @youngnick, @bgagnon, and @ravilr.

Contour now waits for a full cache.

Contour now delays serving traffic to Envoy until each of the API informers caught up to the API server. This changes reduces the likelyhood that Envoy can connect to a Contour instance in the process of startup and thus observe an incomplete view of the cluster.

Updates #1280. Thanks @jpeach and @stevesloka.

Minor improvements

  • The ability to write the bootstrap configuration to standard out via contour bootstrap -- - has been added. Thanks @jpeach.
  • Contour now validates that TLS certificates either bare the type kubernetes.io/tls or, in the case of upstream validation certificates, contain a non empty ca.crt key. Fixes #1697. Thanks @jpeach.
  • x_trace_id has been added to the set of JSON loggable fields. Fixes #1734. Thanks @cw-sakamoto!
  • Obsolute Heptio branding has been removed from contour cli. Thanks @jpeach.
  • Contour is built with Go 1.13.3.

Bug fixes

TLS certificate validation improvements

Contour 1.0.0-rc.2 improves the TLS certificate validation added in rc.1. Contour is now less likely to reject valid certificates that contain unexpected elliptic curve parameters.

This fix is also included in Contour 0.15.2 and later.

Fixes #1702. With many thanks to @mattalberts for the report and the fix.

Minor bug fixes

  • Many documentation updates and improvements. Thanks @stevesloka, @youngnick, @jpeach.
  • Ingress, IngressRoute, and HTTPProxy route conditions are now properly ordered. Fixes #1579. Thanks @jpeach.
  • Incorrect, and as it turns out superflous, settings removed from .travis.yml. Thanks @SDBrett.
  • The First Route custom field has been removed from the HTTPProxy CRD. Updates #1567. Thanks @youngnick.

Upgrading

Please consult the Upgrading document for further information on upgrading from Contour 1.0.0-rc.1 to Contour 1.0.0-rc.2.

Contour 0.15.3

24 Oct 05:01
Compare
Choose a tag to compare

Contour 0.15.3 is minor patch release for the Contour 0.15 series.

All Contour users should upgrade to Contour 0.15.3.

Improvements

Envoy keepalive tuning

Contour 0.15.3 addresses an issue where connections between Contour and Envoy could become stuck half-open (one side thinks the connection is open, the other side doesn't) or half-closed (one side closes the connection but the other side never gets the message).

The common theme was the cluster was using an overlay network which suggested the overlay was timing out long running TCP connections. Contour 0.15.3 configures various keep alive mechanisms to detect networking issues between Envoy and Contour.

Fixes #1744. Thanks @youngnick, @bgagnon, and @ravilr.

Upgrading

If you are already running Contour 0.15.2 the upgrade instructions are as follows:

  • Change the Contour image version to v0.15.3.
  • Change the Envoy image version to v1.11.2.

If you are running Contour 0.15.0 or earlier, please see the upgrade documentation.