<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Contour</title><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/</link><description>Recent content on Contour</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/feed.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/architecture/</guid><description>&lt;h1 id="contour-architecture"&gt;Contour Architecture&lt;/h1&gt;
&lt;p&gt;The Contour Ingress controller is a collaboration between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Envoy, which provides the high performance reverse proxy.&lt;/li&gt;
&lt;li&gt;Contour, which acts as a management server for Envoy and provides it with configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These containers are deployed separately, Contour as a Deployment and Envoy as a Kubernetes Daemonset or Deployment, although other configurations are possible.&lt;/p&gt;
&lt;p&gt;In the Envoy Pods, Contour runs as an initcontainer in &lt;code&gt;bootstrap&lt;/code&gt; mode and writes an Envoy bootstrap configuration to a temporary volume.
This volume is passed to the Envoy container and directs Envoy to treat Contour as its 
&lt;a href="https://www.envoyproxy.io/docs/envoy/v1.13.0/api-docs/xds_protocol" target="_blank"&gt;management server&lt;/a&gt;.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/access-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/access-logging/</guid><description>&lt;h1 id="access-logging"&gt;Access Logging&lt;/h1&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Contour allows you to control Envoy&amp;rsquo;s access logging.
By default, HTTP and HTTPS access logs are written to &lt;code&gt;/dev/stdout&lt;/code&gt; by the Envoy containers and look like following:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[2021-04-14T16:36:00.361Z] &amp;#34;GET /foo HTTP/1.1&amp;#34; 200 - 0 463 6 3 &amp;#34;-&amp;#34; &amp;#34;HTTPie/1.0.3&amp;#34; &amp;#34;837aa8dc-344f-4faa-b7d5-c9cce1028519&amp;#34; &amp;#34;localhost:8080&amp;#34; &amp;#34;127.0.0.1:8081&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The detailed description of each field can be found in 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage" target="_blank"&gt;Envoy access logging documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="customizing-access-log-destination"&gt;Customizing Access Log Destination&lt;/h2&gt;
&lt;p&gt;You can change the destination file where the access log is written by using Contour 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/configuration/#serve-flags"&gt;command line parameters&lt;/a&gt; &lt;code&gt;--envoy-http-access-log&lt;/code&gt; and &lt;code&gt;--envoy-https-access-log&lt;/code&gt;.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/annotations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/annotations/</guid><description>&lt;h1 id="annotations-reference"&gt;Annotations Reference&lt;/h1&gt;
&lt;div id="toc" class="navigation"&gt;&lt;/div&gt;
&lt;p&gt;Annotations are used in Ingress Controllers to configure features that are not covered by the Kubernetes Ingress API.&lt;/p&gt;
&lt;p&gt;Some of the features that have been historically configured via annotations are supported as first-class features in Contour&amp;rsquo;s 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/fundamentals/"&gt;HTTPProxy API&lt;/a&gt;, which provides a more robust configuration interface over annotations.&lt;/p&gt;
&lt;p&gt;However, Contour still supports a number of annotations on the Ingress resources.&lt;/p&gt;
&lt;h2 id="standard-kubernetes-ingress-annotations"&gt;Standard Kubernetes Ingress annotations&lt;/h2&gt;
&lt;p&gt;The following Kubernetes annotations are supported on &lt;code&gt;Ingress&lt;/code&gt; objects:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/api-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/api-reference/</guid><description>&lt;p&gt;Packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#projectcontour.io%2fv1"&gt;projectcontour.io/v1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#projectcontour.io%2fv1alpha1"&gt;projectcontour.io/v1alpha1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="projectcontour.io/v1"&gt;projectcontour.io/v1&lt;/h2&gt;
&lt;p&gt;
&lt;p&gt;Package v1 holds the specification for the projectcontour.io Custom Resource Definitions (CRDs).&lt;/p&gt;
&lt;p&gt;In building this CRD, we&amp;rsquo;ve inadvertently overloaded the word &amp;ldquo;Condition&amp;rdquo;, so we&amp;rsquo;ve tried to make
this spec clear as to which types of condition are which.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MatchConditions&lt;/code&gt; are used by &lt;code&gt;Routes&lt;/code&gt; and &lt;code&gt;Includes&lt;/code&gt; to specify rules to match requests against for either
routing or inclusion.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DetailedConditions&lt;/code&gt; are used in the &lt;code&gt;Status&lt;/code&gt; of these objects to hold information about the relevant
state of the object and the world around it.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/api/</guid><description>&lt;h1 id="contour-api-reference"&gt;Contour API Reference&lt;/h1&gt;
&lt;p&gt;Packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#projectcontour.io%2fv1"&gt;projectcontour.io/v1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#projectcontour.io%2fv1alpha1"&gt;projectcontour.io/v1alpha1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="projectcontour.io/v1"&gt;projectcontour.io/v1&lt;/h2&gt;
&lt;p&gt;
&lt;p&gt;Package v1 holds the specification for the projectcontour.io Custom Resource Definitions (CRDs).&lt;/p&gt;
&lt;p&gt;In building this CRD, we&amp;rsquo;ve inadvertently overloaded the word &amp;ldquo;Condition&amp;rdquo;, so we&amp;rsquo;ve tried to make
this spec clear as to which types of condition are which.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MatchConditions&lt;/code&gt; are used by &lt;code&gt;Routes&lt;/code&gt; and &lt;code&gt;Includes&lt;/code&gt; to specify rules to match requests against for either
routing or inclusion.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DetailedConditions&lt;/code&gt; are used in the &lt;code&gt;Status&lt;/code&gt; of these objects to hold information about the relevant
state of the object and the world around it.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/client-authorization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/client-authorization/</guid><description>&lt;h1 id="client-authorization"&gt;Client Authorization&lt;/h1&gt;
&lt;p&gt;Contour supports integrating external servers to authorize client requests.&lt;/p&gt;
&lt;p&gt;Envoy implements external authorization in the 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/ext_authz_filter" target="_blank"&gt;ext_authz&lt;/a&gt; filter.
This filter intercepts client requests and holds them while it sends a check
request to an external server.
The filter uses the check result to either allow the request to proceed, or to
deny or redirect the request.&lt;/p&gt;
&lt;p&gt;The diagram below shows the sequence of requests involved in the successful
authorization of a HTTP request:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/cookie-rewriting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/cookie-rewriting/</guid><description>&lt;h1 id="cookie-rewriting"&gt;Cookie Rewriting&lt;/h1&gt;
&lt;p&gt;Contour now enables users to customize attributes on HTTP &lt;code&gt;Set-Cookie&lt;/code&gt; response headers.
Application specific cookies and cookies generated by Contour&amp;rsquo;s 
&lt;a href="https://projectcontour.io/docs/v1.19.0/config/request-routing/#session-affinity" target="_blank"&gt;&amp;ldquo;cookie&amp;rdquo; load balancing strategy&lt;/a&gt; can be rewritten either per HTTPProxy &lt;code&gt;Route&lt;/code&gt; or &lt;code&gt;Service&lt;/code&gt;.
Users can choose to rewrite the &lt;code&gt;Path&lt;/code&gt;, &lt;code&gt;Domain&lt;/code&gt;, &lt;code&gt;Secure&lt;/code&gt;, and &lt;code&gt;SameSite&lt;/code&gt; attributes of the &lt;code&gt;Set-Cookie&lt;/code&gt; header currently.
These attributes may be things an application may not be able to accurately set, without prior knowledge of how the application is deployed.
For example, if Contour is in use to rewrite the path or hostname of a request before it reaches an application backend, the application may not be able to accurately set the &lt;code&gt;Path&lt;/code&gt; and &lt;code&gt;Domain&lt;/code&gt; attributes in a &lt;code&gt;Set-Cookie&lt;/code&gt; response header.
This feature can be used to apply security settings to ensure browsers treat generated cookies appropriately.
The &lt;code&gt;SameSite&lt;/code&gt; and &lt;code&gt;Secure&lt;/code&gt; attributes are currently not set by Envoy when it generates the &lt;code&gt;X-Contour-Session-Affinity&lt;/code&gt;, but with this feature, users can customize this cookie further.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/cors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/cors/</guid><description>&lt;h1 id="cors"&gt;CORS&lt;/h1&gt;
&lt;p&gt;A CORS (Cross-origin resource sharing) policy can be set for a HTTPProxy in order to allow cross-domain requests for trusted sources.
If a policy is set, it will be applied to all the routes of the virtual host.&lt;/p&gt;
&lt;p&gt;Contour allows configuring the headers involved in responses to cross-domain requests.
These include the &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;, &lt;code&gt;Access-Control-Allow-Methods&lt;/code&gt;, &lt;code&gt;Access-Control-Allow-Headers&lt;/code&gt;, &lt;code&gt;Access-Control-Expose-Headers&lt;/code&gt;, &lt;code&gt;Access-Control-Max-Age&lt;/code&gt;, &lt;code&gt;Access-Control-Allow-Private-Network&lt;/code&gt; and &lt;code&gt;Access-Control-Allow-Credentials&lt;/code&gt; headers in responses.&lt;/p&gt;
&lt;p&gt;In this example, cross-domain requests will be allowed for any domain (note the &lt;code&gt;*&lt;/code&gt; value), with the methods &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, or &lt;code&gt;OPTIONS&lt;/code&gt;.
Headers &lt;code&gt;Authorization&lt;/code&gt; and &lt;code&gt;Cache-Control&lt;/code&gt; will be passed to the upstream server and headers &lt;code&gt;Content-Length&lt;/code&gt; and &lt;code&gt;Content-Range&lt;/code&gt; will be made available to the cross-origin request client.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/external-service-routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/external-service-routing/</guid><description>&lt;h1 id="external-service-routing"&gt;External Service Routing&lt;/h1&gt;
&lt;p&gt;HTTPProxy supports routing traffic to &lt;code&gt;ExternalName&lt;/code&gt; service types, but this is disabled by default, as it can lead
to inadvertent exposure of the Envoy Admin UI, allowing remote shutdown and restart of Envoy.
Please see 
&lt;a href="https://github.com/projectcontour/contour/security/advisories/GHSA-5ph6-qq5x-7jwc" target="_blank"&gt;this security advisory&lt;/a&gt; for all the details.
It can also be used to expose services in namespaces a user does not have access to, using an ExternalName of &lt;code&gt;service.namespace.svc.cluster.local&lt;/code&gt;.
Please see 
&lt;a href="https://github.com/kubernetes/kubernetes/issues/103675" target="_blank"&gt;this Kubernetes security advisory&lt;/a&gt; for more details.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/fundamentals/</guid><description>&lt;h1 id="httpproxy-fundamentals"&gt;HTTPProxy Fundamentals&lt;/h1&gt;
&lt;p&gt;The 
&lt;a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" target="_blank"&gt;Ingress&lt;/a&gt; object was added to Kubernetes in version 1.1 to describe properties of a cluster-wide reverse HTTP proxy.
Since that time, the Ingress API has remained relatively unchanged, and the need to express implementation-specific capabilities has inspired an 
&lt;a href="https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md" target="_blank"&gt;explosion of annotations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The goal of the HTTPProxy Custom Resource Definition (CRD) is to expand upon the functionality of the Ingress API to allow for a richer user experience as well addressing the limitations of the latter&amp;rsquo;s use in multi tenant environments.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/gateway-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/gateway-api/</guid><description>&lt;h1 id="gateway-api"&gt;Gateway API&lt;/h1&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;
&lt;a href="https://gateway-api.sigs.k8s.io/" target="_blank"&gt;Gateway API&lt;/a&gt; is an open source project managed by the SIG Network community.
It is a collection of resources that model service networking in Kubernetes.
These resources - GatewayClass, Gateway, HTTPRoute, TCPRoute, Service, etc - aim to evolve Kubernetes service networking through expressive, extensible, and role-oriented interfaces that are implemented by many vendors and have broad industry support.&lt;/p&gt;
&lt;p&gt;Contour implements Gateway API in addition to supporting HTTPProxy and Ingress.
In particular, Contour aims to support all 
&lt;a href="https://gateway-api.sigs.k8s.io/concepts/conformance/#2-support-levels" target="_blank"&gt;core and extended features&lt;/a&gt; in Gateway API.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/health-checks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/health-checks/</guid><description>&lt;h1 id="upstream-health-checks"&gt;Upstream Health Checks&lt;/h1&gt;
&lt;h2 id="http-proxy-health-checking"&gt;HTTP Proxy Health Checking&lt;/h2&gt;
&lt;p&gt;Active health checking can be configured on a per route basis.
Contour supports HTTP health checking and can be configured with various settings to tune the behavior.&lt;/p&gt;
&lt;p&gt;During HTTP health checking Envoy will send an HTTP request to the upstream Endpoints.
It expects a 200 response by default if the host is healthy (see &lt;code&gt;expectedStatuses&lt;/code&gt; below for configuring the &amp;ldquo;healthy&amp;rdquo; status codes).
The upstream host can return 503 if it wants to immediately notify Envoy to no longer forward traffic to it.
It is important to note that these are health checks which Envoy implements and are separate from any other system such as those that exist in Kubernetes.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/inclusion-delegation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/inclusion-delegation/</guid><description>&lt;h1 id="httpproxy-inclusion"&gt;HTTPProxy Inclusion&lt;/h1&gt;
&lt;p&gt;HTTPProxy permits the splitting of a system&amp;rsquo;s configuration into separate HTTPProxy instances using &lt;strong&gt;inclusion&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Inclusion, as the name implies, allows for one HTTPProxy object to be included in another, optionally with some conditions inherited from the parent.
Contour reads the inclusion tree and merges the included routes into one big object internally before rendering Envoy config.
Importantly, the included HTTPProxy objects do not have to be in the same namespace.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/ingress/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/ingress/</guid><description>&lt;h1 id="k8s-ingress-resource-support-in-contour"&gt;k8s Ingress Resource Support in Contour&lt;/h1&gt;
&lt;!-- TODO: uncomment once we finish enabling Ingress conformance in CI --&gt;
&lt;!-- As of Contour version 1.X, Contour is validated to be conformant to the Ingress spec using the upstream [Ingress controller conformance tests][0]. --&gt;
&lt;!-- However, outside of those tests, the Ingress spec can be interpreted differently by various Ingress controller implementations. --&gt;
&lt;p&gt;This document describes Contour&amp;rsquo;s implementation of specific Ingress resource fields and features.
As the Ingress specification has evolved between v1beta1 and v1, any differences between versions are highlighted to ensure clarity for Contour users.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/ip-filtering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/ip-filtering/</guid><description>&lt;h1 id="ip-filtering"&gt;IP Filtering&lt;/h1&gt;
&lt;p&gt;Contour supports filtering requests based on the incoming ip address using Envoy&amp;rsquo;s 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/rbac_filter.html" target="_blank"&gt;RBAC Filter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Requests can be either allowed or denied based on a CIDR range specified on the virtual host and/or individual routes.&lt;/p&gt;
&lt;p&gt;If the request&amp;rsquo;s IP address is allowed, the request will be proxied to the appropriate upstream.
If the request&amp;rsquo;s IP address is denied, an HTTP 403 (Forbidden) will be returned to the client.&lt;/p&gt;
&lt;h2 id="specifying-rules"&gt;Specifying Rules&lt;/h2&gt;
&lt;p&gt;Rules are specified with the &lt;code&gt;ipAllowPolicy&lt;/code&gt; and &lt;code&gt;ipDenyPolicy&lt;/code&gt; fields on &lt;code&gt;virtualhost&lt;/code&gt; and &lt;code&gt;route&lt;/code&gt;:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/jwt-verification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/jwt-verification/</guid><description>&lt;h1 id="jwt-verification"&gt;JWT Verification&lt;/h1&gt;
&lt;p&gt;Contour supports verifying JSON Web Tokens (JWTs) on incoming requests, using Envoy&amp;rsquo;s 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/jwt_authn_filter" target="_blank"&gt;jwt_authn HTTP filter&lt;/a&gt;.
Specifically, the following properties can be checked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;issuer field&lt;/li&gt;
&lt;li&gt;audiences field&lt;/li&gt;
&lt;li&gt;signature, using a configured JSON Web Key Store (JWKS)&lt;/li&gt;
&lt;li&gt;time restrictions (e.g. expiration, not before time)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If verification succeeds, the request will be proxied to the appropriate upstream.
If verification fails, an HTTP 401 (Unauthorized) will be returned to the client.&lt;/p&gt;
&lt;p&gt;JWT verification is only supported on TLS-terminating virtual hosts.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/overload-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/overload-manager/</guid><description>&lt;h1 id="overload-manager"&gt;Overload Manager&lt;/h1&gt;
&lt;p&gt;Envoy uses heap memory when processing requests.
When the system runs out of memory or memory resource limit for the container is reached, Envoy process is terminated abruptly.
To avoid this, Envoy 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/operations/overload_manager/overload_manager" target="_blank"&gt;overload manager&lt;/a&gt; can be enabled.
Overload manager controls how much memory Envoy will allocate at maximum and what actions it takes when the limit is reached.&lt;/p&gt;
&lt;p&gt;Overload manager is disabled by default.
It can be enabled at deployment time by using &lt;code&gt;--overload-max-heap=[MAX_BYTES]&lt;/code&gt; command line flag in 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/configuration/#bootstrap-flags"&gt;&lt;code&gt;contour bootstrap&lt;/code&gt;&lt;/a&gt; command.
The bootstrap command is executed in 
&lt;a href="https://github.com/projectcontour/contour/blob/cbec8eca9e8b639318588c5aa7ec0b5b751938c5/examples/render/contour.yaml#L5204-L5216" target="_blank"&gt;init container of Envoy pod&lt;/a&gt; to generate initial configuration for Envoy.
To enable overload manager, modify the deployment manifest and add for example &lt;code&gt;--overload-max-heap=2147483648&lt;/code&gt; to set maximum heap size to 2 GiB.
The appropriate number of bytes can be different from system to system.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/rate-limiting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/rate-limiting/</guid><description>&lt;h1 id="rate-limiting"&gt;Rate Limiting&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#local-rate-limiting"&gt;Local Rate Limiting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#global-rate-limiting"&gt;Global Rate Limiting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Rate limiting is a means of protecting backend services against unwanted traffic.
This can be useful for a variety of different scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Protecting against denial-of-service (DoS) attacks by malicious actors&lt;/li&gt;
&lt;li&gt;Protecting against DoS incidents due to bugs in client applications/services&lt;/li&gt;
&lt;li&gt;Enforcing usage quotas for different classes of clients, e.g. free vs. paid tiers&lt;/li&gt;
&lt;li&gt;Controlling resource consumption/cost&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Envoy supports two forms of HTTP rate limiting: &lt;strong&gt;local&lt;/strong&gt; and &lt;strong&gt;global&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/request-rewriting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/request-rewriting/</guid><description>&lt;h1 id="request-rewriting"&gt;Request Rewriting&lt;/h1&gt;
&lt;h2 id="path-rewriting"&gt;Path Rewriting&lt;/h2&gt;
&lt;p&gt;HTTPProxy supports rewriting the HTTP request URL path prior to delivering the request to the backend service.
Rewriting is performed after a routing decision has been made, and never changes the request destination.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;pathRewritePolicy&lt;/code&gt; field specifies how the path prefix should be rewritten.
The &lt;code&gt;replacePrefix&lt;/code&gt; rewrite policy specifies a replacement string for a HTTP request path prefix match.
When this field is present, the path prefix that the request matched is replaced by the text specified in the &lt;code&gt;replacement&lt;/code&gt; field.
If the HTTP request path is longer than the matched prefix, the remainder of the path is unchanged.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/request-routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/request-routing/</guid><description>&lt;h1 id="request-routing"&gt;Request Routing&lt;/h1&gt;
&lt;p&gt;A HTTPProxy object must have at least one route or include defined.
In this example, any requests to &lt;code&gt;multi-path.bar.com/blog&lt;/code&gt; or &lt;code&gt;multi-path.bar.com/blog/*&lt;/code&gt; will be routed to the Service &lt;code&gt;s2&lt;/code&gt; using the prefix conditions. Requests to &lt;code&gt;multi-path.bar.com/feed&lt;/code&gt; will be routed to Service &lt;code&gt;s2&lt;/code&gt; using exact match condition.
All other requests to the host &lt;code&gt;multi-path.bar.com&lt;/code&gt; will be routed to the Service &lt;code&gt;s1&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# httpproxy-multiple-paths.yaml&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;projectcontour.io/v1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;HTTPProxy&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;metadata&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;multiple-paths&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;namespace&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;default&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;spec&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;virtualhost&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;fqdn&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;multi-path.bar.com&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;routes&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;conditions&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;prefix&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;/&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#999;font-style:italic"&gt;# matches everything else&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;services&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;s1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;conditions&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;prefix&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;/blog&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#999;font-style:italic"&gt;# matches `multi-path.bar.com/blog` or `multi-path.bar.com/blog/*`&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;services&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;s2&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;conditions&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;exact&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;/feed&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#999;font-style:italic"&gt;# matches `multi-path.bar.com/feed` only&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;services&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;s2&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the following example, we match on headers and query parameters and send to different services, with a default route if those do not match.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/slow-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/slow-start/</guid><description>&lt;h1 id="slow-start-mode"&gt;Slow Start Mode&lt;/h1&gt;
&lt;p&gt;Slow start mode is a configuration setting that is used to gradually increase the amount of traffic targeted to a newly added upstream endpoint.
By default, the amount of traffic will increase linearly for the duration of time window set by &lt;code&gt;window&lt;/code&gt; field, starting from 10% of the target load balancing weight and increasing to 100% gradually.
The easing function for the traffic increase can be adjusted by setting optional field &lt;code&gt;aggression&lt;/code&gt;.
A value above 1.0 results in a more aggressive increase initially, slowing down when nearing the end of the time window.
Value below 1.0 results in slow initial increase, picking up speed when nearing the end of the time window.
Optional field &lt;code&gt;minWeightPercent&lt;/code&gt; can be set to change the minimum percent of target weight.
It is used to avoid too small new weight, which may cause endpoint to receive no traffic in beginning of the slow start window.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tls-delegation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tls-delegation/</guid><description>&lt;h1 id="tls-certificate-delegation"&gt;TLS Certificate Delegation&lt;/h1&gt;
&lt;p&gt;In order to support wildcard certificates, TLS certificates for a &lt;code&gt;*.somedomain.com&lt;/code&gt;, which are stored in a namespace controlled by the cluster administrator, Contour supports a facility known as TLS Certificate Delegation.
This facility allows the owner of a TLS certificate to delegate, for the purposes of referencing the TLS certificate, permission to Contour to read the Secret object from another namespace.
Delegation works for both HTTPProxy and Ingress resources, however it needs an annotation to work with Ingress v1.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tls-termination/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tls-termination/</guid><description>&lt;h1 id="tls-termination"&gt;TLS Termination&lt;/h1&gt;
&lt;p&gt;HTTPProxy follows a similar pattern to Ingress for configuring TLS credentials.&lt;/p&gt;
&lt;p&gt;You can secure a HTTPProxy by specifying a Secret that contains TLS private key and certificate information.
If multiple HTTPProxies utilize the same Secret, the certificate must include the necessary Subject Authority Name (SAN) for each fqdn.&lt;/p&gt;
&lt;p&gt;Contour (via Envoy) requires that clients send the Server Name Indication (SNI) TLS extension so that requests can be routed to the correct virtual host.
Virtual hosts are strongly bound to SNI names.
This means that the Host header in HTTP requests must match the SNI name that was sent at the start of the TLS session.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tracing/</guid><description>&lt;h1 id="tracing-support"&gt;Tracing Support&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#tracing-config"&gt;Tracing-config&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Envoy has rich support for 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/observability/tracing" target="_blank"&gt;distributed tracing&lt;/a&gt;，and supports exporting data to third-party providers (Zipkin, Jaeger, Datadog, etc.)&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://opentelemetry.io/" target="_blank"&gt;OpenTelemetry&lt;/a&gt; is a CNCF project which is working to become a standard in the space. It was formed as a merger of the OpenTracing and OpenCensus projects.&lt;/p&gt;
&lt;p&gt;Contour supports configuring envoy to export data to OpenTelemetry, and allows users to customize some configurations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom service name, the default is &lt;code&gt;contour&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Custom sampling rate, the default is &lt;code&gt;100&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Custom the maximum length of the request path, the default is &lt;code&gt;256&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Customize span tags from literal or request headers.&lt;/li&gt;
&lt;li&gt;Customize whether to include the pod&amp;rsquo;s hostname and namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tracing-config"&gt;Tracing-config&lt;/h2&gt;
&lt;p&gt;In order to use this feature, you must first select and deploy an opentelemetry-collector to receive the tracing data exported by envoy.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/upstream-tls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/upstream-tls/</guid><description>&lt;h1 id="upstream-tls"&gt;Upstream TLS&lt;/h1&gt;
&lt;p&gt;A HTTPProxy can proxy to an upstream TLS backend by annotating the upstream Kubernetes Service or by specifying the upstream protocol in the HTTPProxy 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/api/#projectcontour.io/v1.Service"&gt;services&lt;/a&gt; field.
Applying the &lt;code&gt;projectcontour.io/upstream-protocol.tls&lt;/code&gt; annotation to a Service object tells Contour that TLS should be enabled and which port should be used for the TLS connection.
The same configuration can be specified by setting the protocol name in the &lt;code&gt;spec.routes.services[].protocol&lt;/code&gt; field on the HTTPProxy object.
If both the annotation and the protocol field are specified, the protocol field takes precedence.
By default, the upstream TLS server certificate will not be validated, but validation can be requested by setting the &lt;code&gt;spec.routes.services[].validation&lt;/code&gt; field.
This field has mandatory &lt;code&gt;caSecret&lt;/code&gt; and &lt;code&gt;subjectName&lt;/code&gt; fields, which specify the trusted root certificates with which to validate the server certificate and the expected server name.
The &lt;code&gt;caSecret&lt;/code&gt; can be a namespaced name of the form &lt;code&gt;&amp;lt;namespace&amp;gt;/&amp;lt;secret-name&amp;gt;&lt;/code&gt;. If the CA secret&amp;rsquo;s namespace is not the same namespace as the &lt;code&gt;HTTPProxy&lt;/code&gt; resource, 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/tls-delegation/"&gt;TLS Certificate Delegation&lt;/a&gt; must be used to allow the owner of the CA certificate secret to delegate, for the purposes of referencing the CA certificate in a different namespace, permission to Contour to read the Secret object from another namespace.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/virtual-hosts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/virtual-hosts/</guid><description>&lt;h1 id="virtual-hosts"&gt;Virtual Hosts&lt;/h1&gt;
&lt;p&gt;Similar to Ingress, HTTPProxy support name-based virtual hosting.
Name-based virtual hosts use multiple host names with the same IP address.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;foo.bar.com --| |-&amp;gt; foo.bar.com s1:80
 | 178.91.123.132 |
bar.foo.com --| |-&amp;gt; bar.foo.com s2:80
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unlike Ingress however, HTTPProxy only support a single root domain per HTTPProxy object.
As an example, this Ingress object:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# ingress-name.yaml&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;Ingress&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;metadata&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;name-example&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;spec&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;rules&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;host&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;foo1.bar.com&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;http&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;paths&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;backend&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;service&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;s1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;number&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;pathType&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;Prefix &lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;host&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;bar1.bar.com&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;http&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;paths&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;backend&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;service&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;s2&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;number&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;pathType&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;Prefix&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;must be represented by two different HTTPProxy objects:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/websockets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/config/websockets/</guid><description>&lt;h1 id="websockets"&gt;Websockets&lt;/h1&gt;
&lt;p&gt;WebSocket support can be enabled on specific routes using the &lt;code&gt;enableWebsockets&lt;/code&gt; field:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# httpproxy-websockets.yaml&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;projectcontour.io/v1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;HTTPProxy&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;metadata&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;chat&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;namespace&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;default&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;spec&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;virtualhost&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;fqdn&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;chat.example.com&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;routes&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;services&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;chat-app&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;conditions&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;prefix&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;/websocket&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;enableWebsockets&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Setting this to true enables websocket for all paths that match /websocket&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;services&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;chat-app&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;port&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#3677a9"&gt;80&lt;/span&gt;&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you are using Gateway API, websockets are enabled by default at the Listener level.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/configuration/</guid><description>&lt;h1 id="contour-configuration-reference"&gt;Contour Configuration Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#serve-flags"&gt;Serve Flags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#configuration-file"&gt;Configuration File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#environment-variables"&gt;Environment Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#bootstrap-config-file"&gt;Bootstrap Config File&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;There are various ways to configure Contour, flags, the configuration file, as well as environment variables.
Contour has a precedence of configuration for contour serve, meaning anything configured in the config file is overridden by environment vars which are overridden by cli flags.&lt;/p&gt;
&lt;h2 id="serve-flags"&gt;Serve Flags&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;contour serve&lt;/code&gt; command is the main command which is used to watch for Kubernetes resource and process them into Envoy configuration which is then streamed to any Envoy via its xDS gRPC connection.
There are a number of flags that can be passed to this command which further configures how Contour operates.
Many of these flags are mirrored in the 
&lt;a href="#configuration-file"&gt;Contour Configuration File&lt;/a&gt;.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/deploy-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/deploy-options/</guid><description>&lt;h1 id="deployment-options"&gt;Deployment Options&lt;/h1&gt;
&lt;p&gt;The 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/getting-started/"&gt;Getting Started&lt;/a&gt; guide shows you a simple way to get started with Contour on your cluster.
This topic explains the details and shows you additional options.
Most of this covers running Contour using a Kubernetes Service of &lt;code&gt;Type: LoadBalancer&lt;/code&gt;.
If you don&amp;rsquo;t have a cluster with that capability see the 
&lt;a href="#running-without-a-kubernetes-loadbalancer"&gt;Running without a Kubernetes LoadBalancer&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Contour requires a secret containing TLS certificates that are used to secure the gRPC communication between Contour&amp;lt;&amp;gt;Envoy.
This secret can be auto-generated by the Contour &lt;code&gt;certgen&lt;/code&gt; job or provided by an administrator.
Traffic must be forwarded to Envoy, typically via a Service of &lt;code&gt;type: LoadBalancer&lt;/code&gt;.
All other requirements such as RBAC permissions, configuration details, are provided or have good defaults for most installations.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/github/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/github/</guid><description>&lt;p&gt;This document outlines how we use GitHub.&lt;/p&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;p&gt;Contour attempts to ship on a quarterly basis.
These releases are tracked with a milestone.
The &lt;em&gt;current&lt;/em&gt; release is the milestone with the closest delivery date.&lt;/p&gt;
&lt;p&gt;Issues which are not assigned to the current milestone &lt;em&gt;should not be worked on&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="priorities"&gt;Priorities&lt;/h2&gt;
&lt;p&gt;This project has three levels of priority:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;p0 - Must fix immediately.
This is reserved for bugs and security issues. A milestone cannot ship with open p0 issues.&lt;/li&gt;
&lt;li&gt;p1 - Should be done.
p1 issues assigned to a milestone &lt;em&gt;should&lt;/em&gt; be completed during that milestone.&lt;/li&gt;
&lt;li&gt;p2 - May be done.
p2 issues assigned to a milestone &lt;em&gt;may&lt;/em&gt; be completed during that milestone if time permits.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Issues without a priority are &lt;em&gt;unprioritised&lt;/em&gt;. Priority will be assigned by a PM or release manager during issue triage.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/grpc-tls-howto/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/grpc-tls-howto/</guid><description>&lt;h1 id="enabling-tls-between-envoy-and-contour"&gt;Enabling TLS between Envoy and Contour&lt;/h1&gt;
&lt;p&gt;This document describes the steps required to secure communication between Envoy and Contour.
The outcome of this is that we will have two Secrets available in the &lt;code&gt;projectcontour&lt;/code&gt; namespace:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;contourcert:&lt;/strong&gt; contains Contour&amp;rsquo;s keypair which is used for serving TLS secured gRPC, and the CA&amp;rsquo;s public certificate bundle which is used for validating Envoy&amp;rsquo;s client certificate.
Contour&amp;rsquo;s certificate must be a valid certificate for the name &lt;code&gt;contour&lt;/code&gt; in order for this to work.
This is currently hardcoded by Contour.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;envoycert:&lt;/strong&gt; contains Envoy&amp;rsquo;s keypair which used as a client for connecting to Contour, and the CA&amp;rsquo;s public certificate bundle which is used for validating Contour&amp;rsquo;s server certificate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that both Secrets contain a copy of the CA certificate bundle under the &lt;code&gt;ca.crt&lt;/code&gt; data key.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/redeploy-envoy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/redeploy-envoy/</guid><description>&lt;h1 id="redeploying-envoy"&gt;Redeploying Envoy&lt;/h1&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;When implementing this roll out, the following steps should be taken:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stop Envoy from accepting new connections&lt;/li&gt;
&lt;li&gt;Start draining existing connections in Envoy by sending a &lt;code&gt;POST&lt;/code&gt; request to &lt;code&gt;/healthcheck/fail&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;Wait for connections to drain before allowing Kubernetes to &lt;code&gt;SIGTERM&lt;/code&gt; the pod&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Contour implements an &lt;code&gt;envoy&lt;/code&gt; sub-command named &lt;code&gt;shutdown-manager&lt;/code&gt; whose job is to manage a single Envoy instances lifecycle for Kubernetes.
The &lt;code&gt;shutdown-manager&lt;/code&gt; runs as a new container alongside the Envoy container in the same pod.
It uses a Kubernetes &lt;code&gt;preStop&lt;/code&gt; event hook to keep the Envoy container running while waiting for connections to drain. The &lt;code&gt;/shutdown&lt;/code&gt; endpoint blocks until the connections are drained.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/start-contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/start-contributing/</guid><description>&lt;h1 id="getting-started-with-contributing"&gt;Getting Started with Contributing&lt;/h1&gt;
&lt;p&gt;Thanks for your interest in contributing to Contour. Community contributions are always needed, welcome, and appreciated. This guide shows how you can contribute to Contour in the following areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;li&gt;Website&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please familiarize yourself with the 
&lt;a href="https://github.com/projectcontour/contour/blob/main/CODE_OF_CONDUCT.md"&gt;Code of Conduct&lt;/a&gt; and project 
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/resources/philosophy/"&gt;Philosophy&lt;/a&gt; before contributing.&lt;/p&gt;
&lt;h1 id="getting-started-with-code"&gt;Getting Started with Code&lt;/h1&gt;
&lt;p&gt;Everything is managed on the 
&lt;a href="https://github.com/projectcontour" target="_blank"&gt;Project Contour GitHub&lt;/a&gt; organization. Create an issue for a new idea or look for issues labeled &lt;strong&gt;good first issue&lt;/strong&gt; to get started.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/</guid><description>&lt;h2 id="troubleshooting"&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;If you encounter issues, follow the guides below for help. For topics not covered here, you can 
&lt;a href="https://github.com/projectcontour/contour/issues"&gt;file an issue&lt;/a&gt;, or talk to us on the 
&lt;a href="https://kubernetes.slack.com/messages/contour"&gt;#contour channel&lt;/a&gt; on Kubernetes Slack.&lt;/p&gt;
&lt;h3 id="envoy-administration-access"&gt;
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.33/troubleshooting/envoy-admin-interface/"&gt;Envoy Administration Access&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Review the linked steps to learn how to access the administration interface for your Envoy instance.&lt;/p&gt;
&lt;h3 id="contour-debug-logging"&gt;
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.33/troubleshooting/contour-debug-log/"&gt;Contour Debug Logging&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Learn how to enable debug logging to diagnose issues between Contour and the Kubernetes API.&lt;/p&gt;
&lt;h3 id="envoy-debug-logging"&gt;
&lt;a href="https://deploy-preview-7418--projectcontour.netlify.app/docs/1.33/troubleshooting/envoy-debug-log/"&gt;Envoy Debug Logging&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Learn how to enable debug logging to diagnose TLS connection issues.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-debug-log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-debug-log/</guid><description>&lt;h1 id="enabling-contour-debug-logging"&gt;Enabling Contour Debug Logging&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;contour serve&lt;/code&gt; subcommand has two command-line flags that can be helpful for debugging.
The &lt;code&gt;--debug&lt;/code&gt; flag enables general Contour debug logging, which logs more information about how Contour is processing API resources.
The &lt;code&gt;--kubernetes-debug&lt;/code&gt; flag enables verbose logging in the Kubernetes client API, which can help debug interactions between Contour and the Kubernetes API server.
This flag requires an integer log level argument, where higher number indicates more detailed logging.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-graph/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-graph/</guid><description>&lt;h1 id="visualizing-contours-internal-object-graph"&gt;Visualizing Contour&amp;rsquo;s Internal Object Graph&lt;/h1&gt;
&lt;p&gt;Contour models its configuration using a directed acyclic graph (DAG) of internal objects.
This can be visualized through a debug endpoint that outputs the DAG in 
&lt;a href="https://en.wikipedia.org/wiki/DOT" target="_blank"&gt;DOT&lt;/a&gt; format.
To visualize the graph, you must have 
&lt;a href="https://graphviz.gitlab.io/" target="_blank"&gt;&lt;code&gt;graphviz&lt;/code&gt;&lt;/a&gt; installed on your system.&lt;/p&gt;
&lt;p&gt;To download the graph and save it as a PNG:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Port forward into the contour pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ &lt;span style="color:#40ffff"&gt;CONTOUR_POD&lt;/span&gt;=&lt;span style="color:#6ab825;font-weight:bold"&gt;$(&lt;/span&gt;kubectl -n projectcontour get pod -l &lt;span style="color:#40ffff"&gt;app&lt;/span&gt;=contour -o name | head -1&lt;span style="color:#6ab825;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Do the port forward to that pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl -n projectcontour port-forward &lt;span style="color:#40ffff"&gt;$CONTOUR_POD&lt;/span&gt; &lt;span style="color:#3677a9"&gt;6060&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Download and store the DAG in png format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ curl localhost:6060/debug/dag | dot -T png &amp;gt; contour-dag.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following is an example of a DAG that maps &lt;code&gt;http://kuard.local:80/&lt;/code&gt; to the
&lt;code&gt;kuard&lt;/code&gt; service in the &lt;code&gt;default&lt;/code&gt; namespace:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-xds-resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/contour-xds-resources/</guid><description>&lt;h1 id="interrogate-contours-xds-resources"&gt;Interrogate Contour&amp;rsquo;s xDS Resources&lt;/h1&gt;
&lt;p&gt;Sometimes it&amp;rsquo;s helpful to be able to interrogate Contour to find out exactly what 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol" target="_blank"&gt;xDS&lt;/a&gt; resource data it is sending to Envoy.
Contour ships with a &lt;code&gt;contour cli&lt;/code&gt; subcommand which can be used for this purpose.&lt;/p&gt;
&lt;p&gt;Because Contour secures its communications with Envoy using Secrets in the cluster, the easiest way is to run &lt;code&gt;contour cli&lt;/code&gt; commands &lt;em&gt;inside&lt;/em&gt; the pod.
Do this is via &lt;code&gt;kubectl exec&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Get one of the pods that matches the examples/daemonset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ &lt;span style="color:#40ffff"&gt;CONTOUR_POD&lt;/span&gt;=&lt;span style="color:#6ab825;font-weight:bold"&gt;$(&lt;/span&gt;kubectl -n projectcontour get pod -l &lt;span style="color:#40ffff"&gt;app&lt;/span&gt;=contour -o &lt;span style="color:#40ffff"&gt;jsonpath&lt;/span&gt;=&lt;span style="color:#ed9d13"&gt;&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Do the port forward to that pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl -n projectcontour &lt;span style="color:#24909d"&gt;exec&lt;/span&gt; &lt;span style="color:#40ffff"&gt;$CONTOUR_POD&lt;/span&gt; -c contour -- contour cli lds --cafile=/certs/ca.crt --cert-file=/certs/tls.crt --key-file=/certs/tls.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which will stream changes to the LDS api endpoint to your terminal.
Replace &lt;code&gt;contour cli lds&lt;/code&gt; with &lt;code&gt;contour cli rds&lt;/code&gt; for route resources, &lt;code&gt;contour cli cds&lt;/code&gt; for cluster resources, and &lt;code&gt;contour cli eds&lt;/code&gt; for endpoints.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-admin-interface/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-admin-interface/</guid><description>&lt;h1 id="accessing-the-envoy-administration-interface"&gt;Accessing the Envoy Administration Interface&lt;/h1&gt;
&lt;p&gt;Getting access to the Envoy 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/operations/admin" target="_blank"&gt;administration interface&lt;/a&gt; can be useful for diagnosing issues with routing or cluster health.
However, Contour doesn&amp;rsquo;t expose the entire Envoy Administration interface since that interface contains many options, such as shutting down Envoy or draining traffic.
To prohibit this behavior, Contour only exposes the read-only options from the admin interface which still allows for debugging Envoy, but without the options mentioned previously.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-container-draining/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-container-draining/</guid><description>&lt;h1 id="envoy-container-stuck-in-unreadydraining-state"&gt;Envoy container stuck in unready/draining state&lt;/h1&gt;
&lt;p&gt;It&amp;rsquo;s possible for the Envoy containers to become stuck in an unready/draining state.
This is an unintended side effect of the shutdown-manager sidecar container being restarted by the kubelet.
For more details on exactly how this happens, see 
&lt;a href="https://github.com/projectcontour/contour/issues/4851" target="_blank"&gt;this issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you observe Envoy containers in this state, you should &lt;code&gt;kubectl delete&lt;/code&gt; them to allow new Pods to be created to replace them.&lt;/p&gt;
&lt;p&gt;To make this issue less likely to occur, you should:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-debug-log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/envoy-debug-log/</guid><description>&lt;h1 id="enabling-envoy-debug-logging"&gt;Enabling Envoy Debug Logging&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;envoy&lt;/code&gt; command has a &lt;code&gt;--log-level&lt;/code&gt; 
&lt;a href="https://www.envoyproxy.io/docs/envoy/latest/operations/cli" target="_blank"&gt;flag&lt;/a&gt; that can be useful for debugging.
By default, it&amp;rsquo;s set to &lt;code&gt;info&lt;/code&gt;.
To change it to &lt;code&gt;debug&lt;/code&gt;, edit the &lt;code&gt;envoy&lt;/code&gt; DaemonSet in the &lt;code&gt;projectcontour&lt;/code&gt; namespace and replace the &lt;code&gt;--log-level info&lt;/code&gt; flag with &lt;code&gt;--log-level debug&lt;/code&gt;.
Setting the Envoy log level to &lt;code&gt;debug&lt;/code&gt; can be particilarly useful for debugging TLS connection failures.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/profiling-contour/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-7418--projectcontour.netlify.app/docs/1.27/troubleshooting/profiling-contour/</guid><description>&lt;h1 id="accessing-contours-debugpprof-service"&gt;Accessing Contour&amp;rsquo;s /debug/pprof Service&lt;/h1&gt;
&lt;p&gt;Contour exposes the 
&lt;a href="https://golang.org/pkg/net/http/pprof" target="_blank"&gt;net/http/pprof&lt;/a&gt; handlers for &lt;code&gt;go tool pprof&lt;/code&gt; and &lt;code&gt;go tool trace&lt;/code&gt; by default on &lt;code&gt;127.0.0.1:6060&lt;/code&gt;.
This service is useful for profiling Contour.
To access it from your workstation use &lt;code&gt;kubectl port-forward&lt;/code&gt; like so,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Get one of the pods that matches the Contour deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ &lt;span style="color:#40ffff"&gt;CONTOUR_POD&lt;/span&gt;=&lt;span style="color:#6ab825;font-weight:bold"&gt;$(&lt;/span&gt;kubectl -n projectcontour get pod -l &lt;span style="color:#40ffff"&gt;app&lt;/span&gt;=contour -o name | head -1&lt;span style="color:#6ab825;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#999;font-style:italic"&gt;# Do the port forward to that pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl -n projectcontour port-forward &lt;span style="color:#40ffff"&gt;$CONTOUR_POD&lt;/span&gt; &lt;span style="color:#3677a9"&gt;6060&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>