<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>HAProxy Ingress – Configuration</title>
    <link>/v0.13/docs/configuration/</link>
    <description>Recent content in Configuration on HAProxy Ingress</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="/v0.13/docs/configuration/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Gateway API</title>
      <link>/v0.13/docs/configuration/gateway-api/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v0.13/docs/configuration/gateway-api/</guid>
      <description>
        
        
        

&lt;p&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/&#34;&gt;Gateway API&lt;/a&gt; is a collection of Kubernetes resources that can be installed as &lt;a href=&#34;https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/&#34;&gt;Custom Resource Definitions&lt;/a&gt;. Just like Ingress resources, Gateway API resources are used to configure incoming HTTP/s and TCP requests to the in cluster applications. HAProxy Ingress v0.13 partially supports the Gateway API spec.&lt;/p&gt;

&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;

&lt;p&gt;The following steps configure the Kubernetes cluster and HAProxy Ingress to read and parse Gateway API resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually install the Gateway API CRDs, see the Gateway API &lt;a href=&#34;https://gateway-api.sigs.k8s.io/v1alpha1/guides/getting-started/#installing-gateway-api-crds-manually&#34;&gt;documentation&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&amp;hellip; or simply &lt;code&gt;kubectl kustomize &amp;quot;github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.3.0&amp;quot; | kubectl apply -f -&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Add the controller&amp;rsquo;s &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#watch-gateway&#34;&gt;&lt;code&gt;--watch-gateway&lt;/code&gt;&lt;/a&gt; command-line option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See below the &lt;a href=&#34;#getting-started&#34;&gt;getting started steps&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;conformance&#34;&gt;Conformance&lt;/h2&gt;

&lt;p&gt;Gateway API v1alpha1 spec is partially implemented in the v0.13 release. The following list describes what is (or is not) supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target Services can be annotated with &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#scope&#34;&gt;Backend or Path scoped&lt;/a&gt; configuration keys, this will continue to be supported.&lt;/li&gt;
&lt;li&gt;Gateway API resources doesn&amp;rsquo;t support annotations, this will continue to be unsupported, extensions to the Gateway API spec will be added in the extension points of the API.&lt;/li&gt;
&lt;li&gt;Only the &lt;code&gt;GatewayClass&lt;/code&gt;, &lt;code&gt;Gateway&lt;/code&gt; and &lt;code&gt;HTTPRoute&lt;/code&gt; resource definitions were implemented.&lt;/li&gt;
&lt;li&gt;The controller doesn&amp;rsquo;t implement partial parsing yet for Gateway API resources, changes should be a bit slow on clusters with thousands of Ingress, Gateway API resources or Services.&lt;/li&gt;
&lt;li&gt;Gateway&amp;rsquo;s Listener Port and Protocol wasn&amp;rsquo;t implemented - Port uses the global &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#bind-port&#34;&gt;bind-port&lt;/a&gt; configuration and Protocol is based on the presence or absence of the TLS attribute.&lt;/li&gt;
&lt;li&gt;Gateway&amp;rsquo;s Route Namespace selector only supports &lt;code&gt;Same&lt;/code&gt; or &lt;code&gt;All&lt;/code&gt; namespaces.&lt;/li&gt;
&lt;li&gt;Gateway&amp;rsquo;s Hostname only supports empty/absence of Hostname or a single &lt;code&gt;*&lt;/code&gt;, any other string will override the HTTPRoute Hostnames configuration without any merging.&lt;/li&gt;
&lt;li&gt;HTTPRoute&amp;rsquo;s Matches doesn&amp;rsquo;t support Headers.&lt;/li&gt;
&lt;li&gt;HTTPRoute&amp;rsquo;s Rules and ForwardTo doesn&amp;rsquo;t support Filters.&lt;/li&gt;
&lt;li&gt;Resources status aren&amp;rsquo;t updated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Version v1alpha2 should be partially implemented in v0.14 (beta version starting jan/22) and fully implemented in v0.15 (Q2&amp;rsquo;22).&lt;/p&gt;

&lt;h2 id=&#34;ingress&#34;&gt;Ingress&lt;/h2&gt;

&lt;p&gt;A single HAProxy Ingress deployment can manage Ingress and Gateway API resources in the same Kubernetes cluster. If the same hostname and path is declared in the Gateway API and Ingress, the Gateway API wins and a warning is logged. Ingress resources will continue to be supported in future controller versions, without side effects, and without the need to install the Gateway API CRDs.&lt;/p&gt;

&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;

&lt;p&gt;Add the following steps to the &lt;a href=&#34;/v0.13/v0.13/docs/getting-started/&#34;&gt;Getting Started guide&lt;/a&gt; in order to expose the echoserver service along with the Gateway API:&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/v1alpha1/guides/getting-started/#installing-gateway-api-crds-manually&#34;&gt;Manually install&lt;/a&gt; the Gateway API CRDs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kubectl kustomize\
 &amp;quot;github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.3.0&amp;quot; |\
 kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Add the following deployment and service if echoserver isn&amp;rsquo;t running yet:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kubectl --namespace default create deployment echoserver --image k8s.gcr.io/echoserver:1.3
kubectl --namespace default expose deployment echoserver --port=8080
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Add the &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#watch-gateway&#34;&gt;&lt;code&gt;--watch-gateway&lt;/code&gt;&lt;/a&gt; command-line option in the &lt;code&gt;haproxy-ingress-values.yaml&lt;/code&gt; file and &lt;a href=&#34;/v0.13/v0.13/docs/getting-started/#installation&#34;&gt;&lt;code&gt;helm upgrade ...&lt;/code&gt;&lt;/a&gt; the controller (or simply edit the deployment):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;controller&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;...&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;extraArgs&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;watch-gateway&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A GatewayClass enables Gateways to be read and parsed by HAProxy Ingress. Create a GatewayClass with the following content:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.x-k8s.io/v1alpha1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;GatewayClass&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;haproxy&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;controller&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;haproxy-ingress.github.io/controller&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Gateways create listeners and allow to configure hostnames. Create a Gateway with the following content:&lt;/p&gt;

&lt;p&gt;Note: port and protocol attributes &lt;a href=&#34;#conformance&#34;&gt;have some limitations&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.x-k8s.io/v1alpha1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Gateway&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echoserver&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;default&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;gatewayClassName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;haproxy&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;listeners&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;protocol&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;HTTP&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;port&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;routes&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;HTTPRoute&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;selector&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;matchLabels&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;gateway&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echo&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;HTTPRoutes configure the hostnames and target services. Create a HTTPRoute with the following content, changing &lt;code&gt;echoserver-from-gateway.local&lt;/code&gt; to a hostname that resolves to a HAProxy Ingress node:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.x-k8s.io/v1alpha1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;HTTPRoute&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;labels&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;gateway&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echo&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echoserver&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;default&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;hostnames&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echoserver-from-gateway.local&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;rules&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;forwardTo&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;serviceName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;echoserver&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;port&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8080&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Send a request to our just configured route:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl http://echoserver-from-gateway.local
wget -qO- http://echoserver-from-gateway.local
&lt;/code&gt;&lt;/pre&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Configuration keys</title>
      <link>/v0.13/docs/configuration/keys/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v0.13/docs/configuration/keys/</guid>
      <description>
        
        
        

&lt;p&gt;Configuration keys are entry point configurations that allow users and admins to
dynamically fine-tune HAProxy status. HAProxy Ingress reads configuration keys
from Kubernetes resources, and this can be done in a couple of ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Globally, from a ConfigMap&lt;/li&gt;
&lt;li&gt;Per IngressClass, from a ConfigMap linked in the IngressClass&amp;rsquo; &lt;code&gt;parameters&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;Per Ingress, configuring or annotating Ingress resources&lt;/li&gt;
&lt;li&gt;Per backend, annotating Service resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list above also describes the precedence if the same configuration key is used
in more than one resource: Global configurations can be overridden by IngressClass
configurations, that can be overriden by Ingress resource configurations and so on.
This hierarchy creates a flexible model, where commonly used configurations can be
made in a higher level and overriden by local changes.&lt;/p&gt;

&lt;p&gt;The following sections describe in a few more details how HAProxy Ingress classifies
an Ingress to be part of the final configuration, and how it reads the configuration
from Kubernetes resources.&lt;/p&gt;

&lt;h1 id=&#34;class-matter&#34;&gt;Class matter&lt;/h1&gt;

&lt;p&gt;HAProxy Ingress by default does not listen to Ingress resources, until one or more of
the following conditions are met:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingress resources have the annotation &lt;code&gt;kubernetes.io/ingress.class&lt;/code&gt; with the value &lt;code&gt;haproxy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ingress resources have its &lt;code&gt;ingressClassName&lt;/code&gt; field assigning an IngressClass resource whose &lt;code&gt;controller&lt;/code&gt; name is &lt;code&gt;haproxy-ingress.github.io/controller&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;HAProxy Ingress was started with &lt;code&gt;--watch-ingress-without-class&lt;/code&gt; command-line option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#ingress-class&#34;&gt;Ingress Class&lt;/a&gt; command-line doc for
customization options.&lt;/p&gt;

&lt;p&gt;The first two options give more control on which Ingress resources should be part of the
final configuration. Class annotation and the IngressClass name can be changed on a running
controller, the configuration will be adjusted on the fly to reflect the new status. If
both options are configured in an Ingress resource, and they conflict - i.e. one of them
says the controller belongs to HAProxy Ingress and the other says that it does not belong -
the annotation value wins and a warning is logged.&lt;/p&gt;

&lt;p&gt;Adding a class annotation or defining an IngressClass name means &amp;ldquo;classify&amp;rdquo; an Ingress
resource. The third and latest option asks HAProxy Ingress to also add &amp;ldquo;unclassified&amp;rdquo;
Ingress to the final configuration - i.e. add Ingress resources that does not have the
&lt;code&gt;kubernetes.io/ingress.class&lt;/code&gt; annotation and also does not have the &lt;code&gt;ingressClassName&lt;/code&gt;
field. Note that this is a new behavior since v0.12. Up to v0.11 HAProxy Ingress listen
to &amp;ldquo;unclassified&amp;rdquo; Ingress by default.&lt;/p&gt;

&lt;h1 id=&#34;strategies&#34;&gt;Strategies&lt;/h1&gt;

&lt;p&gt;HAProxy Ingress reads configuration on three distinct ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ConfigMap&lt;/code&gt; key/value data. ConfigMaps are assigned either via &lt;code&gt;--configmap&lt;/code&gt; command-line option (used by Global options), or via parameters field of an &lt;code&gt;IngressClass&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Annotations from classified &lt;code&gt;Ingress&lt;/code&gt; resources and also from &lt;code&gt;Services&lt;/code&gt; that these Ingress are linking to&lt;/li&gt;
&lt;li&gt;Spec configurations from classified &lt;code&gt;Ingress&lt;/code&gt; resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HAProxy Ingress follows &lt;a href=&#34;https://v1-18.docs.kubernetes.io/docs/concepts/services-networking/ingress/&#34;&gt;Ingress v1 spec&lt;/a&gt;,
so any Ingress spec configuration should work as stated by the Kubernetes documentation.&lt;/p&gt;

&lt;p&gt;Annotations and ConfigMap customizations extend the Ingress spec via the configuration
keys, and this is what the rest of this documentation page is all about.&lt;/p&gt;

&lt;p&gt;The following sections describe in a few more details about configuration strategies.&lt;/p&gt;

&lt;h2 id=&#34;configmap&#34;&gt;ConfigMap&lt;/h2&gt;

&lt;p&gt;ConfigMap key/value options are read in the following conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global config, using &lt;code&gt;--configmap&lt;/code&gt; command-line option. The installation process configures a Global config ConfigMap named &lt;code&gt;haproxy-ingress&lt;/code&gt; in the controller namespace. This is the only way to configure keys from the &lt;code&gt;Global&lt;/code&gt; scope. See about scopes &lt;a href=&#34;#scope&#34;&gt;later&lt;/a&gt; in this page. Note, &lt;code&gt;--configmap&lt;/code&gt; needs to be in the following format: &lt;code&gt;&amp;lt;namespace&amp;gt;/&amp;lt;configmap-name&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;IngressClass config, using its &lt;code&gt;parameters&lt;/code&gt; field linked to a ConfigMap declared in the same namespace of the controller. See about IngressClass &lt;a href=&#34;#ingressclass&#34;&gt;later&lt;/a&gt; in this same section.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A configuration key is used verbatim as the ConfigMap key name, without any prefix.
The ConfigMap spec expects a string as the key value, so declare numbers and booleans
as strings, HAProxy Ingress will convert them when needed.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;balance-algorithm&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;leastconn&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;max-connections&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;10000&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;ssl-redirect&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;haproxy-ingress&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ingress-controller&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;annotation&#34;&gt;Annotation&lt;/h2&gt;

&lt;p&gt;Annotations are read in the following conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From classified &lt;code&gt;Ingress&lt;/code&gt; resources, see about classification in the &lt;a href=&#34;#class-matter&#34;&gt;Class matter&lt;/a&gt; section. &lt;code&gt;Ingresses&lt;/code&gt; accept keys from the &lt;code&gt;Host&lt;/code&gt;, &lt;code&gt;Backend&lt;/code&gt;, &lt;code&gt;Path&lt;/code&gt; and &lt;code&gt;TCP&lt;/code&gt; scopes. See about scopes &lt;a href=&#34;#scope&#34;&gt;later&lt;/a&gt; in this page.&lt;/li&gt;
&lt;li&gt;From &lt;code&gt;Services&lt;/code&gt; that classified Ingress resources are linking to. &lt;code&gt;Services&lt;/code&gt; only accept keys from the &lt;code&gt;Backend&lt;/code&gt; scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A configuration key needs a prefix in front of its name to use as an annotation key.
The default prefix is &lt;code&gt;haproxy-ingress.github.io&lt;/code&gt;, and &lt;code&gt;ingress.kubernetes.io&lt;/code&gt; is also
supported for backward compatibility. Change the prefix with the
&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#annotations-prefix&#34;&gt;&lt;code&gt;--annotations-prefix&lt;/code&gt;&lt;/a&gt;
command-line option. The annotation value spec expects a string as the key value, so
declare numbers and booleans as strings, HAProxy Ingress will convert them when needed.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Ingress&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;annotations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;haproxy-ingress.github.io/balance-algorithm&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;roundrobin&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;haproxy-ingress.github.io/maxconn-server&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;500&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;haproxy-ingress.github.io/ssl-redirect&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;default&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;ingressclass&#34;&gt;IngressClass&lt;/h2&gt;

&lt;p&gt;IngressClass configurations are read when the &lt;code&gt;ingressClassName&lt;/code&gt; field of an Ingress
resource links to an IngressClass that configures its &lt;code&gt;parameters&lt;/code&gt; field.&lt;/p&gt;

&lt;p&gt;The IngressClass&amp;rsquo; &lt;code&gt;parameters&lt;/code&gt; field currently only accepts ConfigMap resources, and
the ConfigMap must be declared in the same namespace of the controller.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Even though a ConfigMap is used, configuration keys of the &lt;code&gt;Global&lt;/code&gt; scope cannot be
used and will be ignored.
&lt;/div&gt;


&lt;p&gt;The following resources create the same final configuration of the Annotation
section &lt;a href=&#34;#annotation&#34;&gt;above&lt;/a&gt;, with the benefit of allowing the reuse of the
IngressClass+ConfigMap configuration.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;IngressClass&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;my-class&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;controller&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;haproxy-ingress.github.io/controller&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;parameters&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;my-options&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;data&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;balance-algorithm&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;roundrobin&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;maxconn-server&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;500&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;ssl-redirect&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ConfigMap&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;my-options&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;ingress-controller&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Ingress&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;default&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;ingressClassName&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;my-class&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;updates&#34;&gt;Updates&lt;/h2&gt;

&lt;p&gt;Changes to any configuration in any classified &lt;code&gt;Ingress&lt;/code&gt; resources (annotations
or spec), &lt;code&gt;Service&lt;/code&gt; resources (annotations) or any referenced &lt;code&gt;ConfigMap&lt;/code&gt; will
reflect in the update of the final HAProxy configuration.&lt;/p&gt;

&lt;p&gt;If the new state cannot be dynamically applied and requires HAProxy to be reloaded,
this will happen preserving the in progress requests and the long running connections.&lt;/p&gt;

&lt;h2 id=&#34;fragmentation&#34;&gt;Fragmentation&lt;/h2&gt;

&lt;p&gt;Ingress resources can be fragmented in order to add distinct configurations
to distinct routes. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Ingress&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app-front&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;rules&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;host&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app.local&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;http&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;paths&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;path&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;pathType&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Prefix&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;backend&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;service&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;frontend&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;port&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;number&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8080&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;apiVersion&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;networking.k8s.io/v1&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;kind&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Ingress&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;metadata&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;annotations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;haproxy-ingress.github.io/rewrite-target&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app-back&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;rules&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;host&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;app.local&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;http&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;paths&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;-&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;path&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;/api&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;pathType&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;Prefix&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;backend&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;service&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;name&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;backend&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;port&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;number&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8080&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;HAProxy Ingress will merge all the resources, so there is no difference if the
configuration is in the same or in distinct Ingress. Distinct Ingress however
might lead to conflicting configuration, more about conflict in the
&lt;a href=&#34;#scope&#34;&gt;scope&lt;/a&gt; section below.&lt;/p&gt;

&lt;p&gt;There is no hard limit to the number of Ingresses or Services - clusters with
tens of thousands of Ingress and Service resources report to work smoothly and
fast with HAProxy Ingress.&lt;/p&gt;

&lt;h1 id=&#34;scope&#34;&gt;Scope&lt;/h1&gt;

&lt;p&gt;HAProxy Ingress configuration keys may be in one of five distinct scopes:
&lt;code&gt;Global&lt;/code&gt;, &lt;code&gt;Host&lt;/code&gt;, &lt;code&gt;Backend&lt;/code&gt;, &lt;code&gt;Path&lt;/code&gt;, &lt;code&gt;TCP&lt;/code&gt;. A scope defines where a configuration
key can be declared and how it interacts with Ingress and Service resources.&lt;/p&gt;

&lt;p&gt;Configuration keys declared in &lt;code&gt;Ingress&lt;/code&gt; resources might conflict. More about
the scenarios in the &lt;code&gt;Host&lt;/code&gt;, &lt;code&gt;Backend&lt;/code&gt; and &lt;code&gt;TCP&lt;/code&gt; scopes below. A warning will
be logged in the case of a conflict, and the used value will be of the Ingress
resource that was created first.&lt;/p&gt;

&lt;h2 id=&#34;global&#34;&gt;Global&lt;/h2&gt;

&lt;p&gt;Defines configuration keys that apply for all hostnames and backend
services, and should be declared only in the Global config ConfigMap
resource. Configuration keys of the Global scope declared as Ingress
or Service annotations, and also in the IngressClass ConfigMap are
ignored. Configuration keys of the Global scope never conflict.&lt;/p&gt;

&lt;h2 id=&#34;host&#34;&gt;Host&lt;/h2&gt;

&lt;p&gt;Defines configuration keys that bind to the hostname. Configuration
keys of the host scope can be declared in any ConfigMap, or in any Ingress
resource. A conflict happens when the same host configuration key with
distinct values are declared in distinct Ingress resources but to the same
hostname.&lt;/p&gt;

&lt;h2 id=&#34;backend&#34;&gt;Backend&lt;/h2&gt;

&lt;p&gt;Defines configuration keys that bind to the Service resource, which
is converted to a HAProxy backend after the configuration parsing. Configuration
keys of the backend scope can be declared in any ConfigMap or as Ingress or Service
annotation. A conflict happens when the same backend configuration key with distinct
values are declared in distinct Ingress resources but to the same Service or HAProxy
backend.&lt;/p&gt;

&lt;h2 id=&#34;path&#34;&gt;Path&lt;/h2&gt;

&lt;p&gt;Defines configuration keys that bind to the hostname and the HTTP path.
Configuration keys of the Path scope can be declared in any ConfigMap as a default
value, or as Ingress or Service annotation. Configuration keys of the Path scope
never conflict.&lt;/p&gt;

&lt;h2 id=&#34;tcp&#34;&gt;TCP&lt;/h2&gt;

&lt;p&gt;Defines configuration keys that bind on the port number of a TCP service.
Configuration keys of the TCP scope can be declared in any ConfigMap as a default
value, or as Ingress annotation. A conflict happens when the same TCP configuration
key with distinct values are declared in distinct Ingress resources but to the same
TCP port number.&lt;/p&gt;

&lt;h1 id=&#34;keys&#34;&gt;Keys&lt;/h1&gt;

&lt;p&gt;The table below describes all supported configuration keys.&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Data type&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-emails&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;email1,email2,&amp;hellip;&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-endpoint&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[&lt;code&gt;v2-staging&lt;/code&gt;|&lt;code&gt;v2&lt;/code&gt;|&lt;code&gt;endpoint&lt;/code&gt;]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-expiring&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of days&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-preferred-chain&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CN (Common Name) of the issuer&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-shared&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;acme-terms-agreed&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;affinity&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;affinity type&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check-addr&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;address for agent checks&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check-interval&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;backend agent listen port&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check-send&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;string to send upon agent connection&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#allowlist&#34;&gt;&lt;code&gt;allowlist-source-range&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Comma-separated IPs or CIDRs&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#allowlist&#34;&gt;&lt;code&gt;allowlist-source-header&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Header name that will be used as a src&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#app-root&#34;&gt;&lt;code&gt;app-root&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;/url&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#backend-server-id&#34;&gt;&lt;code&gt;assign-backend-server-id&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-headers-fail&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;header&amp;gt;,...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-headers-request&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;header&amp;gt;,...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-headers-succeed&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;header&amp;gt;,...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;auth-log-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http log format for auth external&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;do not log&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-method&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http request method&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-proxy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;frontend name and tcp port interval&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;_front__auth:14415-14499&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-basic&#34;&gt;&lt;code&gt;auth-realm&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;realm string&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-basic&#34;&gt;&lt;code&gt;auth-secret&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;secret name&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-signin&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sign in URL&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-cert-header&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-error-page&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;url&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-secret&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/secret name&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-strict&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-verify-client&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[off|optional|on|optional_no_ca]&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-url&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Authentication URL&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;backend-check-interval&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#backend-protocol&#34;&gt;&lt;code&gt;backend-protocol&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[h1|h2|h1-ssl|h2-ssl]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#backend-server-naming&#34;&gt;&lt;code&gt;backend-server-naming&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[sequence|ip|pod]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sequence&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dynamic-scaling&#34;&gt;&lt;code&gt;backend-server-slots-increment&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of slots&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#balance-algorithm&#34;&gt;&lt;code&gt;balance-algorithm&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;algorithm name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;roundrobin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind&#34;&gt;&lt;code&gt;bind-fronting-proxy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ip + port&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind&#34;&gt;&lt;code&gt;bind-http&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ip + port&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind&#34;&gt;&lt;code&gt;bind-https&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ip + port&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;&lt;code&gt;bind-ip-addr-healthz&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;&lt;code&gt;bind-ip-addr-http&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;&lt;code&gt;bind-ip-addr-prometheus&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;&lt;code&gt;bind-ip-addr-stats&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;&lt;code&gt;bind-ip-addr-tcp&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#blue-green&#34;&gt;&lt;code&gt;blue-green-balance&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;label=value=weight,&amp;hellip;&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#blue-green&#34;&gt;&lt;code&gt;blue-green-cookie&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CookieName:LabelName&lt;/code&gt; pair&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#blue-green&#34;&gt;&lt;code&gt;blue-green-deploy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;label=value=weight,&amp;hellip;&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#blue-green&#34;&gt;&lt;code&gt;blue-green-header&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HeaderName:LabelName&lt;/code&gt; pair&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#blue-green&#34;&gt;&lt;code&gt;blue-green-mode&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[pod|deploy]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;cert-signer&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;acme&amp;rdquo;&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-backend&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline backend config&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-defaults&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline config for the defaults section&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-frontend&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline HTTP and HTTPS frontend config&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-global&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline config for the global section&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-proxy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline config for any proxy&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-sections&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline custom sections declaration&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-tcp&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline ConfigMap based TCP config&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-tcp-service&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline TCP service config&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;cookie-key&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;secret key&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ingress&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-allow-credentials&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-allow-headers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;headers list&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-allow-methods&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;methods list&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-allow-origin&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-enable&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-expose-headers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;headers&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cors&#34;&gt;&lt;code&gt;cors-max-age&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time (seconds)&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cpu-map&#34;&gt;&lt;code&gt;cpu-map&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;haproxy CPU Map format&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cross-namespace&#34;&gt;&lt;code&gt;cross-namespace-secrets-ca&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[allow|deny]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cross-namespace&#34;&gt;&lt;code&gt;cross-namespace-secrets-crt&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[allow|deny]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cross-namespace&#34;&gt;&lt;code&gt;cross-namespace-secrets-passwd&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[allow|deny]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cross-namespace&#34;&gt;&lt;code&gt;cross-namespace-services&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[allow|deny]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#default-redirect&#34;&gt;&lt;code&gt;default-backend-redirect&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Location&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#default-redirect&#34;&gt;&lt;code&gt;default-backend-redirect-code&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;HTTP status code&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#allowlist&#34;&gt;&lt;code&gt;denylist-source-range&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Comma-separated IPs or CIDRs&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-accepted-payload-size&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8192&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-cluster-domain&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;cluster name&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cluster.local&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-hold-obsolete&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-hold-valid&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-resolvers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline resolver=ip[:port]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;dns-timeout-retry&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#drain-support&#34;&gt;&lt;code&gt;drain-support&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#drain-support&#34;&gt;&lt;code&gt;drain-support-redispatch&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dynamic-scaling&#34;&gt;&lt;code&gt;dynamic-scaling&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#external&#34;&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#forwardfor&#34;&gt;&lt;code&gt;forwardfor&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[add|ignore|ifmissing]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#fronting-proxy-port&#34;&gt;&lt;code&gt;fronting-proxy-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;0 (do not listen)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#security&#34;&gt;&lt;code&gt;groupname&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;haproxy group name&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#headers&#34;&gt;&lt;code&gt;headers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;multiline header:value pair&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-addr&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;address for health checks&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-fall-count&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of failures&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-interval&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port for health checks&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-rise-count&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of successes&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#health-check&#34;&gt;&lt;code&gt;health-check-uri&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uri for http health checks&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-port&#34;&gt;&lt;code&gt;healthz-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10253&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#hsts&#34;&gt;&lt;code&gt;hsts&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#hsts&#34;&gt;&lt;code&gt;hsts-include-subdomains&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#hsts&#34;&gt;&lt;code&gt;hsts-max-age&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of seconds&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;15768000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#hsts&#34;&gt;&lt;code&gt;hsts-preload&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;http-log-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http log format&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;HAProxy default log format&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-port&#34;&gt;&lt;code&gt;http-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;80&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;https-log-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;https(tcp) log format|&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;do not log&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-port&#34;&gt;&lt;code&gt;https-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;443&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#fronting-proxy-port&#34;&gt;&lt;code&gt;https-to-http-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;0 (do not listen)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#initial-weight&#34;&gt;&lt;code&gt;initial-weight&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;weight value&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#limit&#34;&gt;&lt;code&gt;limit-connections&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;qty&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#limit&#34;&gt;&lt;code&gt;limit-rps&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;rate per second&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#limit&#34;&gt;&lt;code&gt;limit-whitelist&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;cidr list&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#load-server-state&#34;&gt;&lt;code&gt;load-server-state&lt;/code&gt;&lt;/a&gt; (experimental)&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#master-worker&#34;&gt;&lt;code&gt;master-exit-on-failure&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#connection&#34;&gt;&lt;code&gt;max-connections&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#connection&#34;&gt;&lt;code&gt;maxconn-server&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;qty&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#connection&#34;&gt;&lt;code&gt;maxqueue-server&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;qty&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#modsecurity&#34;&gt;&lt;code&gt;modsecurity-endpoints&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;comma-separated list of IP:port (spoa)&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;no waf config&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#modsecurity&#34;&gt;&lt;code&gt;modsecurity-timeout-hello&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;100ms&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#modsecurity&#34;&gt;&lt;code&gt;modsecurity-timeout-idle&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;30s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#modsecurity&#34;&gt;&lt;code&gt;modsecurity-timeout-processing&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#nbproc&#34;&gt;&lt;code&gt;nbproc-ssl&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of process&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#nbthread&#34;&gt;&lt;code&gt;nbthread&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of threads&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-redirect&#34;&gt;&lt;code&gt;no-tls-redirect-locations&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;comma-separated list of URIs&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/.well-known/acme-challenge&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#oauth&#34;&gt;&lt;code&gt;oauth&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;oauth2_proxy&amp;rdquo;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#oauth&#34;&gt;&lt;code&gt;oauth-headers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;header&amp;gt;:&amp;lt;var&amp;gt;,...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#oauth&#34;&gt;&lt;code&gt;oauth-uri-prefix&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;URI prefix&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#path-type&#34;&gt;&lt;code&gt;path-type&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;path matching type&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;begin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#path-type&#34;&gt;&lt;code&gt;path-type-order&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;comma-separated path type list&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;exact,prefix,begin,regex&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#bind-port&#34;&gt;&lt;code&gt;prometheus-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#proxy-body-size&#34;&gt;&lt;code&gt;proxy-body-size&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;size (bytes)&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;unlimited&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#proxy-protocol&#34;&gt;&lt;code&gt;proxy-protocol&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[v1|v2|v2-ssl|v2-ssl-cn]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#redirect&#34;&gt;&lt;code&gt;redirect-from&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;domain name&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#redirect&#34;&gt;&lt;code&gt;redirect-from-code&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http status code&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#redirect&#34;&gt;&lt;code&gt;redirect-from-regex&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;regex&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#redirect&#34;&gt;&lt;code&gt;redirect-to&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;fully qualified URL&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#redirect&#34;&gt;&lt;code&gt;redirect-to-code&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http status code&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#rewrite-target&#34;&gt;&lt;code&gt;rewrite-target&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;path string&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-backends&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-crt-secret&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;secret name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-sni&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[&lt;code&gt;sni&lt;/code&gt;|&lt;code&gt;host&lt;/code&gt;|&lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt;]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-verify-ca-secret&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;secret name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-verify-hostname&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;hostname&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#server-alias&#34;&gt;&lt;code&gt;server-alias&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;domain name&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#server-alias&#34;&gt;&lt;code&gt;server-alias-regex&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;regex&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#service-upstream&#34;&gt;&lt;code&gt;service-upstream&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-domain&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;domain name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-dynamic&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-keywords&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;cookie options&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;indirect nocache httponly&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-name&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;cookie name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-preserve&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-shared&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-strategy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[insert|prefix|rewrite]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#affinity&#34;&gt;&lt;code&gt;session-cookie-value-strategy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[server-name|pod-uid]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;server-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dynamic-scaling&#34;&gt;&lt;code&gt;slots-min-free&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;minimum number of free slots&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#source-address-intf&#34;&gt;&lt;code&gt;source-address-intf&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;intf1&amp;gt;[,&amp;lt;intf2&amp;gt;...]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-always-add-https&#34;&gt;&lt;code&gt;ssl-always-add-https&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;&lt;code&gt;ssl-cipher-suites&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;colon-separated list&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;&lt;code&gt;ssl-cipher-suites-backend&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;colon-separated list&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;&lt;code&gt;ssl-ciphers&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;colon-separated list&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;&lt;code&gt;ssl-ciphers-backend&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;colon-separated list&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-ciphers&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-dh&#34;&gt;&lt;code&gt;ssl-dh-default-max-size&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-dh&#34;&gt;&lt;code&gt;ssl-dh-param&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/secret name&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;no custom DH param&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-engine&#34;&gt;&lt;code&gt;ssl-engine&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OpenSSL engine name and parameters&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;no engine set&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;ssl-fingerprint-lower&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;ssl-headers-prefix&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;prefix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;X-SSL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-engine&#34;&gt;&lt;code&gt;ssl-mode-async&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;&lt;code&gt;ssl-options&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;space-separated list&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;&lt;code&gt;ssl-options-backend&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;space-separated list&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;&lt;code&gt;ssl-options-host&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;space-separated list&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-options&#34;&gt;see description&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-passthrough&#34;&gt;&lt;code&gt;ssl-passthrough&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-passthrough&#34;&gt;&lt;code&gt;ssl-passthrough-http-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;backend port&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-redirect&#34;&gt;&lt;code&gt;ssl-redirect&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ssl-redirect&#34;&gt;&lt;code&gt;ssl-redirect-code&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;http status code&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-auth&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;user:passwd&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;no auth&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1936&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-proxy-protocol&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-ssl-cert&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/secret name&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;no ssl/plain http&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#strict-host&#34;&gt;&lt;code&gt;strict-host&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog-endpoint&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IP:port (udp)&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;do not log&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;rfc5424|rfc3164&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rfc5424&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog-length&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;maximum length&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog-tag&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;syslog tag field string&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ingress&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;tcp-log-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ConfigMap based TCP log format&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;tcp-service-log-format&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TCP service log format&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;HAProxy default log format&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#tcp-services&#34;&gt;&lt;code&gt;tcp-service-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TCP service port number&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#proxy-protocol&#34;&gt;&lt;code&gt;tcp-service-proxy-protocol&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-client&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-client-fin&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-connect&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-http-request&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-keep-alive&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1m&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-queue&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-server&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-server-fin&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-stop&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10m&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#timeout&#34;&gt;&lt;code&gt;timeout-tunnel&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time with suffix&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1h&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#tls-alpn&#34;&gt;&lt;code&gt;tls-alpn&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TLS ALPN advertisement&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h2,http/1.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#security&#34;&gt;&lt;code&gt;use-chroot&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#cpu-map&#34;&gt;&lt;code&gt;use-cpu-map&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#fronting-proxy-port&#34;&gt;&lt;code&gt;use-forwarded-proto&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#security&#34;&gt;&lt;code&gt;use-haproxy-user&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#use-htx&#34;&gt;&lt;code&gt;use-htx&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#proxy-protocol&#34;&gt;&lt;code&gt;use-proxy-protocol&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#dns-resolvers&#34;&gt;&lt;code&gt;use-resolver&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;resolver name&lt;/td&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#security&#34;&gt;&lt;code&gt;username&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;haproxy user name&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#var-namespace&#34;&gt;&lt;code&gt;var-namespace&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#waf&#34;&gt;&lt;code&gt;waf&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;ldquo;modsecurity&amp;rdquo;&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#waf&#34;&gt;&lt;code&gt;waf-mode&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[deny|detect]&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt; (if waf is set)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#allowlist&#34;&gt;&lt;code&gt;whitelist-source-range&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Comma-separated IPs or CIDRs&lt;/td&gt;
&lt;td&gt;Path&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#master-worker&#34;&gt;&lt;code&gt;worker-max-reloads&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;number of reloads&lt;/td&gt;
&lt;td&gt;Global&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;acme&#34;&gt;Acme&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-emails&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-endpoint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-expiring&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-preferred-chain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13.5&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-shared&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;acme-terms-agreed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cert-signer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures dynamic options used to authorize and sign certificates against a server
which implements the acme protocol, version 2.&lt;/p&gt;

&lt;p&gt;The popular &lt;a href=&#34;https://letsencrypt.org&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; certificate authority implements
acme-v2.&lt;/p&gt;

&lt;p&gt;Supported acme configuration keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;acme-emails&lt;/code&gt;: mandatory, a comma-separated list of emails used to configure the client account. The account will be updated if this option is changed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme-endpoint&lt;/code&gt;: mandatory, endpoint of the acme environment. &lt;code&gt;v2-staging&lt;/code&gt; and &lt;code&gt;v02-staging&lt;/code&gt; are alias to &lt;code&gt;https://acme-staging-v02.api.letsencrypt.org&lt;/code&gt;, while &lt;code&gt;v2&lt;/code&gt; and &lt;code&gt;v02&lt;/code&gt; are alias to &lt;code&gt;https://acme-v02.api.letsencrypt.org&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme-expiring&lt;/code&gt;: how many days before expiring a certificate should be considered old and should be updated. Defaults to &lt;code&gt;30&lt;/code&gt; days.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme-preferred-chain&lt;/code&gt;: optional, defines the Issuer&amp;rsquo;s CN (Common Name) of the topmost certificate in the chain, if the acme server offers multiple certificate chains. The default certificate chain will be used if empty or no match is found. Note that changing this option will not force a new certificate to be issued if a valid one is already in place and actual and preferred chains differ. A new certificate can be emitted by changing the secret name in the ingress resource, or removing the secret being referenced.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme-shared&lt;/code&gt;: defines if another certificate signer is running in the cluster. If &lt;code&gt;false&lt;/code&gt;, the default value, any request to &lt;code&gt;/.well-known/acme-challenge/&lt;/code&gt; is sent to the local acme server despite any ingress object configuration. Otherwise, if &lt;code&gt;true&lt;/code&gt;, a configured ingress object would take precedence.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme-terms-agreed&lt;/code&gt;: mandatory, it should be defined as &lt;code&gt;true&lt;/code&gt;, otherwise certificates won&amp;rsquo;t be issued.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cert-signer&lt;/code&gt;: defines the certificate signer that should be used to authorize and sign new certificates. The only supported value is &lt;code&gt;&amp;quot;acme&amp;quot;&lt;/code&gt;. Add this config as an annotation in the ingress object that should have its certificate managed by haproxy-ingress and signed by the configured acme environment. The annotation &lt;code&gt;kubernetes.io/tls-acme: &amp;quot;true&amp;quot;&lt;/code&gt; is also supported if the command-line option &lt;code&gt;--acme-track-tls-annotation&lt;/code&gt; is used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Minimum setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The command-line option &lt;code&gt;--acme-server&lt;/code&gt; need to be declared to start the local
server and the work queue used to authorize and sign new certificates. See other
command-line options &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#acme&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The following configuration keys are mandatory: &lt;code&gt;acme-emails&lt;/code&gt;, &lt;code&gt;acme-endpoint&lt;/code&gt;,
&lt;code&gt;acme-terms-agreed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A cluster-wide permission to &lt;code&gt;create&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt; the &lt;code&gt;secrets&lt;/code&gt; resources should
also be made.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
haproxy-ingress need cluster-wide permissions &lt;code&gt;create&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt; on resource
&lt;code&gt;secrets&lt;/code&gt; to store the client private key (new account) and the generated certificate
and its private key. The default clusterrole configuration doesn&amp;rsquo;t provide these
permissions.
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All haproxy-ingress instances should declare &lt;code&gt;--acme-server&lt;/code&gt;
&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#acme&#34;&gt;command-line option&lt;/a&gt;, which will start a local
server to answer acme challenges, a work queue to enqueue the domain authorization
and certificate signing, and will also start a leader election to define which
haproxy-ingress instance should perform authorizations and certificate signing.&lt;/p&gt;

&lt;p&gt;The haproxy-ingress leader tracks ingress objects that declares the annotation
&lt;code&gt;haproxy-ingress.github.io/cert-signer&lt;/code&gt; with value &lt;code&gt;acme&lt;/code&gt; and a configured secret name for
TLS certificate. The annotation &lt;code&gt;kubernetes.io/tls-acme&lt;/code&gt; with value &lt;code&gt;&amp;quot;true&amp;quot;&lt;/code&gt; will also
be used if the command-line option &lt;code&gt;--acme-track-tls-annotation&lt;/code&gt; is declared. The
secret does not need to exist. A new certificate will be issued if the certificate is
old, the secret does not exist or has an invalid certificate, or the domains of the
certificate doesn&amp;rsquo;t cover all the domains configured in the ingress.&lt;/p&gt;

&lt;p&gt;Every &lt;code&gt;24h&lt;/code&gt; or the duration configured in the &lt;code&gt;--acme-check-period&lt;/code&gt;, and also when the
leader changes, all the certificates from all the tracked ingress will be verified. The
certificate is also verified whenever the list of the domains or the secret name changes,
so the periodic check will, in fact, only issue new certificates when there is &lt;code&gt;30&lt;/code&gt; days
or less to the certificate expires. This duration can be changed with &lt;code&gt;acme-expiring&lt;/code&gt;
configuration key.&lt;/p&gt;

&lt;p&gt;If an authorization fails, the certificate request is re-enqueued to be tried again after
&lt;code&gt;5m&lt;/code&gt;. This duration can be changed with &lt;code&gt;--acme-fail-initial-duration&lt;/code&gt; command-line
option. If the request fails again, it will be re-enqueued after the double of the time,
in this case, after &lt;code&gt;10m&lt;/code&gt;. The duration will exponentially increase up to &lt;code&gt;8h&lt;/code&gt; or the
duration defined by the command-line option &lt;code&gt;--acme-fail-max-duration&lt;/code&gt;. The request will
continue in the work queue until it is successfully processed and stored, or when the
ingress object is untracked, either removing the annotation, removing the secret name or
removing the ingress object itself.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#acme&#34;&gt;acme command-line options&lt;/a&gt; doc.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;affinity&#34;&gt;Affinity&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;affinity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cookie-key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ingress&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13.6&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-dynamic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-keywords&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;indirect nocache httponly&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INGRESSCOOKIE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-preserve&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-same-site&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-shared&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt; (deprecated)&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-strategy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;insert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;session-cookie-value-strategy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;server-name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure if HAProxy should maintain client requests to the same backend server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;affinity&lt;/code&gt;: the only supported option is &lt;code&gt;cookie&lt;/code&gt;. If declared, clients will receive a cookie with a hash of the server it should be fidelized to.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cookie-key&lt;/code&gt;: defines a secret key used with the IP address and port number of a backend server to dynamically create a cookie to that server. Defaults to &lt;code&gt;Ingress&lt;/code&gt; if not provided.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-domain&lt;/code&gt;: configures the domain to which the persistence cookie should be sent. All subdomains of the configured domain will also receive the cookie. The ingress&amp;rsquo; hostname must match this configuration, or should be a subdomain, otherwise modern browsers will refuse to accept the cookie. E.g. if the ingress is configured as &lt;code&gt;sub.example.com&lt;/code&gt;, the &lt;code&gt;session-cookie-domain&lt;/code&gt; value must be only &lt;code&gt;sub.example.com&lt;/code&gt; or &lt;code&gt;example.com&lt;/code&gt;. If &lt;code&gt;example.com&lt;/code&gt; is used, all of its subdomains will receive the cookie. This option has precedence over &lt;code&gt;session-cookie-shared&lt;/code&gt;. Note that, although hostname related, this is a backend scoped configuration key, so the configuration will conflict if used in two or more distinct ingress, with distinct values, pointing to the same Kubernetes service. See &lt;a href=&#34;#backend&#34;&gt;backend scope&lt;/a&gt; for further information about configuration conflict.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-dynamic&lt;/code&gt;: indicates whether or not dynamic cookie value will be used. With the default of &lt;code&gt;true&lt;/code&gt;, a cookie value will be generated by HAProxy using a hash of the server IP address, TCP port, and dynamic cookie secret key. When &lt;code&gt;false&lt;/code&gt;, the server name will be used as the cookie name. Note that setting this to &lt;code&gt;false&lt;/code&gt; will have no impact if &lt;a href=&#34;#dns-resolvers&#34;&gt;use-resolver&lt;/a&gt; is set.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-keywords&lt;/code&gt;: additional options to the &lt;code&gt;cookie&lt;/code&gt; option like &lt;code&gt;nocache&lt;/code&gt;, &lt;code&gt;httponly&lt;/code&gt;. For the sake of backwards compatibility the default is &lt;code&gt;indirect nocache httponly&lt;/code&gt; if not declared and &lt;code&gt;strategy&lt;/code&gt; is &lt;code&gt;insert&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-name&lt;/code&gt;: the name of the cookie. &lt;code&gt;INGRESSCOOKIE&lt;/code&gt; is the default value if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-preserve&lt;/code&gt;: indicates whether the session cookie will be set to &lt;code&gt;preserve&lt;/code&gt; mode. If this mode is enabled, haproxy will allow backend servers to use a &lt;code&gt;Set-Cookie&lt;/code&gt; HTTP header to emit their own persistence cookie value, meaning the backend servers have knowledge of which cookie value should route to which server. Since the cookie value is tightly coupled with a particular backend server in this scenario, this mode will cause dynamic updating to understand that it must keep the same cookie value associated with the same backend server. If this is disabled, dynamic updating is free to assign servers in a way that can make their cookie value no longer matching.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-same-site&lt;/code&gt;: if &lt;code&gt;true&lt;/code&gt;, adds the &lt;code&gt;SameSite=None; Secure&lt;/code&gt; attributes, which configures the browser to send the persistence cookie with both cross-site and same-site requests. The default value is &lt;code&gt;false&lt;/code&gt;, which means only same-site requests will send the persistence cookie.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-shared&lt;/code&gt;: defines if the persistence cookie should be shared between all domains that uses this backend. Defaults to &lt;code&gt;false&lt;/code&gt;. If &lt;code&gt;true&lt;/code&gt; the &lt;code&gt;Set-Cookie&lt;/code&gt; response will declare all the domains that shares this backend, indicating to the HTTP agent that all of them should use the same backend server. Note that this option is active only for backward compatibility: modern browsers accept only one domain attribute, deprecating how this option builds the persistence cookie configuration. Use &lt;code&gt;session-cookie-domain&lt;/code&gt; instead.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-strategy&lt;/code&gt;: the cookie strategy to use (insert, rewrite, prefix). &lt;code&gt;insert&lt;/code&gt; is the default value if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-cookie-value-strategy&lt;/code&gt;: the strategy to use to calculate the cookie value of a server (&lt;code&gt;server-name&lt;/code&gt;, &lt;code&gt;pod-uid&lt;/code&gt;). &lt;code&gt;server-name&lt;/code&gt; is the default if not declared, and indicates that the cookie will be set based on the name defined in &lt;code&gt;backend-server-naming&lt;/code&gt;. &lt;code&gt;pod-uid&lt;/code&gt; indicates that the cookie will be set to the &lt;code&gt;UID&lt;/code&gt; of the pod running the target server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note for &lt;code&gt;dynamic-scaling&lt;/code&gt; users only, v0.5 or older: the hash of the server is built based on it&amp;rsquo;s name.
When the slots are scaled down, the remaining servers might change it&amp;rsquo;s server name on
HAProxy configuration. In order to circumvent this, always configure the slot increment at
least as much as the number of replicas of the deployment that need to use affinity. This
limitation was removed on v0.6.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie&#34;&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-cookie&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-cookie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-cookie&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-cookie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.haproxy.com/blog/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/&#34;&gt;https://www.haproxy.com/blog/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#dynamic-cookie-key&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#dynamic-cookie-key&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;agent-check&#34;&gt;Agent check&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent-check-addr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent-check-interval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent-check-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent-check-send&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Allows HAProxy agent checks to be defined for a backend. This is an auxiliary
check that is run independently of a regular health check and can be used to
control the reported status of a server as well as the weight to be used for
load balancing.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;agent-check-port&lt;/code&gt; must be provided for any of the agent check options to be applied&lt;/li&gt;
&lt;li&gt;define &lt;a href=&#34;#initial-weight&#34;&gt;&lt;code&gt;initial-weight&lt;/code&gt;&lt;/a&gt; if using &lt;code&gt;agent-check&lt;/code&gt; to change the server weight&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;code&gt;agent-check-port&lt;/code&gt;: Defines the port on which the agent is listening. This
option is required in order to use an agent check.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent-check-addr&lt;/code&gt;: Defines the address for agent checks. If omitted, the
server address will be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent-check-interval&lt;/code&gt;: Defines the interval between agent checks. If omitted,
the default of 2 seconds will be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent-check-send&lt;/code&gt;: Defines a string to be sent to the agent upon connection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following limitations are known when using &lt;code&gt;agent-check&lt;/code&gt; to change the weight
of a backend server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If using &lt;a href=&#34;#drain-support&#34;&gt;&lt;code&gt;drain-support&lt;/code&gt;&lt;/a&gt;, the backend server will have its
initial weight defined as &lt;code&gt;0&lt;/code&gt; (zero) if the server is terminating when haproxy
is restarted, making the weight update useless&lt;/li&gt;
&lt;li&gt;Blue/green annotation might be dynamically applied, which will temporarily
overwrite the weight defined from the agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-check&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-port&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-inter&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-inter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-send&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-agent-send&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;allowlist&#34;&gt;Allowlist&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowlist-source-range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;denylist-source-range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;whitelist-source-range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowlist-source-header&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines a comma-separated list of source IPs or CIDRs allowed or denied to connect.
The default behavior is to allow all source IPs if neither the allow list nor the
deny list are declared. The lists support IPv4 and IPv6.&lt;/p&gt;

&lt;p&gt;This is a path scoped configuration: distinct paths in the same hostname can have
distinct configurations. However this doesn&amp;rsquo;t happen if the backend has
&lt;a href=&#34;#ssl-passthrough&#34;&gt;ssl-passthrough&lt;/a&gt;, which uses HAProxy&amp;rsquo;s TCP mode, in this case
the allow and deny lists act as a backend scoped config.&lt;/p&gt;

&lt;p&gt;Since v0.12 IPs or CIDRs can be prefixed with &lt;code&gt;!&lt;/code&gt;, which means an exception to the
rule, so an allow list with &lt;code&gt;&amp;quot;10.0.0.0/8,!10.100.0.0/16&amp;quot;&lt;/code&gt; will allow only IPs from
the range &lt;code&gt;10.x.x.x&lt;/code&gt;, except the range &lt;code&gt;10.100.x.x&lt;/code&gt; which will continue to be denied.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;allowlist-source-range&lt;/code&gt;: Used to deny requests by default, allowing only the IPs
and CIDRs in the list, except IPs and CIDRs prefixed with &lt;code&gt;!&lt;/code&gt; which will continue to
be denied. &lt;code&gt;whitelist-source-range&lt;/code&gt; is an alias to preserve backward compatibility,
and will be ignored if &lt;code&gt;allowlist-source-range&lt;/code&gt; is declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;denylist-source-range&lt;/code&gt;: Used to allow requests by default, denying only the IPs
and CIDRs in the list, except IPs and CIDRs prefixed with &lt;code&gt;!&lt;/code&gt; which will continue to
be allowed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowlist-source-header&lt;/code&gt;: Used to define a header from which source IP will be
taken in order to compare with the allow and deny list. If not defined a normal source
will be used. This option is useful when ingress is hidden behind reverse proxy but you
still want to control access to separate paths from ingress configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Allowlist and denylist can be used together. The request will be denied if the
configurations overlap and a source IP matches both the allowlist and denylist.&lt;/p&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
Setting a &lt;code&gt;allowlist-source-header&lt;/code&gt; comes with a security risk. You must ensure that
the selected header can be trusted!
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-http-request%20deny&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-http-request%20deny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-http-request%20set-src&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-http-request%20set-src&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;app-root&#34;&gt;App root&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;app-root&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines a distinct application root path. HAProxy will redirect requests to the
configured path, using &lt;code&gt;302&lt;/code&gt; status code, when the HTTP client sends a request
to the root context of the configured domain. &lt;code&gt;app-root&lt;/code&gt; key binds to the root
context path, so it needs to be declared in the same Ingress that configures it.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#redirect&#34;&gt;Redirect&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;auth-basic&#34;&gt;Auth Basic&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-realm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;localhost&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures Basic Authentication options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-secret&lt;/code&gt;: A secret name with users and passwords used to configure basic authentication. The secret can be in the same namespace of the Ingress resource, or any other namespace if cross namespace is enabled. Secret in the same namespace does not need to be prepended with &lt;code&gt;namespace/&lt;/code&gt;. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing the list of users and passwords, eg &lt;code&gt;file:///dir/users.list&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-realm&lt;/code&gt;: Optional, configures the authentication realm string. &lt;code&gt;localhost&lt;/code&gt; will be used if not provided.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The secret referenced by &lt;code&gt;auth-secret&lt;/code&gt; should have a key named &lt;code&gt;auth&lt;/code&gt; with users and passwords, one per line. The following two formats are supported and both are supported in the same secret or file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;user&amp;gt;::&amp;lt;password&amp;gt;&lt;/code&gt;: User and password are separated by 2 (two) colons. The password will be copied verbatim, stored in the configuration file in an insecure way.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;user&amp;gt;:&amp;lt;password-hash&amp;gt;&lt;/code&gt;: User and password are separated by 1 (one) colon. This syntax needs a password hash that can be generated with &lt;code&gt;mkpasswd&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Up to v0.12 the configuration key &lt;code&gt;auth-type&lt;/code&gt; was mandatory, it enabled the only supported authentication type &lt;code&gt;basic&lt;/code&gt;. Since v0.13 this configuration is deprecated and both Basic and External authentication types can be enabled at the same time: configure &lt;code&gt;auth-secret&lt;/code&gt; to enable basic authentication, and configure &lt;code&gt;auth-url&lt;/code&gt; to enable external authentication.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#allow-cross-namespace&#34;&gt;&amp;ndash;allow-cross-namespace&lt;/a&gt; command-line option&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#auth-tls&#34;&gt;Auth TLS&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/tree/master/examples/auth/basic&#34;&gt;Auth Basic example&lt;/a&gt; page&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;auth-external&#34;&gt;Auth External&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-headers-fail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-headers-request&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-headers-succeed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-method&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;_front__auth:14415-14499&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-signin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures External Authentication options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-url&lt;/code&gt;: Configures the endpoint(s) of the authentication service. All requests made to the target backend server will be validated by the authentication service before continue, which should respond with &lt;code&gt;2xx&lt;/code&gt; HTTP status code, otherwise the request is considered as failed. In the case of a failure, the backend server is not used and the client receives the response from the authentication service.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-method&lt;/code&gt;: Configures the HTTP method used in the request to the external authentication service. Use an asterisk &lt;code&gt;*&lt;/code&gt; to copy the same method used in the client request. The default value is &lt;code&gt;GET&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-request&lt;/code&gt;: Configures a comma-separated list of header names that should be copied from the client to the authentication service. All HTTP headers will be copied if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-succeed&lt;/code&gt;: Configures a comma-separated list of header names that should be copied from the authentication service to the backend server if the authentication succeed. All HTTP headers will be copied if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-fail&lt;/code&gt;: Configures a comma-separated list of header names that should be copied from the authentication service to the client if the authentication fail. This option is ignored if &lt;code&gt;auth-signin&lt;/code&gt; is used. All HTTP headers will be copied if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-signin&lt;/code&gt;: Optional, configures the endpoint of the sign in server used to redirect failed requests. The content is parsed by haproxy as a &lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#8.2.4&#34;&gt;log-format&lt;/a&gt; string and the result is copied verbatim to the &lt;code&gt;Location&lt;/code&gt; header of a HTTP 302 response. The default behavior is to use the authentication service response.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-proxy&lt;/code&gt;: Optional, changes the name of a frontend proxy and a free TCP port range, used by &lt;code&gt;auth-request.lua&lt;/code&gt; script to query the external authentication endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;External service URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;auth-url&lt;/code&gt; is the only mandatory option and receives the external authentication service endpoint. The url format is &lt;code&gt;&amp;lt;proto&amp;gt;://&amp;lt;name&amp;gt;[:&amp;lt;port&amp;gt;][&amp;lt;path&amp;gt;]&lt;/code&gt;, which means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;proto&amp;gt;&lt;/code&gt;: can be &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;https&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt; or &lt;code&gt;svc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;: the IP or hostname if &lt;code&gt;http&lt;/code&gt; or &lt;code&gt;https&lt;/code&gt;, or the name of a service if &lt;code&gt;service&lt;/code&gt;. &lt;code&gt;svc&lt;/code&gt; is an alias to &lt;code&gt;service&lt;/code&gt;. Note that the hostname is resolved to a list of IP when the ingress is parsed and will not be dynamically updated later if the DNS record changes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;port&amp;gt;&lt;/code&gt;: the port number, must be provided if a service is used and can be omitted if using &lt;code&gt;http&lt;/code&gt; or &lt;code&gt;https&lt;/code&gt;. If the service uses named ports, use the service&amp;rsquo;s &lt;code&gt;port.targetPort&lt;/code&gt; field value instead.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt;: optional, the fully qualified path to the authentication service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;http&lt;/code&gt; and &lt;code&gt;https&lt;/code&gt; protocols are straightforward: use them to connect to an IP or hostname without any further configuration. &lt;code&gt;http&lt;/code&gt; adds the HTTP &lt;code&gt;Host&lt;/code&gt; header if a hostname is used, and &lt;code&gt;https&lt;/code&gt; adds also the sni extension. Note that &lt;code&gt;https&lt;/code&gt; connects in an insecure way and currently cannot be customized. Do NOT use neither &lt;code&gt;http&lt;/code&gt; nor &lt;code&gt;https&lt;/code&gt; if haproxy -&amp;gt; authentication service communication has untrusted networks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;svc&lt;/code&gt; protocol allows to use a Kubernetes service declared in the same namespace of the ingress or the service being annotated. Services on other namespaces can also be used in the form &lt;code&gt;svc://namespace/servicename:port/path&lt;/code&gt; if global config &lt;a href=&#34;#cross-namespace&#34;&gt;&lt;code&gt;cross-namespace-services&lt;/code&gt;&lt;/a&gt; was configured as &lt;code&gt;allow&lt;/code&gt;. The service can be of any type and a port must always be declared - both in the &lt;code&gt;auth-url&lt;/code&gt; configuration and in the service resource. Using &lt;code&gt;svc&lt;/code&gt; protocol allows to configure a secure connection, see &lt;a href=&#34;#secure-backend&#34;&gt;secure&lt;/a&gt; configuration keys and annotate them in the target service.&lt;/p&gt;

&lt;p&gt;Configuration examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-url: &amp;quot;http://10.0.0.2&amp;quot;&lt;/code&gt;: Authentication service accepts plain HTTP connection, TCP port &lt;code&gt;80&lt;/code&gt; and root path are used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-url: &amp;quot;https://10.0.0.2/auth&amp;quot;&lt;/code&gt;: Authentication service accepts HTTPS connection, TCP port &lt;code&gt;443&lt;/code&gt; and path &lt;code&gt;/auth&lt;/code&gt; are used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-url: &amp;quot;https://auth.local:8443&amp;quot;&lt;/code&gt;: Domain &lt;code&gt;auth.local&lt;/code&gt; is resolved during configuration building, and requests will be distributed among all its IPs, using the default load balance algorithm. Authentication service accepts HTTPS connection, TCP port &lt;code&gt;8443&lt;/code&gt; and root path are used. SNI extention and Host header are added to the request.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-url: &amp;quot;svc://auth-cluster:8443/auth&amp;quot;&lt;/code&gt;: A service named &lt;code&gt;auth-cluster&lt;/code&gt; will be used as the destination of the request, service port &lt;code&gt;8443&lt;/code&gt; and path &lt;code&gt;/auth&lt;/code&gt;. The service can be annotated with Backend and Path scoped configuration keys, eg &lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-backends&lt;/code&gt;&lt;/a&gt; to provide a secure connection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Forwarding headers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are three distinct configurations to forward header names:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-headers-request&lt;/code&gt;: headers from the client to the authentication service.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-succeed&lt;/code&gt;: headers from the authentication service to the backend server.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-fail&lt;/code&gt;: headers from the authentication service to the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first option will always be used, the second one only on succeeded requests, the last one only on failures.&lt;/p&gt;

&lt;p&gt;These configuration keys can be defined as a comma-separated list of header names. All HTTP headers will be copied if not declared. Each header name can use wildcard. Using a dash &lt;code&gt;-&lt;/code&gt; or an empty string instructs the controller not to copy any header.&lt;/p&gt;

&lt;p&gt;Configuration examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-headers-request: &amp;quot;X-*&amp;quot;&lt;/code&gt;: copy only headers started with &lt;code&gt;X-&lt;/code&gt; from the client to the authentication service. All headers provided by the authentication service will be copied to the backend server if the authentication succeed, or to the client if the authentication fail.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-request: &amp;quot;X-*&amp;quot;&lt;/code&gt; and &lt;code&gt;auth-headers-succeed: &amp;quot;X-Token,X-User-*&amp;quot;&lt;/code&gt;: just like the config above, copy only headers started with &lt;code&gt;X-&lt;/code&gt; from the client to the authentication service. If the request succeed, headers started with &lt;code&gt;X-User-&lt;/code&gt; and also the header &lt;code&gt;X-Token&lt;/code&gt; is copied to the backend server. If the request fail, all the provided headers are copied from the authentication server to the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dependencies and port range&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HAProxy Ingress uses &lt;a href=&#34;https://github.com/TimWolla/haproxy-auth-request&#34;&gt;&lt;code&gt;auth-request.lua&lt;/code&gt;&lt;/a&gt; script, which in turn uses HAProxy Technologies&amp;rsquo; &lt;a href=&#34;https://github.com/haproxytech/haproxy-lua-http/&#34;&gt;&lt;code&gt;haproxy-lua-http&lt;/code&gt;&lt;/a&gt; to perform the authentication request and wait for the response. The request is managed by an internal haproxy frontend/backend pair, which can be fine tuned with &lt;code&gt;auth-proxy&lt;/code&gt;. The default value is &lt;code&gt;_front__auth:14415-14499&lt;/code&gt;: &lt;code&gt;_front__auth&lt;/code&gt; is the name of the frontend helper and &lt;code&gt;14415-14499&lt;/code&gt; is an &lt;a href=&#34;https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt&#34;&gt;unassigned TCP port range&lt;/a&gt; that &lt;code&gt;haproxy-lua-http&lt;/code&gt; uses to connect and send the authentication request. Requests to this proxy can be added to the log, see &lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;auth-log-format&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Auth External needs &lt;a href=&#34;#external&#34;&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/a&gt; enabled if running on an external haproxy deployment. The external haproxy needs Lua json module installed (Alpine&amp;rsquo;s &lt;code&gt;lua-json4&lt;/code&gt; package)
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#auth-tls&#34;&gt;Auth TLS&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#oauth&#34;&gt;OAuth&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#external&#34;&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;auth-tls&#34;&gt;Auth TLS&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-tls-cert-header&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-tls-error-page&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-tls-secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-tls-strict&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8.1&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-tls-verify-client&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-fingerprint-lower&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-headers-prefix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;X-SSL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure client authentication with X509 certificate. The following headers are
added to the request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X-SSL-Client-SHA1&lt;/code&gt;: Hex encoding of the SHA-1 fingerprint of the X509 certificate. The default output uses uppercase hexadecimal digits, configure &lt;code&gt;ssl-fingerprint-lower&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; to use lowercase digits instead.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-SSL-Client-DN&lt;/code&gt;: Distinguished name of the certificate&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-SSL-Client-CN&lt;/code&gt;: Common name of the certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prefix of the header names can be configured with &lt;code&gt;ssl-headers-prefix&lt;/code&gt; key.
The default value is to &lt;code&gt;X-SSL&lt;/code&gt;, which will create a &lt;code&gt;X-SSL-Client-DN&lt;/code&gt; header with
the DN of the certificate.&lt;/p&gt;

&lt;p&gt;The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-tls-cert-header&lt;/code&gt;: If &lt;code&gt;true&lt;/code&gt; HAProxy will add &lt;code&gt;X-SSL-Client-Cert&lt;/code&gt; http header with a base64 encoding of the X509 certificate provided by the client. Default is to not provide the client certificate.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-tls-error-page&lt;/code&gt;: Optional URL of the page to redirect the user if he doesn&amp;rsquo;t provide a certificate or the certificate is invalid.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-tls-secret&lt;/code&gt;: Mandatory secret name with &lt;code&gt;ca.crt&lt;/code&gt; key providing all certificate authority bundles used to validate client certificates. Since v0.9, an optional &lt;code&gt;ca.crl&lt;/code&gt; key can also provide a CRL in PEM format for the server to verify against. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing the CA bundle in PEM format, and optionally followed by a comma and the filename with the crl, eg &lt;code&gt;file:///dir/ca.pem&lt;/code&gt; or &lt;code&gt;file:///dir/ca.pem,/dir/crl.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-tls-strict&lt;/code&gt;: Defines if a wrong or incomplete configuration, eg missing secret with &lt;code&gt;ca.crt&lt;/code&gt;, should forbid connection attempts. If &lt;code&gt;false&lt;/code&gt;, the default value, a wrong or incomplete configuration will ignore the authentication config, allowing anonymous connection. If &lt;code&gt;true&lt;/code&gt;, a strict configuration is used: all requests will be rejected with HTTP 495 or 496, or redirected to the error page if configured, until a proper &lt;code&gt;ca.crt&lt;/code&gt; is provided. Strict configuration will only be used if &lt;code&gt;auth-tls-secret&lt;/code&gt; has a secret name and &lt;code&gt;auth-tls-verify-client&lt;/code&gt; is missing or is not configured as &lt;code&gt;off&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-tls-verify-client&lt;/code&gt;: Optional configuration of Client Verification behavior. Supported values are &lt;code&gt;off&lt;/code&gt;, &lt;code&gt;on&lt;/code&gt;, &lt;code&gt;optional&lt;/code&gt; and &lt;code&gt;optional_no_ca&lt;/code&gt;. The default value is &lt;code&gt;on&lt;/code&gt; if a valid secret is provided, &lt;code&gt;off&lt;/code&gt; otherwise.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-fingerprint-lower&lt;/code&gt;: Defines if the certificate fingerprint should be in lowercase hexadecimal digits. The default value is &lt;code&gt;false&lt;/code&gt;, which uses uppercase digits.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-headers-prefix&lt;/code&gt;: Configures which prefix should be used on HTTP headers. Since &lt;a href=&#34;https://tools.ietf.org/html/rfc6648&#34;&gt;RFC 6648&lt;/a&gt; &lt;code&gt;X-&lt;/code&gt; prefix on unstandardized headers changed from a convention to deprecation. This configuration allows to select which pattern should be used on header names.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/tree/master/examples/auth/client-certs&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;backend-protocol&#34;&gt;Backend protocol&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;backend-protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines the HTTP protocol version of the backend. Note that HTTP/2 is only supported if HTX is enabled.
A case insensitive match is used, so either &lt;code&gt;h1&lt;/code&gt; or &lt;code&gt;H1&lt;/code&gt; configures HTTP/1 protocol. A non SSL/TLS
configuration does not overrides &lt;a href=&#34;#secure-backend&#34;&gt;secure-backends&lt;/a&gt;, so &lt;code&gt;h1&lt;/code&gt; and secure-backends &lt;code&gt;true&lt;/code&gt;
will still configures SSL/TLS.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;h1&lt;/code&gt;: the default value, configures HTTP/1 protocol. &lt;code&gt;http&lt;/code&gt; is an alias to &lt;code&gt;h1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;h1-ssl&lt;/code&gt;: configures HTTP/1 over SSL/TLS. &lt;code&gt;https&lt;/code&gt; is an alias to &lt;code&gt;h1-ssl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;h2&lt;/code&gt;: configures HTTP/2 protocol. &lt;code&gt;grpc&lt;/code&gt; is an alias to &lt;code&gt;h2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;h2-ssl&lt;/code&gt;: configures HTTP/2 over SSL/TLS. &lt;code&gt;grpcs&lt;/code&gt; is an alias to &lt;code&gt;h2-ssl&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#use-htx&#34;&gt;use-htx&lt;/a&gt; configuration key to enable HTTP/2 backends.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#secure-backend&#34;&gt;secure-backend&lt;/a&gt; configuration keys to configure optional client certificate and certificate authority bundle of SSL/TLS connections.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-proto&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-proto&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;backend-server-naming&#34;&gt;Backend server naming&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;backend-server-naming&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sequence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.8.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures how to name backend servers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sequence&lt;/code&gt;: Names backend servers with a prefixed number sequence: &lt;code&gt;srv001&lt;/code&gt;, &lt;code&gt;srv002&lt;/code&gt;, and so on. This is the default configuration and the preferred option if dynamic udpate is used. &lt;code&gt;seq&lt;/code&gt; is an alias to &lt;code&gt;sequence&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pod&lt;/code&gt;: Uses the k8s pod name as the backend server name. This option doesn&amp;rsquo;t work on backends whose &lt;a href=&#34;#service-upstream&#34;&gt;&lt;code&gt;service-upstream&lt;/code&gt;&lt;/a&gt; is &lt;code&gt;true&lt;/code&gt;, falling back to &lt;code&gt;sequence&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip&lt;/code&gt;: Uses target&amp;rsquo;s &lt;code&gt;&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;&lt;/code&gt; as the server name.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
HAProxy Ingress won&amp;rsquo;t refuse to change the default naming if dynamic update is &lt;code&gt;true&lt;/code&gt;, this would however lead to undesired behaviour: empty slots would still be named as sequences, old-named backend servers will dynamically receive new workloads with new pod names or IP numbers which do not relate with the name anymore, making the naming useless, if not wrong. If you have &lt;a href=&#34;#affinity&#34;&gt;cookie affinity&lt;/a&gt; enabled, dynamic updating can cause the cookie values to get out of sync with the servers. This can be avoided by using &lt;code&gt;session-cookie-preserve&lt;/code&gt; with a value of &lt;code&gt;true&lt;/code&gt;.
&lt;/div&gt;


&lt;hr /&gt;

&lt;h2 id=&#34;backend-server-id&#34;&gt;Backend server ID&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;assign-backend-server-id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.13&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;When &lt;code&gt;true&lt;/code&gt;, each backend server will receive an &lt;code&gt;id&lt;/code&gt; in HAProxy config based on the Kubernetes UID of the pod backing it. When using a hash-based &lt;a href=&#34;#balance-algorithm&#34;&gt;&lt;code&gt;balance-algorithm&lt;/code&gt;&lt;/a&gt; (for example &lt;code&gt;uri&lt;/code&gt; or &lt;code&gt;source&lt;/code&gt;) together with consistent hashing, this will maintain the stability of assignments when pods are added or removed — that is, a given URI component or source IP will mostly keep hashing to the same server. When this seetting is &lt;code&gt;false&lt;/code&gt;, an addition or deletion in the server list may disturb the hash assignments of some or all of the remaining servers.&lt;/p&gt;

&lt;p&gt;Server IDs can&amp;rsquo;t dynamically updated, so if this option is enabled, adding or removing a server will cause a reload even when &lt;a href=&#34;#dynamic-scaling&#34;&gt;&lt;code&gt;dynamic-scaling&lt;/code&gt;&lt;/a&gt; is true.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;balance-algorithm&#34;&gt;Balance algorithm&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;balance-algorithm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;roundrobin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines a valid HAProxy load balancing algorithm. The default value is &lt;code&gt;roundrobin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-balance&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-balance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;bind&#34;&gt;Bind&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-fronting-proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-http&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-https&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures listening IP and port for HTTP/s incoming requests. These
configuration keys have backward compatibility with &lt;a href=&#34;#bind-ip-addr&#34;&gt;Bind IP addr&lt;/a&gt;,
&lt;a href=&#34;#bind-port&#34;&gt;Bind port&lt;/a&gt; and &lt;a href=&#34;#fronting-proxy-port&#34;&gt;Fronting proxy&lt;/a&gt; keys.
The bind configuration keys in this section have precedente if declared.&lt;/p&gt;

&lt;p&gt;Any HAProxy supported option can be used, this will be copied verbatim to the
bind keyword. See HAProxy
&lt;a href=&#34;#https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind&#34;&gt;bind keyword doc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Configuration examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bind-http: &amp;quot;:::80&amp;quot;&lt;/code&gt; and &lt;code&gt;bind-https: &amp;quot;:::443&amp;quot;&lt;/code&gt;: Listen all IPv6 addresses&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-http: &amp;quot;:80,:::80&amp;quot;&lt;/code&gt; and &lt;code&gt;bind-https:  &amp;quot;:443,:::443&amp;quot;&lt;/code&gt;: Listen all IPv4 and IPv6 addresses&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-https: &amp;quot;:443,:8443&amp;quot;&lt;/code&gt;: accept https connections on &lt;code&gt;443&lt;/code&gt; and also &lt;code&gt;8443&lt;/code&gt; port numbers&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
&lt;code&gt;bind-fronting-proxy&lt;/code&gt; and &lt;code&gt;bind-http&lt;/code&gt; can share the same port number, provided
that the whole configuration key match, not only the port number.
See &lt;a href=&#34;#fronting-proxy-port&#34;&gt;Fronting proxy&lt;/a&gt; doc.
&lt;/div&gt;




&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
Special care should be taken on port number overlap, nether haproxy itself nor
haproxy-ingress will warn if the same port number is used in more than one
configuration key.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bind-ip-addr&#34;&gt;Bind IP addr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bind-port&#34;&gt;Bind port&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;bind-ip-addr&#34;&gt;Bind IP addr&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-ip-addr-healthz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-ip-addr-http&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-ip-addr-prometheus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-ip-addr-stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bind-ip-addr-tcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define listening IPv4/IPv6 address on public HAProxy frontends. Since v0.10 the default
value changed from &lt;code&gt;*&lt;/code&gt; to an empty string, which haproxy interprets in the same way and
binds on all IPv4 address.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bind-ip-addr-tcp&lt;/code&gt;: IP address of all ConfigMap based TCP services declared on &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#tcp-services-configmap&#34;&gt;&lt;code&gt;tcp-services-configmap&lt;/code&gt;&lt;/a&gt; command-line option.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-ip-addr-healthz&lt;/code&gt;: IP address of the health check URL.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-ip-addr-http&lt;/code&gt;: IP address of all HTTP/s frontends, port &lt;code&gt;:80&lt;/code&gt; and &lt;code&gt;:443&lt;/code&gt;, and also &lt;a href=&#34;#fronting-proxy-port&#34;&gt;&lt;code&gt;fronting-proxy-port&lt;/code&gt;&lt;/a&gt; if declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-ip-addr-prometheus&lt;/code&gt;: IP address of the haproxy&amp;rsquo;s internal Prometheus exporter.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind-ip-addr-stats&lt;/code&gt;: IP address of the statistics page. See also &lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-port&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bind&#34;&gt;Bind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bind-port&#34;&gt;Bind port&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;bind-port&#34;&gt;Bind port&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;healthz-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10253&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;https-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;443&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;prometheus-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;healthz-port&lt;/code&gt;: Define the port number HAProxy should listen to in order to answer for health checking requests. Use &lt;code&gt;/healthz&lt;/code&gt; as the request path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http-port&lt;/code&gt;: Define the port number of unencripted HTTP connections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https-port&lt;/code&gt;: Define the port number of encripted HTTPS connections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prometheus-port&lt;/code&gt;: Define the port number of the haproxy&amp;rsquo;s internal Prometheus exporter. Defaults to not create the listener. A listener without being scraped does not use system resources, except for the listening port. The internal exporter supports scope filter as a query string, eg &lt;code&gt;/metrics?scope=frontend&amp;amp;scope=backend&lt;/code&gt; will only export frontends and backends. See the full description in the &lt;a href=&#34;https://git.haproxy.org/?p=haproxy-2.0.git;a=blob;f=contrib/prometheus-exporter/README;hb=HEAD&#34;&gt;HAProxy&amp;rsquo;s Prometheus exporter doc&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
The internal Prometheus exporter runs concurrently with request processing, and it is
about 5x slower and 20x more verbose than the CSV exporter. See the haproxy&amp;rsquo;s exporter
&lt;a href=&#34;https://github.com/haproxy/haproxy/blob/v2.0.0/contrib/prometheus-exporter/README#L44&#34;&gt;doc&lt;/a&gt;.
Consider use Prometheus&amp;rsquo; &lt;a href=&#34;https://github.com/prometheus/haproxy_exporter&#34;&gt;haproxy_exporter&lt;/a&gt;
on very large clusters - Prometheus&amp;rsquo; implementation reads the CSV from the stats page and
converts to the Prometheus syntax outside the haproxy process. On the other side the internal
exporter supports scope filtering, which should make at least the processing time between csv
and prometheus exporter very close if servers are filtered out. Make your own tests before
choosing between one or the other.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bind&#34;&gt;Bind&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-monitor-uri&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-monitor-uri&lt;/a&gt; (&lt;code&gt;healthz-port&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.haproxy.org/?p=haproxy-2.0.git;a=blob;f=contrib/prometheus-exporter/README;hb=HEAD&#34;&gt;https://git.haproxy.org/?p=haproxy-2.0.git;a=blob;f=contrib/prometheus-exporter/README;hb=HEAD&lt;/a&gt; (&lt;code&gt;prometheus-port&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;blue-green&#34;&gt;Blue-green&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blue-green-balance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blue-green-cookie&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blue-green-header&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blue-green-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure backend server groups based on the weight of the group - blue/green
balance - or a group selection based on http header or cookie value - blue/green selector.&lt;/p&gt;

&lt;p&gt;Both blue/green configurations can be used together: if the http header or cookie isn&amp;rsquo;t provided
or doesn&amp;rsquo;t match a group, the blue/green balance will be used.&lt;/p&gt;

&lt;p&gt;Blue/green reads endpoint weight from the pod lister. However the &lt;code&gt;--disable-pod-list&lt;/code&gt;
command-line option can be safely used to save some memory on clusters with a huge amount of
pods. If pod list is disabled, pods are read straight from the k8s api, only when needed,
without changing blue/green behavior.&lt;/p&gt;

&lt;p&gt;See below the description of the two blue/green configuration options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blue/green balance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configures weight of a blue/green deployment. The annotation accepts a comma separated list of label
name/value pair and a numeric weight. Concatenate label name, label value and weight with an equal
sign, without spaces. The label name/value pair will be used to match corresponding pods or deploys.
There is no limit to the number of label/weight balance configurations.&lt;/p&gt;

&lt;p&gt;The endpoints of a single backend are selected using service selectors, which also uses labels.
Because of that, in order to use blue/green deployment, the deployment, daemon set or replication
controller template should have at least two label name/value pairs - one that matches the service
selector and another that matches the blue/green selector.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blue-green-balance&lt;/code&gt;: comma separated list of labels and weights&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blue-green-deploy&lt;/code&gt;: deprecated on v0.7, this is an alias to &lt;code&gt;blue-green-balance&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blue-green-mode&lt;/code&gt;: defaults to &lt;code&gt;deploy&lt;/code&gt; on v0.7, defines how to apply the weights, might be &lt;code&gt;pod&lt;/code&gt; or &lt;code&gt;deploy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following configuration &lt;code&gt;group=blue=1,group=green=4&lt;/code&gt; will redirect 20% of the load to the
&lt;code&gt;group=blue&lt;/code&gt; group and 80% of the load to &lt;code&gt;group=green&lt;/code&gt; group.&lt;/p&gt;

&lt;p&gt;Applying the weights depends on the blue/green mode. v0.6 has only &lt;code&gt;pod&lt;/code&gt; mode which means that
every single pod receives the same weight as configured on blue/green balance. This means that
a balance configuration with 50% to each group will redirect twice as much requests to a backend
that has the double of replicas. v0.7 has also &lt;code&gt;deploy&lt;/code&gt; mode which rebalance the weights based
on the number of replicas of each deployment.&lt;/p&gt;

&lt;p&gt;In short, regarding blue/green mode: use &lt;code&gt;pod&lt;/code&gt; if you want to redirect more requests to a
deployment updating the number of replicas; use &lt;code&gt;deploy&lt;/code&gt; if you want to control the load
of each side updating the blue/green balance annotation.&lt;/p&gt;

&lt;p&gt;Value of &lt;code&gt;0&lt;/code&gt; (zero) can also be used as weight. This will let the endpoint configured in the
backend accepting persistent connections - see &lt;a href=&#34;#affinity&#34;&gt;affinity&lt;/a&gt; - but will not participate
in the load balancing. The maximum weight value is &lt;code&gt;256&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blue/green selector&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configures header or cookie name and also a pod label name used to tag the group of backend servers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blue-green-cookie&lt;/code&gt;: the &lt;code&gt;CookieName:LabelName&lt;/code&gt; pair&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blue-green-header&lt;/code&gt;: the &lt;code&gt;HeaderName:LabelName&lt;/code&gt; pair&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;CookieName&lt;/code&gt; or &lt;code&gt;HeaderName&lt;/code&gt; is the name of the http cookie or header used in the request to match
a group name. The &lt;code&gt;LabelName&lt;/code&gt; is the name of the pod label used to read the group name of the backend
server.&lt;/p&gt;

&lt;p&gt;The following configuration &lt;code&gt;X-Server:group&lt;/code&gt; on &lt;code&gt;blue-green-header&lt;/code&gt; configures HAProxy to try to match
a backend server based on the value of its label &lt;code&gt;group&lt;/code&gt;. A request with header &lt;code&gt;X-Server: green&lt;/code&gt; will
match a pod labeled &lt;code&gt;group=green&lt;/code&gt;. Cookie configuration follows the same rules.&lt;/p&gt;

&lt;p&gt;The name of the header and the label follow the k8s label naming convention: must consist of
alphanumeric characters, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;_&lt;/code&gt; or &lt;code&gt;.&lt;/code&gt;, and must start and end with an alphanumeric character.&lt;/p&gt;

&lt;p&gt;Both cookie and header based configurations can be used together in the same backend (k8s service),
provided that the label name is the same. If the request uses the configured header and cookie, the
header will take precedence, and the cookie would be used if the header value provided doesn&amp;rsquo;t match
a healthy backend server.&lt;/p&gt;

&lt;p&gt;Note that blue/green selector should be used only on controlled testing scenarios because it
doesn&amp;rsquo;t provide a proper load balancing: the first healthy backend server that match header or
cookie configuration will be used despite if a proper load balance algorithm would choose another
one. This can be changed in the future. Blue/green balance doesn&amp;rsquo;t have this limitation and properly
uses the chosen load balance algorithm.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/examples/blue-green/&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#disable-pod-list&#34;&gt;disable-pod-list&lt;/a&gt; command-line option doc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-weight&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-weight&lt;/a&gt; (&lt;code&gt;weight&lt;/code&gt; based balance)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-use-server&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-use-server&lt;/a&gt; (&lt;code&gt;use-server&lt;/code&gt; based selector)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;configuration-snippet&#34;&gt;Configuration snippet&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-defaults&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-frontend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-sections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-tcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config-tcp-service&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TCP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Add HAProxy configuration snippet to the configuration file. Use multiline content
to add more than one line of configuration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;config-backend&lt;/code&gt;: Adds a configuration snippet to a HAProxy backend section.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-defaults&lt;/code&gt;: Adds a configuration snippet to the end of the HAProxy defaults section.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-frontend&lt;/code&gt;: Adds a configuration snippet to the HTTP and HTTPS frontend sections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-global&lt;/code&gt;: Adds a configuration snippet to the end of the HAProxy global section.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-proxy&lt;/code&gt;: Adds a configuration snippet to any HAProxy proxy - listen, frontend or backend. It accepts a multi section configuration, where the name of the section is the name of a HAProxy proxy without the listen/frontend/backend prefix. A section whose proxy is not found is ignored. The content of each section should be indented, the first line without indentation is the start of a new section which will configure another proxy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-sections&lt;/code&gt;: Allows to declare new HAProxy sections. The configuration is used verbatim, without any indentation or validation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-tcp&lt;/code&gt;: Adds a configuration snippet to the ConfigMap based TCP sections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-tcp-service&lt;/code&gt;: Adds a configuration snippet to a TCP service section.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples - ConfigMap:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-global&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      tune.bufsize 32768&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-defaults&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      option redispatch&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-tcp&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      tcp-request content reject if !{ src 10.0.0.0/8 }&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-proxy&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      _tcp_default_postgresql_5432&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;tcp-request&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;content&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;reject&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;if&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;!{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;src&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;10.0.0.0&lt;/span&gt;/&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;_front__tls&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;tcp-request&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;content&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;reject&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;if&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;!{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;src&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;10.0.0.0&lt;/span&gt;/&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;req.ssl_sni&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-m&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;reg&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;^intra\..*&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-sections&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      cache icons&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;total-max-size&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;max-age&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;240&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;ring&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;myring&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;format&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;rfc3164&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;maxlen&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1200&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;size&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;32764&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;timeout&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;connect&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;5s&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;timeout&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;server&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;10s&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;server&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;syslogsrv&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;127.0.0.1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;6514&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;log-proto&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;octet-count&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;config-frontend&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;      capture request header X-User-Id len 32&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Annotations:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;annotations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;haproxy-ingress.github.io/config-backend&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;        acl bar-url path /bar&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;http-request&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;deny&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;if&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;bar-url&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;http-request&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;set-var(txn.path)&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;path&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;http-request&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;cache-use&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;icons&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;if&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;var(txn.path)&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-m&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;end&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;.ico&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;http-response&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;cache-store&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;icons&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;if&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;var(txn.path)&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;-m&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;end&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;.ico&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;annotations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;haproxy-ingress.github.io/config-tcp-service&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;        timeout client 1m&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;timeout&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;connect&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;15s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;h2 id=&#34;connection&#34;&gt;Connection&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max-connections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxconn-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxqueue-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configuration of connection limits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;max-connections&lt;/code&gt;: Define the maximum concurrent connections on all proxies. Defaults to &lt;code&gt;2000&lt;/code&gt; connections, which is also the HAProxy default configuration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxconn-server&lt;/code&gt;: Defines the maximum concurrent connections each server of a backend should receive. If not specified or a value lesser than or equal zero is used, an unlimited number of connections will be allowed. When the limit is reached, new connections will wait on a queue.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxqueue-server&lt;/code&gt;: Defines the maximum number of connections should wait in the queue of a server. When this number is reached, new requests will be redispached to another server, breaking sticky session if configured. The queue will be unlimited if the annotation is not specified or a value lesser than or equal to zero is used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.2-maxconn&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.2-maxconn&lt;/a&gt; (&lt;code&gt;max-connections&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-maxconn&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-maxconn&lt;/a&gt; (&lt;code&gt;maxconn-server&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-maxqueue&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-maxqueue&lt;/a&gt; (&lt;code&gt;maxqueue-server&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;cors&#34;&gt;CORS&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-allow-credentials&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-allow-headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;see below&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-allow-methods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;see below&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-allow-origin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-enable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-expose-headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cors-max-age&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;86400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Add CORS headers on OPTIONS http command (preflight) and reponses.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cors-enable&lt;/code&gt;: Enable CORS if defined as &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-allow-origin&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; header which defines the URL that may access the resource. Defaults to &lt;code&gt;*&lt;/code&gt;. This option accepts a comma-separated list of origins, the response will be dynamically built based on the &lt;code&gt;Origin&lt;/code&gt; request header. If &lt;code&gt;Origin&lt;/code&gt; belogs to the list, its content will be sent back to the client in the &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; header, otherwise the first item of the list will be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-allow-methods&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Allow-Methods&lt;/code&gt; header which defines the allowed methods. Default value is &lt;code&gt;GET, PUT, POST, DELETE, PATCH, OPTIONS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-allow-headers&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Allow-Headers&lt;/code&gt; header which defines the allowed headers. Default value is &lt;code&gt;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-allow-credentials&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Allow-Credentials&lt;/code&gt; header which defines whether or not credentials (cookies, authorization headers or client certificates) should be exposed. Defaults to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-max-age&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Max-Age&lt;/code&gt; header which defines the time in seconds the result should be cached. Defaults to &lt;code&gt;86400&lt;/code&gt; (1 day).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cors-expose-headers&lt;/code&gt;: Optional, configures &lt;code&gt;Access-Control-Expose-Headers&lt;/code&gt; header which defines what headers are allowed to be passed through to the CORS application. Defaults to not add the header.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS&#34;&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;cpu-map&#34;&gt;CPU map&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cpu-map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-cpu-map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define how processes/threads map to CPUs. The default value is generated based
on &lt;a href=&#34;#nbthread&#34;&gt;nbthread&lt;/a&gt; and &lt;a href=&#34;#nbproc&#34;&gt;nbproc&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cpu-map&lt;/code&gt;: Custom override specifying the cpu mapping behaviour in the format described &lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&#34;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use-cpu-map&lt;/code&gt;: Set to &lt;code&gt;false&lt;/code&gt; to prevent any cpu mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nbthread&#34;&gt;nbthread&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nbproc&#34;&gt;nbproc&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;cross-namespace&#34;&gt;Cross Namespace&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cross-namespace-secrets-ca&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cross-namespace-secrets-crt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cross-namespace-secrets-passwd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cross-namespace-services&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines if resources declared on a namespace can read resources declared on another namespace. Supported values are &lt;code&gt;allow&lt;/code&gt; or &lt;code&gt;deny&lt;/code&gt;. The default configuration denies access from all cross namespace access.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cross-namespace-secrets-ca&lt;/code&gt;: Allows or denies cross namespace reading of CA bundles and CRL files, used by &lt;a href=&#34;#auth-tls&#34;&gt;&lt;code&gt;auth-tls-secret&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-verify-ca-secret&lt;/code&gt;&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cross-namespace-secrets-crt&lt;/code&gt;: Allows or denies cross namespace reading of x509 certificates and private keys, used by gateway&amp;rsquo;s, httpRoute&amp;rsquo;s and ingress&amp;rsquo; tls attribute, and also &lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-crt-secret&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cross-namespace-secrets-passwd&lt;/code&gt;: Allows or denies cross namespace reading of password files, used by &lt;a href=&#34;#auth-basic&#34;&gt;&lt;code&gt;auth-secret&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cross-namespace-services&lt;/code&gt;: Allows or denies cross namespace reading of Kubernetes Service resources, used by &lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-url&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#allow-cross-namespace&#34;&gt;&lt;code&gt;--allow-cross-namespace&lt;/code&gt;&lt;/a&gt; command-line option, if declared, overrides all the secret related configuration keys.
&lt;/div&gt;


&lt;hr /&gt;

&lt;h2 id=&#34;default-redirect&#34;&gt;Default Redirect&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;default-backend-redirect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;default-backend-redirect-code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define a redirect location of the HAProxy for unknown resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;default-backend-redirect&lt;/code&gt;: Defines a location in which Ingress should redirect
an user if the incoming request doesn&amp;rsquo;t match any hostname, or the requested path
doesn&amp;rsquo;t match any location within the desired hostname. An internal
404 error page is used if not declared and also if &lt;code&gt;default-backend-service&lt;/code&gt; was
not configured on command line.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;code&gt;default-backend-redirect-code&lt;/code&gt;: Defines the return code to be used when redirecting
a user. Defaults to 302 (Moved Temporarily)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;dns-resolvers&#34;&gt;DNS resolvers&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-accepted-payload-size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-cluster-domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cluster.local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-hold-obsolete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-hold-valid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-resolvers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dns-timeout-retry&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-resolver&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure dynamic backend server update using DNS service discovery.&lt;/p&gt;

&lt;p&gt;The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dns-resolvers&lt;/code&gt;: Multiline list of DNS resolvers in &lt;code&gt;resolvername=ip:port&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dns-accepted-payload-size&lt;/code&gt;: Maximum payload size announced to the name servers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dns-timeout-retry&lt;/code&gt;: Time between two consecutive queries when no valid response was received, defaults to &lt;code&gt;1s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dns-hold-valid&lt;/code&gt;: Time a resolution is considered valid. Keep in sync with DNS cache timeout. Defaults to &lt;code&gt;1s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dns-hold-obsolete&lt;/code&gt;: Time to keep valid a missing IP from a new DNS query, defaults to &lt;code&gt;0s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dns-cluster-domain&lt;/code&gt;: K8s cluster domain, defaults to &lt;code&gt;cluster.local&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use-resolver&lt;/code&gt;: Name of the resolver that the backend should use&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Important advices&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use resolver with &lt;strong&gt;headless&lt;/strong&gt; services, see &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/#headless-services&#34;&gt;k8s doc&lt;/a&gt;, otherwise HAProxy will reference the service IP instead of the endpoints.&lt;/li&gt;
&lt;li&gt;Beware of DNS cache, eg kube-dns has &lt;code&gt;--max-ttl&lt;/code&gt; and &lt;code&gt;--max-cache-ttl&lt;/code&gt; to change its default cache of &lt;code&gt;30s&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/tree/master/examples/dns-service-discovery&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.3.2&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-resolvers&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-resolvers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/#headless-services&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/service/#headless-services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;drain-support&#34;&gt;Drain support&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;drain-support&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;drain-support-redispatch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Set &lt;code&gt;drain-support&lt;/code&gt; to true if you wish to use HAProxy&amp;rsquo;s drain support for pods that are NotReady
(e.g., failing a k8s readiness check) or are in the process of terminating. This option only makes
sense with cookie affinity configured as it allows persistent traffic to be directed to pods that
are in a not ready or terminating state.&lt;/p&gt;

&lt;p&gt;By default, sessions will be redispatched on a failed upstream connection once the target pod is terminated.
You can control this behavior by setting &lt;code&gt;drain-support-redispatch&lt;/code&gt; flag to &lt;code&gt;false&lt;/code&gt; to instead return a 503 failure.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#disable-pod-list&#34;&gt;disable-pod-list&lt;/a&gt; command-line option doc.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;dynamic-scaling&#34;&gt;Dynamic scaling&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;backend-server-slots-increment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dynamic-scaling&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;slots-min-free&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The &lt;code&gt;dynamic-scaling&lt;/code&gt; option defines if backend updates should always be made starting
a new HAProxy instance that will read the new config file (&lt;code&gt;false&lt;/code&gt;), or updating the
running HAProxy via a Unix socket (&lt;code&gt;true&lt;/code&gt;) whenever possible. Despite the configuration,
the config files will stay in sync with in memory config. The default value was &lt;code&gt;false&lt;/code&gt;
up to v0.7 if not declared, changed to &lt;code&gt;true&lt;/code&gt; since v0.8.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dynamic-scaling&lt;/code&gt; is ignored if the backend uses &lt;a href=&#34;#dns-resolvers&#34;&gt;DNS resolver&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;true&lt;/code&gt; HAProxy Ingress will create at least &lt;code&gt;backend-server-slots-increment&lt;/code&gt;
servers on each backend and update them via a Unix socket without reloading HAProxy.
Unused servers will stay in a disabled state. If the change cannot be made via socket,
a new HAProxy instance will be started.&lt;/p&gt;

&lt;p&gt;Starting on v0.8, a new ConfigMap option &lt;code&gt;slots-min-free&lt;/code&gt; can be used to configure the
minimum number of free/empty servers per backend. If HAProxy need to be restarted and
an backend has less than &lt;code&gt;slots-min-free&lt;/code&gt; available servers, another
&lt;code&gt;backend-server-slots-increment&lt;/code&gt; new empty servers would be created.&lt;/p&gt;

&lt;p&gt;Starting on v0.6, &lt;code&gt;dynamic-scaling&lt;/code&gt; config will only force a reloading of HAProxy if
the number of servers on a backend need to be increased. Before v0.6 a reload will
also happen when the number of servers could be reduced.&lt;/p&gt;

&lt;p&gt;The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dynamic-scaling&lt;/code&gt;: Define if dynamic scaling should be used whenever possible&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backend-server-slots-increment&lt;/code&gt;: Configures the minimum number of servers, the size of the increment when growing and the size of the decrement when shrinking of each HAProxy backend&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slots-min-free&lt;/code&gt;: Configures the minimum number of empty servers a backend should have on every HAProxy restarts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/management.html#9.3&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/management.html#9.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;external&#34;&gt;External&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines features that can be found in the external haproxy deployment, if an
external deployment is used. These options have no effect if using the embedded
haproxy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;external-has-lua&lt;/code&gt;: Define as true if the external haproxy has Lua libraries
installed in the operating system. Currently &lt;a href=&#34;#auth-external&#34;&gt;Auth External&lt;/a&gt;
and &lt;a href=&#34;#oauth&#34;&gt;OAuth&lt;/a&gt; need Lua json module installed (Alpine&amp;rsquo;s &lt;code&gt;lua-json4&lt;/code&gt;
package) and will not work if &lt;code&gt;external-has-lua&lt;/code&gt; is not enabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#auth-external&#34;&gt;Auth External&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#oauth&#34;&gt;OAuth&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#master-socket&#34;&gt;master-socket&lt;/a&gt; command-line option&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;forwardfor&#34;&gt;Forwardfor&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;forwardfor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define how the &lt;code&gt;X-Forwarded-For&lt;/code&gt; header should be handled by haproxy.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;add&lt;/code&gt;: haproxy should generate a &lt;code&gt;X-Forwarded-For&lt;/code&gt; header with the source IP
address. This is the default option and should be used on untrusted networks.
If the request has a &lt;code&gt;XFF&lt;/code&gt; header, its value is copied to
&lt;code&gt;X-Original-Forwarded-For&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update&lt;/code&gt;: Only on &lt;code&gt;v0.9&lt;/code&gt; and above. haproxy should preserve any &lt;code&gt;X-Forwarded-For&lt;/code&gt;
header, if provided, updating with the source IP address, which should be a
fronting TCP or HTTP proxy/load balancer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ignore&lt;/code&gt;: do nothing - only send the &lt;code&gt;X-Forwarded-For&lt;/code&gt; header if the client
provided one, without updating its content.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ifmissing&lt;/code&gt;: add &lt;code&gt;X-Forwarded-For&lt;/code&gt; header only if the incoming request
doesn&amp;rsquo;t provide one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-option%20forwardfor&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-option%20forwardfor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For&#34;&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;fronting-proxy-port&#34;&gt;Fronting proxy port&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fronting-proxy-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;https-to-http-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-forwarded-proto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.10&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;A port number to listen to http requests from a fronting proxy that does the ssl
offload, eg haproxy ingress behind a cloud load balancers that manages the TLS
certificates. &lt;code&gt;https-to-http-port&lt;/code&gt; is an alias to &lt;code&gt;fronting-proxy-port&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fronting-proxy-port&lt;/code&gt; and &lt;a href=&#34;#bind-port&#34;&gt;&lt;code&gt;http-port&lt;/code&gt;&lt;/a&gt; can share the same port number, see below
what changes in the behaviour.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;use-forwarded-proto&lt;/code&gt; defines if haproxy should use &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header to decide
how to handle requests made to &lt;code&gt;fronting-proxy-port&lt;/code&gt; port number.&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;use-forwarded-proto&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;, the request takes the &lt;code&gt;https&lt;/code&gt; route and is handled as if
&lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header is &lt;code&gt;https&lt;/code&gt;, see below. The actual header content is ignored by
haproxy and forwarded to the backend if provided.&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;use-forwarded-proto&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;, the default value, requests made to &lt;code&gt;fronting-proxy-port&lt;/code&gt;
port number evaluate the &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header to decide how to handle the request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header is &lt;code&gt;https&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;HAProxy will handle the request just like the ssl-offload was made by HAProxy itself - HSTS header is provided if configured and
&lt;code&gt;X-SSL-*&lt;/code&gt; headers won&amp;rsquo;t be changed or removed if provided.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header is &lt;code&gt;http&lt;/code&gt; or any other value except &lt;code&gt;https&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;HAProxy will redirect scheme to https&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; header is missing:

&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;fronting-proxy-port&lt;/code&gt; has its own port &amp;mdash; HAProxy will redirect scheme to https&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;fronting-proxy-port&lt;/code&gt; shares the HTTP port &amp;mdash; the request will be handled as plain http, being redirected to https only if &lt;code&gt;ssl-redirect&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;, just like if &lt;code&gt;fronting-proxy-port&lt;/code&gt; wasn&amp;rsquo;t configured.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning on v0.7 and older&lt;/h4&gt;
On v0.7 and older and only if the &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; is missing: the
connecting port number was used to define which socket received the request, so
the fronting proxy should connect to the same port number defined in
&lt;code&gt;https-to-http-port&lt;/code&gt;, eg cannot have any proxy like Kubernetes&amp;rsquo; &lt;code&gt;NodePort&lt;/code&gt;
between the load balancer and HAProxy which changes the connecting port number.
This limitation doesn&amp;rsquo;t exist on v0.8 or above.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bind&#34;&gt;Bind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bind-port&#34;&gt;Bind port&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;headers&#34;&gt;Headers&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures a list of HTTP header names and the value it should be configured with. More than one header can be configured using a multi-line configuration value. The name of the header and its value should be separated with a colon and/or any amount of spaces.&lt;/p&gt;

&lt;p&gt;The following variables can be used in the value:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%[namespace]&lt;/code&gt;: namespace of the ingress or service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%[service]&lt;/code&gt;: name of the service which received the request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configuration example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;annotations&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;haproxy-ingress.github.io/headers&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;|
&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;        x-path: /&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;host&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;%&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;service&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;.%&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;namespace&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;h2 id=&#34;health-check&#34;&gt;Health check&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-addr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-fall-count&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-interval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-rise-count&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health-check-uri&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Controls server health checks on a per-backend basis.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;health-check-uri&lt;/code&gt;: If specified, this changes the default TCP health into an HTTP health check.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;health-check-addr&lt;/code&gt;: Defines the address for health checks. If omitted, the server addr will be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;health-check-port&lt;/code&gt;: Defines the port for health checks. If omitted, the server port will be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;health-check-interval&lt;/code&gt;: Defines the interval between health checks. The default value &lt;code&gt;2s&lt;/code&gt; is used if omitted.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;health-check-rise-count&lt;/code&gt;: The number of successful health checks that must occur before a server is marked operational. If omitted, the default value is 2.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;health-check-fall-count&lt;/code&gt;: The number of failed health checks that must occur before a server is marked as dead. If omitted, the default value is 3.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backend-check-interval&lt;/code&gt;: Deprecated, use &lt;code&gt;health-check-interval&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-option%20httpchk&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4.2-option%20httpchk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-addr&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-addr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-port&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-inter&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-inter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-rise&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-rise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-fall&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-fall&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;hsts&#34;&gt;HSTS&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hsts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hsts-include-subdomains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hsts-max-age&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;15768000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hsts-preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure HSTS - HTTP Strict Transport Security. The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hsts&lt;/code&gt;: &lt;code&gt;true&lt;/code&gt; if HSTS response header should be added&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hsts-include-subdomains&lt;/code&gt;: &lt;code&gt;true&lt;/code&gt; if it should apply to subdomains as well&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hsts-max-age&lt;/code&gt;: time in seconds the browser should remember this configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hsts-preload&lt;/code&gt;: &lt;code&gt;true&lt;/code&gt; if the browser should include the domain to &lt;a href=&#34;https://hstspreload.org/&#34;&gt;HSTS preload list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security&#34;&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;initial-weight&#34;&gt;Initial weight&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;initial-weight&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures the weight value of each backend server - either the enabled and also the
disabled servers. The default value is &lt;code&gt;1&lt;/code&gt;. Changing this value has no effect on the
proportional value between each server of a single backend, thus this doesn&amp;rsquo;t change
the balance between the servers.&lt;/p&gt;

&lt;p&gt;Change the default value to a higher number, eg &lt;code&gt;100&lt;/code&gt;, if using with
&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check&lt;/code&gt;&lt;/a&gt; and the agent is used to change the weight of the server.&lt;/p&gt;

&lt;p&gt;Blue/green on &lt;code&gt;deploy&lt;/code&gt; mode also uses &lt;code&gt;initial-weight&lt;/code&gt; as its minimum weight value,
provided that the maximum is lesser than or equal &lt;code&gt;256&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#agent-check&#34;&gt;&lt;code&gt;agent-check&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-weight&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-weight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;limit&#34;&gt;Limit&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;limit-connections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;limit-rps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;limit-whitelist&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure rate limit and concurrent connections per client IP address in order to mitigate DDoS attack.
If several users are hidden behind the same IP (NAT or proxy), this configuration may have a negative
impact for them. Whitelist can be used to these IPs.&lt;/p&gt;

&lt;p&gt;The following annotations are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;limit-connections&lt;/code&gt;: Maximum number os concurrent connections per client IP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;limit-rps&lt;/code&gt;: Maximum number of connections per second of the same IP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;limit-whitelist&lt;/code&gt;: Comma separated list of CIDRs that should be removed from the rate limit and concurrent connections check&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;load-server-state&#34;&gt;Load server state&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;load-server-state&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define if HAProxy should save and reload it&amp;rsquo;s current state between server reloads, like
uptime of backends, qty of requests and so on.&lt;/p&gt;

&lt;p&gt;This is an experimental feature and has currently some issues if using with &lt;code&gt;dynamic-scaling&lt;/code&gt;:
an old state with disabled servers will disable them in the new configuration.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-server-state-file&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-server-state-file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-load-server-state-from-file&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-load-server-state-from-file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;log-format&#34;&gt;Log format&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auth-log-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http-log-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;https-log-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcp-log-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcp-service-log-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TCP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Customize the tcp, http or https log format using log format variables. Only used if
&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog-endpoint&lt;/code&gt;&lt;/a&gt; is also configured.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-log-format&lt;/code&gt;: log format of all auth external frontends. Use &lt;code&gt;default&lt;/code&gt; to configure default HTTP log format, defaults to not log.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http-log-format&lt;/code&gt;: log format of all HTTP proxies, defaults to HAProxy default HTTP log format.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https-log-format&lt;/code&gt;: log format of TCP proxy used to inspect SNI extention. Use &lt;code&gt;default&lt;/code&gt; to configure default TCP log format, defaults to not log.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tcp-log-format&lt;/code&gt;: log format of the ConfigMap based TCP proxies. Defaults to HAProxy default TCP log format. See also &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#tcp-services-configmap&#34;&gt;&lt;code&gt;--tcp-services-configmap&lt;/code&gt;&lt;/a&gt; command-line option.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tcp-service-log-format&lt;/code&gt;: log format of TCP frontends, configured via ingress resources and &lt;a href=&#34;#tcp-services&#34;&gt;&lt;code&gt;tcp-service-port&lt;/code&gt;&lt;/a&gt; configuration key. Defaults to HAProxy default TCP log format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#8.2.4&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#8.2.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#syslog&#34;&gt;&lt;code&gt;syslog&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#auth-external&#34;&gt;Auth External&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tcp-services&#34;&gt;TCP Services&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;master-worker&#34;&gt;Master-worker&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;master-exit-on-failure&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;worker-max-reloads&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures master-worker related options. These options are only used when an
external haproxy instance is configured.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;master-exit-on-failure&lt;/code&gt;: If &lt;code&gt;true&lt;/code&gt;, kill all the remaining workers and exit
from master in the case of an unexpected failure of a worker, eg a segfault.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;worker-max-reloads&lt;/code&gt;: Defines how many reloads a haproxy worker should
survive before receive a SIGTERM. The default value is &lt;code&gt;0&lt;/code&gt; which means
unlimited. This option limits the number of active workers and the haproxy&amp;rsquo;s
pod memory usage. Useful on workloads with long running connections, eg
websockets, and clusters that frequently changes and forces haproxy to reload.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/examples/external-haproxy/&#34;&gt;Example&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-master-worker&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-master-worker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#mworker-max-reloads&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#mworker-max-reloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#master-socket&#34;&gt;master-socket&lt;/a&gt; command-line option&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;modsecurity&#34;&gt;Modsecurity&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-endpoints&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-timeout-connect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-timeout-hello&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;100ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-timeout-idle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;30s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-timeout-processing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modsecurity-timeout-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure modsecurity agent. These options only have effect if &lt;code&gt;modsecurity-endpoints&lt;/code&gt;
is configured.&lt;/p&gt;

&lt;p&gt;Configure &lt;code&gt;modsecurity-endpoints&lt;/code&gt; with a comma-separated list of &lt;code&gt;IP:port&lt;/code&gt; of HAProxy
agents (SPOA) for ModSecurity. The default configuration expects the
&lt;code&gt;contrib/modsecurity&lt;/code&gt; implementation from HAProxy source code.&lt;/p&gt;

&lt;p&gt;Up to v0.7 all http requests will be parsed by the ModSecurity agent, even if the
ingress resource wasn&amp;rsquo;t configured to deny requests based on ModSecurity response.
Since v0.8 the spoe filter is configured on a per-backend basis.&lt;/p&gt;

&lt;p&gt;The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;modsecurity-endpoints&lt;/code&gt;: Comma separated list of ModSecurity agent endpoints.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modsecurity-timeout-connect&lt;/code&gt;: Defines the maximum time to wait for the connection to the agent be established. Configures the haproxy&amp;rsquo;s timeout connect. Defaults to &lt;code&gt;5s&lt;/code&gt; if not configured.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modsecurity-timeout-hello&lt;/code&gt;: Defines the maximum time to wait for the AGENT-HELLO frame from the agent. Default value is &lt;code&gt;100ms&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modsecurity-timeout-idle&lt;/code&gt;: Defines the maximum time to wait before close an idle connection. Default value is &lt;code&gt;30s&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modsecurity-timeout-processing&lt;/code&gt;: Defines the maximum time to wait for the whole ModSecurity processing. Default value is &lt;code&gt;1s&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modsecurity-timeout-server&lt;/code&gt;: Defines the maximum time to wait for an agent response. Configures the haproxy&amp;rsquo;s timeout server. Defaults to &lt;code&gt;5s&lt;/code&gt; if not configured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/examples/modsecurity/&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#waf&#34;&gt;&lt;code&gt;waf&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.haproxy.org/download/2.0/doc/SPOE.txt&#34;&gt;https://www.haproxy.org/download/2.0/doc/SPOE.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#9.3&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#9.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/modsecurity-spoa&#34;&gt;https://github.com/jcmoraisjr/modsecurity-spoa&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;nbproc&#34;&gt;Nbproc&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nbproc-ssl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
This option works only on v0.7 or below. Since v0.8 the only supported value is &lt;code&gt;0&lt;/code&gt; zero.
&lt;/div&gt;


&lt;p&gt;Define the number of dedicated HAProxy process to the SSL/TLS handshake and
offloading. The default value is 0 (zero) which means HAProxy should process all
the SSL/TLS offloading, as well as the header inspection and load balancing
within the same HAProxy process.&lt;/p&gt;

&lt;p&gt;The recommended value depends on how much CPU a single HAProxy process is
spending. Use 0 (zero) if the amount of processing has low CPU usage. This will
avoid a more complex topology and an inter-process communication. Use the number
of cores of a dedicated host minus 1 (one) to distribute the SSL/TLS offloading
process. Leave one core dedicated to header inspection and load balancing.&lt;/p&gt;

&lt;p&gt;If splitting HAProxy into two or more process and the number of threads is one,
&lt;code&gt;cpu-map&lt;/code&gt; is used to bind each process on its own CPU core.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#nbthread&#34;&gt;nbthread&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cpu-map&#34;&gt;cpu-map&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-nbproc&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-nbproc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind-process&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-bind-process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;nbthread&#34;&gt;Nbthread&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nbthread&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define the number of threads a single HAProxy process should use to all its
processing. If not declared, the number of threads will be adjusted to the
number of available CPUs on platforms that support CPU affinity.&lt;/p&gt;

&lt;p&gt;If using two or more threads, &lt;code&gt;cpu-map&lt;/code&gt; is used by default to bind each
thread on its own CPU core.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cpu-map&#34;&gt;cpu-map&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-nbthread&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-nbthread&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-cpu-map&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;oauth&#34;&gt;OAuth&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth-headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;X-Auth-Request-Email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth-uri-prefix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/oauth2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure OAuth2 via Bitly&amp;rsquo;s &lt;code&gt;oauth2_proxy&lt;/code&gt;. These options have less precedence if used with &lt;a href=&#34;#auth-external&#34;&gt;&lt;code&gt;auth-url&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;oauth&lt;/code&gt;: Defines the oauth implementation. The only supported option is &lt;code&gt;oauth2_proxy&lt;/code&gt; or its alias &lt;code&gt;oauth2-proxy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oauth-uri-prefix&lt;/code&gt;: Defines the URI prefix of the oauth service. The default value is &lt;code&gt;/oauth2&lt;/code&gt;. There should be a backend with this path in the ingress resource.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oauth-headers&lt;/code&gt;: Defines an optional comma-separated list of &lt;code&gt;&amp;lt;header&amp;gt;[:&amp;lt;source&amp;gt;]&lt;/code&gt; used to configure request headers to the upstream backend. The default value is &lt;code&gt;X-Auth-Request-Email&lt;/code&gt; which copies this HTTP header from oauth2-proxy service response to the backend service. An optional &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; can be provided with another HTTP header or an internal HAProxy variable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OAuth2 expects &lt;a href=&#34;https://github.com/oauth2-proxy/oauth2-proxy&#34;&gt;oauth2-proxy&lt;/a&gt;,
or any other compatible implementation running as a backend of the same domain that should be protected.
&lt;code&gt;oauth2-proxy&lt;/code&gt; has support to GitHub, Google, Facebook, OIDC and &lt;a href=&#34;https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/oauth_provider&#34;&gt;others&lt;/a&gt;.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
OAuth2 needs &lt;a href=&#34;#external&#34;&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/a&gt; enabled if running on an external haproxy deployment. The external haproxy needs Lua json module installed (Alpine&amp;rsquo;s &lt;code&gt;lua-json4&lt;/code&gt; package)
&lt;/div&gt;


&lt;p&gt;Since v0.13 these same options can be used with &lt;a href=&#34;#auth-external&#34;&gt;Auth External&lt;/a&gt; configuration keys. Change &lt;code&gt;&amp;lt;oauth2-proxy-service&amp;gt;&lt;/code&gt; below with the oauth2-proxy service name, and &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; to the hostname of the oauth2-proxy and the backend servers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-url: &amp;quot;svc://&amp;lt;oauth2-proxy-service&amp;gt;/oauth2/auth&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-signin: &amp;quot;https://&amp;lt;hostname&amp;gt;/oauth2/start?rd=%[path]&amp;quot;&lt;/code&gt; - the content is parsed by haproxy as a &lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#8.2.4&#34;&gt;log-format&lt;/a&gt; string and the result is copied verbatim to the &lt;code&gt;Location&lt;/code&gt; header of a HTTP 302 response. The &lt;code&gt;rd&lt;/code&gt; query field asks oauth2-proxy to preserve the path provided by the client.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-headers-succeed: &amp;quot;X-Auth-Request-Email&amp;quot;&lt;/code&gt; - copy the &lt;code&gt;X-Auth-Request-Email&lt;/code&gt; HTTP header with the user email from oauth2-proxy to the backend server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configure oauth2 on a distinct ingress, without the &lt;code&gt;auth-url&lt;/code&gt; annotation, otherwise it will endless loop in a HTTP 403 error.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#auth-external&#34;&gt;Auth External&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#external&#34;&gt;&lt;code&gt;external-has-lua&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/tree/master/examples/auth/oauth&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;path-type&#34;&gt;Path type&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;path-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;begin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;path-type-order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;exact,prefix,begin,regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines how the path of an incoming request should match a declared path in the ingress object.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;path-type&lt;/code&gt;: Configures the path type. Case insensitive, so &lt;code&gt;Begin&lt;/code&gt; and &lt;code&gt;begin&lt;/code&gt; configures the same path type option. The ingress spec has priority, this option will only be used if the &lt;code&gt;pathType&lt;/code&gt; attribute from the ingress spec is declared as &lt;code&gt;ImplementationSpecific&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;path-type-order&lt;/code&gt;: Defines a comma-separated list of the order that non overlapping paths should be matched, which means that &lt;code&gt;/dir/sub&lt;/code&gt; will always be checked before &lt;code&gt;/dir&lt;/code&gt; despite their type and the configured order. Mostly used to define when &lt;code&gt;regex&lt;/code&gt; path types should be checked for incoming requests, since HAProxy Ingress doesn&amp;rsquo;t calculate overlapping from regex paths. All path types must be provided. Case insensitive, use all path types in lowercase.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
Wildcard hostnames and alias-regex match incoming requests using the regex path type, even if the path itself has a distinct one. This happens because hostname and path are checked for a match in a single step. So, changing the precedence order of paths also changes the precedence order of hostnames. See also &lt;a href=&#34;#server-alias&#34;&gt;server-alias-regex&lt;/a&gt; and &lt;a href=&#34;#strict-host&#34;&gt;strict host&lt;/a&gt;.
&lt;/div&gt;


&lt;p&gt;Supported &lt;code&gt;path-type&lt;/code&gt; values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;begin&lt;/code&gt;: Case insensitive, matches the beginning of the path from the incoming request. This is the default value if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exact&lt;/code&gt;: Case sensitive, matches the whole path. Implements the &lt;code&gt;Exact&lt;/code&gt; path type from the ingress spec.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prefix&lt;/code&gt;: Case sensitive, matches a whole subdirectory from the incoming path. A declared &lt;code&gt;/app&lt;/code&gt; path matches &lt;code&gt;/app&lt;/code&gt; and &lt;code&gt;/app/1&lt;/code&gt; but does not match &lt;code&gt;/app1&lt;/code&gt;. Implements the &lt;code&gt;Prefix&lt;/code&gt; path type from the ingress spec.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regex&lt;/code&gt;: Case sensitive, matches the incoming path using POSIX extended regular expression. The regular expression has an implicit start &lt;code&gt;^&lt;/code&gt; and no ending &lt;code&gt;$&lt;/code&gt; boundary, so a declared &lt;code&gt;/app[0-9]+/?&lt;/code&gt; will match paths starting with this pattern. Add a trailing &lt;code&gt;$&lt;/code&gt; if an exact match is desired.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Request and match examples:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path type&lt;/th&gt;
&lt;th&gt;Request&lt;/th&gt;
&lt;th&gt;Match&lt;/th&gt;
&lt;th&gt;Do not match&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;begin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/ap&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;prefix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app[0-9]+&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app15/sub&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app25xx/sub&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/15&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app[0-9]+$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app15&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app15/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app[0-9]+/?&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app1&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app15/&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app25/sub&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/App15&lt;/code&gt; &lt;br/&gt; &lt;code&gt;/app/25sub&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;proxy-body-size&#34;&gt;Proxy body size&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;proxy-body-size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define the maximum number of bytes HAProxy will allow on the body of requests. Default is
to not check, which means requests of unlimited size. This limit can be changed per ingress
resource.&lt;/p&gt;

&lt;p&gt;Since 0.4 a suffix can be added to the size, so &lt;code&gt;10m&lt;/code&gt; means
&lt;code&gt;10 * 1024 * 1024&lt;/code&gt; bytes. Supported suffix are: &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt; and &lt;code&gt;g&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since 0.7 &lt;code&gt;unlimited&lt;/code&gt; can also be used to overwrite any global body size limit.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.6-req.body_size&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.6-req.body_size&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;proxy-protocol&#34;&gt;Proxy protocol&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;proxy-protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;no&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcp-service-proxy-protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TCP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-proxy-protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures PROXY protocol in frontends and backends.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;proxy-protocol&lt;/code&gt;: Define if the upstream backends support proxy protocol and what version of the protocol should be used. Supported values are &lt;code&gt;v1&lt;/code&gt;, &lt;code&gt;v2&lt;/code&gt;, &lt;code&gt;v2-ssl&lt;/code&gt;, &lt;code&gt;v2-ssl-cn&lt;/code&gt; or &lt;code&gt;no&lt;/code&gt;. The default behavior if not declared is that the protocol is not supported by the backends and should not be used.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use-proxy-protocol&lt;/code&gt;: Define if HTTP services are behind another proxy that uses the PROXY protocol. If &lt;code&gt;true&lt;/code&gt;, HTTP ports which defaults to &lt;code&gt;80&lt;/code&gt; and &lt;code&gt;443&lt;/code&gt; will expect the PROXY protocol, version 1 or 2. The stats endpoint (defaults to port &lt;code&gt;1936&lt;/code&gt;) has its own &lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;stats-proxy-protocol&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tcp-service-proxy-protocol&lt;/code&gt;: Define if the TCP service is behind another proxy that uses the PROXY protocol. Configures as &lt;code&gt;&amp;quot;true&amp;quot;&lt;/code&gt; if the proxy should expect requests using the PROXY protocol, version 1 or 2. The default value is &lt;code&gt;&amp;quot;false&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.haproxy.org/download/2.0/doc/proxy-protocol.txt&#34;&gt;https://www.haproxy.org/download/2.0/doc/proxy-protocol.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-accept-proxy&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-accept-proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2-ssl&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2-ssl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2-ssl-cn&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-send-proxy-v2-ssl-cn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;redirect&#34;&gt;Redirect&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redirect-from&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redirect-from-code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redirect-from-regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redirect-to&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redirect-to-code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures HTTP redirect. Redirect &lt;em&gt;from&lt;/em&gt; matches source hostnames that should be redirected
to the hostname declared in the ingess spec. Redirect &lt;em&gt;to&lt;/em&gt; uses the hostname declared in the
ingress spec as the matching source and redirects the request to the configured URL. See
examples below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;redirect-from&lt;/code&gt;: Defines a source domain using hostname-like syntax, so wildcard domains can also be used. The request is redirected to the configured hostname, preserving protocol, path and query string.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect-from-regex&lt;/code&gt;: Defines a POSIX extended regular expression used to match a source domain. The regex will be used verbatim, so add &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; if strict hostname is desired and escape &lt;code&gt;\.&lt;/code&gt; dots in order to strictly match them.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect-from-code&lt;/code&gt;: Which HTTP status code should be used in the redirect from. A &lt;code&gt;302&lt;/code&gt; response is used by default if not configured.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect-to&lt;/code&gt;: Defines the destination URL to redirect the incoming request. The declared hostname and path are used only to match the request, the backend will not be used and it&amp;rsquo;s only needed to be declared to satisfy ingress spec validation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect-to-code&lt;/code&gt;: Which HTTP status code should be used in the redirect to. A &lt;code&gt;302&lt;/code&gt; response is used by default if not configured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Using redirect-from&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following configuration redirects &lt;code&gt;app.local&lt;/code&gt; to &lt;code&gt;www.app.local&lt;/code&gt;, preserving protocol,
path and query string:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    haproxy-ingress.github.io/redirect-from: &amp;quot;app.local&amp;quot;
  name: app
spec:
  rules:
  - host: www.app.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app
            port:
              number: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The same source domain can be configured just once, and a target domain can be assigned
just once as well, which means that this configuration can only be used on ingress
resources that defines just one hostname. The redirect configuration has the lesser
precedence, so if a source domain is also configured as a hostname on an ingress spec,
or as an alias using annotation, the redirect will not happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using redirect-to&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following configuration redirects &lt;code&gt;app.local/...&lt;/code&gt; to &lt;code&gt;https://www.app.local/login&lt;/code&gt;,
without preserving protocol, path or query string:&lt;/p&gt;

&lt;p&gt;Note: &lt;code&gt;www.app.local&lt;/code&gt; should be configured on another ingress resource, and app service
below will not be used.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    haproxy-ingress.github.io/redirect-to: &amp;quot;https://www.app.local/login&amp;quot;
  name: app
spec:
  rules:
  - host: app.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app
            port:
              number: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#app-root&#34;&gt;&lt;code&gt;app-root&lt;/code&gt;&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;rewrite-target&#34;&gt;Rewrite target&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rewrite-target&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures how URI of the requests should be rewritten before send the request to the backend.
The following table shows some examples:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ingress path&lt;/th&gt;
&lt;th&gt;Request path&lt;/th&gt;
&lt;th&gt;Rewrite target&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc/x&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/x&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/y&lt;/td&gt;
&lt;td&gt;/y&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/y&lt;/td&gt;
&lt;td&gt;/y/&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/abc/x&lt;/td&gt;
&lt;td&gt;/y&lt;/td&gt;
&lt;td&gt;/y/x&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/abc&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;404&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;/abc/&lt;/td&gt;
&lt;td&gt;/abc/x&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;secure-backend&#34;&gt;Secure backend&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secure-backends&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secure-crt-secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secure-sni&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secure-verify-ca-secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secure-verify-hostname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure secure (TLS) connection to the backends.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;secure-backends&lt;/code&gt;: Define as true if the backend provide a TLS connection.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secure-crt-secret&lt;/code&gt;: Optional secret name of client certificate and key. This cert/key pair must be provided if the backend requests a client certificate. Expected secret keys are &lt;code&gt;tls.crt&lt;/code&gt; and &lt;code&gt;tls.key&lt;/code&gt;, the same used if secret is built with &lt;code&gt;kubectl create secret tls &amp;lt;name&amp;gt;&lt;/code&gt;. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can also be used, containing both certificate and private key in PEM format, eg &lt;code&gt;file:///dir/crt.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secure-sni&lt;/code&gt;: Optional hostname that should be used as the SNI TLS extension sent to the backend server. If &lt;code&gt;host&lt;/code&gt; is used as the content, the header Host from the incoming request is used as the SNI extension in the request to the backend. &lt;code&gt;sni&lt;/code&gt; can also be used, which will use the same SNI from the incoming request. Note that, although the header Host is always right, the incoming SNI might be wrong if a TLS connection that&amp;rsquo;s already opened is reused - this is a common practice on browsers connecting over http2. Any other value different of &lt;code&gt;host&lt;/code&gt; or &lt;code&gt;sni&lt;/code&gt; will be used verbatim and should be a valid domain. If &lt;code&gt;secure-verify-ca-secret&lt;/code&gt; is also provided, this hostname is also used to validate the server certificate names.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secure-verify-ca-secret&lt;/code&gt;: Optional but recommended secret name with certificate authority bundle used to validate server certificate, preventing man-in-the-middle attacks. Expected secret key is &lt;code&gt;ca.crt&lt;/code&gt;. Since v0.9, an optional &lt;code&gt;ca.crl&lt;/code&gt; key can also provide a CRL in PEM format for the server to verify against. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing the CA bundle in PEM format, and optionally followed by a comma and the filename with the crl, eg &lt;code&gt;file:///dir/ca.pem&lt;/code&gt; or &lt;code&gt;file:///dir/ca.pem,/dir/crl.pem&lt;/code&gt;. Configure either &lt;code&gt;secure-sni&lt;/code&gt; or &lt;code&gt;secure-verify-hostname&lt;/code&gt; to verify the certificate name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secure-verify-hostname&lt;/code&gt;: Optional hostname used to verify the name of the server certificate, without using the SNI TLS extension. This option can only be used if &lt;code&gt;secure-verify-ca-secret&lt;/code&gt; was provided, and only supports harcoded domains which is used verbatim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#backend-protocol&#34;&gt;Backend protocol&lt;/a&gt; configuration key.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-verify&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-verify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-verifyhost&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-verifyhost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-sni&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-sni&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;security&#34;&gt;Security&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;groupname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-chroot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-haproxy-user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Change security options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;username&lt;/code&gt; and &lt;code&gt;groupname&lt;/code&gt;: Changes the user and group names used to run haproxy as non root. The default value is an empty string, which means leave haproxy running as root. Note that even running as root, haproxy always drops its own privileges before start its event loop. Both options should be declared to the configuration take effect. Note that this configuration means &amp;ldquo;running haproxy as non root&amp;rdquo;, it&amp;rsquo;s only useful when the haproxy container starts as root.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use-chroot&lt;/code&gt;: If &lt;code&gt;true&lt;/code&gt;, configures haproxy to perform a &lt;code&gt;chroot()&lt;/code&gt; in the empty and non-writable directory &lt;code&gt;/var/empty&lt;/code&gt; during the startup process, just before it drops its own privileges. Only root can perform a &lt;code&gt;chroot()&lt;/code&gt;, so HAProxy Ingress container should start as UID &lt;code&gt;0&lt;/code&gt; if this option is configured as &lt;code&gt;true&lt;/code&gt;. See &lt;strong&gt;Using chroot()&lt;/strong&gt; section below.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use-haproxy-user&lt;/code&gt;: If &lt;code&gt;true&lt;/code&gt;, configures &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;groupname&lt;/code&gt; configuration keys as &lt;code&gt;haproxy&lt;/code&gt;. See &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;groupname&lt;/code&gt; above. Note that this user and group exists in the embedded haproxy, and should exist in the external haproxy if used. In the case of a conflict, &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;groupname&lt;/code&gt; declaration will have priority and &lt;code&gt;use-haproxy-user&lt;/code&gt; will be ignored. If &lt;code&gt;false&lt;/code&gt;, the default value, user and group names will not be changed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Starting as non root&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the default configuration HAProxy Ingress container starts as root. Since v0.9 it&amp;rsquo;s also possible to configure the container to start as &lt;code&gt;haproxy&lt;/code&gt; user, UID &lt;code&gt;1001&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If using the embedded haproxy, read the &lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/management.html#13&#34;&gt;Security considerations&lt;/a&gt; from HAProxy doc before change the starting user.&lt;/p&gt;

&lt;p&gt;If using an external haproxy, configures the pod&amp;rsquo;s securityContext (instead of the container&amp;rsquo;s one) which will make Kubernetes create the shared file system with write access, so the controller can create and update configuration, maps and certificate files.&lt;/p&gt;

&lt;p&gt;The starting user can be changed in the deployment or daemonset&amp;rsquo;s pod template using the following configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;...&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;template&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;spec&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;securityContext&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;runAsUser&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1001&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that ports below 1024 cannot be bound if the container starts as non-root.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using chroot()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beware of some chroot limitations:&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
&lt;p&gt;HAProxy does not have access to the file system after configure a &lt;code&gt;chroot()&lt;/code&gt;. Unix sockets located outside the chroot directory are used in the following conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At least one &lt;code&gt;ssl-passthrough&lt;/code&gt; is used, or &lt;code&gt;timeout-client&lt;/code&gt; is used as an Ingress annotation (&lt;code&gt;timeout-client&lt;/code&gt; as a configmap option is fine). Both configurations create a fronting TCP proxy inside haproxy, which uses an unix socket to communicate with the HTTP frontend.&lt;/li&gt;
&lt;li&gt;Internal ACME signer is used. HAProxy Ingress creates an internal server to answer the ACME challenge, and haproxy forwards the challenge requests to this server using an unix socket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So only enable &lt;code&gt;use-chroot&lt;/code&gt; if not using these features.&lt;/p&gt;

&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/management.html#13&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/management.html#13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-chroot&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-chroot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-uid&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-uid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-gid&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-gid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-unix-bind&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-unix-bind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;server-alias&#34;&gt;Server alias&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;server-alias&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;server-alias-regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure hostname alias. All annotations will be combined together with the host
attribute in the same ACL, and any of them might be used to match SNI extensions
(TLS) or Host HTTP header. The matching is case insensitive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;server-alias&lt;/code&gt;: Defines an alias with hostname-like syntax. On v0.6 and older, wildcard &lt;code&gt;*&lt;/code&gt; wasn&amp;rsquo;t converted to match a subdomain. Regular expression was also accepted but dots were escaped, making this alias less useful as a regex. Starting v0.7 the same hostname syntax is used, so &lt;code&gt;*.my.domain&lt;/code&gt; will match &lt;code&gt;app.my.domain&lt;/code&gt; but won&amp;rsquo;t match &lt;code&gt;sub.app.my.domain&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;server-alias-regex&lt;/code&gt;: Only in v0.7 and newer. Match hostname using a POSIX extended regular expression. The regex will be used verbatim, so add &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; if strict hostname is desired and escape &lt;code&gt;\.&lt;/code&gt; dots in order to strictly match them. Some HTTP clients add the port number in the Host header, so remember to add &lt;code&gt;(:[0-9]+)?$&lt;/code&gt; in the end of the regex if a dollar sign &lt;code&gt;$&lt;/code&gt; is being used to match the end of the string.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;service-upstream&#34;&gt;Service upstream&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;service-upstream&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines if the HAProxy backend/server endpoints should be configured with the
service VIP/IPVS. If &lt;code&gt;false&lt;/code&gt;, the default value, the endpoints will be used and
HAProxy will load balance the requests between them. If defined as &lt;code&gt;true&lt;/code&gt; the
service&amp;rsquo;s ClusterIP is used instead.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;source-address-intf&#34;&gt;Source Address Intf&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;source-address-intf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures a list of network interface names whose IPv4 address should be used as the source address for outgoing connections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source-address-intf&lt;/code&gt;: Comma separated list of network interface names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As the default behavior, HAProxy will leave the operating system choose the most apropriate address. However the same source address will be used, even if the network interface has more IP address or other interfaces can also reach the destination, leading to outgoing TCP port exaustion on deployments that needs more than 64k concurrent connections. Using more source IPs allows to bypass the maximum of 64k concurrent connections per instance.&lt;/p&gt;

&lt;p&gt;HAProxy Ingress will list all IPv4 from all provided interfaces, ignoring interfaces that cannot be found, does not have IPv4, or cannot list its IPs. The IP addresses will be distributed among all the servers/endpoints, where each distinct server will use an IP from the list as its source address for its outgoing connections. If there are more replicas than IPs, some IPs from the list will be used more than once. If there are more IPs than replicas, some of the IPs from the list will not be used in a particular backend, but can be used on others that shares the configuration. The IP distribution consistently starts on distinct positions on distinct backends, fairly distributing all the IPs from the list on workloads with a big amount of backends with one or so servers each. If all the interfaces failed to list IP address, HAProxy falls back to the default behavior and leaves the operating system to choose the source IP.&lt;/p&gt;

&lt;p&gt;Update also &lt;code&gt;/proc/sys/net/ipv4/ip_local_port_range&lt;/code&gt; in the HAProxy hosts to allow each source IP use more than its default 28k ephemeral ports.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Neither HAProxy Ingress nor HAProxy will validate if the configured network interface and/or their IPs are valid sources for the outgoing connection, its up to the admin to ensure that the correct interface is properly configured.
&lt;/div&gt;




&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
The source IP is a static configuration added on each backend server. This configuration cannot be used on backends that use DNS resolver.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-source&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-source&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kernel.org/doc/html/v5.12/networking/ip-sysctl.html#ip-variables&#34;&gt;https://www.kernel.org/doc/html/v5.12/networking/ip-sysctl.html#ip-variables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-always-add-https&#34;&gt;SSL always add HTTPS&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-always-add-https&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Every hostname declared on an Ingress resource is added to an internal HTTP map. If at least one Ingress adds the hostname in the &lt;code&gt;tls&lt;/code&gt; attribute, the hostname is also added to an internal HTTPS map and does ssl offload using the default certificate. A secret name can also be added in the &lt;code&gt;tls&lt;/code&gt; attribute, overriding the certificate used in the TLS handshake.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssl-always-add-https&lt;/code&gt; asks the controller to always add the domain in the internal HTTP and HTTPS maps, even if the &lt;code&gt;tls&lt;/code&gt; attribute isn&amp;rsquo;t declared. If &lt;code&gt;false&lt;/code&gt;, a missing &lt;code&gt;tls&lt;/code&gt; attribute will only declare the domain in the HTTP map and &lt;code&gt;ssl-redirect&lt;/code&gt; is ignored. If &lt;code&gt;true&lt;/code&gt;, a missing &lt;code&gt;tls&lt;/code&gt; attribute adds the domain in the HTTPS map, and the TLS handshake will use the default certificate. If &lt;code&gt;tls&lt;/code&gt; attribute is used, this configuration is ignored.&lt;/p&gt;

&lt;p&gt;The default value is &lt;code&gt;false&lt;/code&gt; since v0.13 to correctly implement Ingress spec. The default value can be globally changed in the global ConfigMap.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-ciphers&#34;&gt;SSL ciphers&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-cipher-suites&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-cipher-suites-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-ciphers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-ciphers-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Set the list of cipher algorithms used during the SSL/TLS handshake.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssl-cipher-suites&lt;/code&gt;: Cipher suites on TLS v1.3 handshake of incoming requests. HAProxy being the TLS server.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-cipher-suites-backend&lt;/code&gt;: Cipher suites on TLS v1.3 handshake to backend/servers. HAProxy being the TLS client.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-ciphers&lt;/code&gt;: Cipher suites on TLS up to v1.2 handshake of incoming requests. HAProxy being the TLS server.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-ciphers-backend&lt;/code&gt;: Cipher suites on TLS up to v1.2 handshake to backend/servers. HAProxy being the TLS client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Default values on HAProxy Ingress up to v0.8:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TLS up to v1.2: &lt;code&gt;ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Default values on HAProxy Ingress v0.9 and newer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TLS up to v1.2: &lt;code&gt;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TLS v1.3: &lt;code&gt;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;ssl-ciphers&lt;/code&gt; and &lt;code&gt;ssl-cipher-suites&lt;/code&gt; were &lt;code&gt;Global&lt;/code&gt; scope up to v0.10.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ssl-config.mozilla.org/#server=haproxy&#34;&gt;https://ssl-config.mozilla.org/#server=haproxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-default-bind-ciphers&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-default-bind-ciphers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-default-bind-ciphersuites&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-default-bind-ciphersuites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-ciphers&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-ciphers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-ciphersuites&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.2-ciphersuites&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-dh&#34;&gt;SSL DH&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-dh-default-max-size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-dh-param&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures Diffie-Hellman key exchange parameters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssl-dh-param&lt;/code&gt;: Configure the secret name which defines the DH parameters file used on ephemeral Diffie-Hellman key exchange during the SSL/TLS handshake. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing the DH parameters file in PEM format, eg &lt;code&gt;file:///dir/dh-param.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-dh-default-max-size&lt;/code&gt;: Define the maximum size of a temporary DH parameters used for key exchange. Only used if &lt;code&gt;ssl-dh-param&lt;/code&gt; isn&amp;rsquo;t provided.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#tune.ssl.default-dh-param&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#tune.ssl.default-dh-param&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-dh-param-file&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-ssl-dh-param-file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-engine&#34;&gt;SSL engine&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-engine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-mode-async&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Set the name of the OpenSSL engine to use. The string shall include the engine name
and its parameters.&lt;/p&gt;

&lt;p&gt;Additionally, &lt;code&gt;ssl-mode-async&lt;/code&gt; can be set to enable asynchronous TLS I/O operations if
the ssl-engine used supports it.&lt;/p&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#ssl-engine&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#ssl-engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#ssl-mode-async&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#ssl-mode-async&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-options&#34;&gt;SSL options&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-options&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-options-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-options-host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define a space-separated list of options on SSL/TLS connections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssl-options&lt;/code&gt;: Default options for all the TLS frontend connections - HAProxy being the server&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-options-backend&lt;/code&gt;: Options for backend server connections - HAProxy being the client&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-options-host&lt;/code&gt;: Options for TLS frontend connections - HAProxy being the server. This acts as a host scoped override to options defined in &lt;code&gt;ssl-options&lt;/code&gt; and supports everything that HAProxy supports in the &lt;code&gt;crt-list&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Default values for &lt;code&gt;ssl-options&lt;/code&gt; and &lt;code&gt;ssl-options-backend&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v0.9 and newer: &lt;code&gt;no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;up to v0.8: &lt;code&gt;no-sslv3 no-tls-tickets&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supported options for &lt;code&gt;ssl-options&lt;/code&gt; and &lt;code&gt;ssl-options-backend&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;force-sslv3&lt;/code&gt;: Enforces use of SSLv3 only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;force-tlsv10&lt;/code&gt;: Enforces use of TLSv1.0 only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;force-tlsv11&lt;/code&gt;: Enforces use of TLSv1.1 only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;force-tlsv12&lt;/code&gt;: Enforces use of TLSv1.2 only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-sslv3&lt;/code&gt;: Disables support for SSLv3&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tls-tickets&lt;/code&gt;: Enforces the use of stateful session resumption&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tlsv10&lt;/code&gt;: Disables support for TLSv1.0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tlsv11&lt;/code&gt;: Disables support for TLSv1.1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tlsv12&lt;/code&gt;: Disables support for TLSv1.2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;New supported options since v0.9 for &lt;code&gt;ssl-options&lt;/code&gt; and &lt;code&gt;ssl-options-backend&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;force-tlsv13&lt;/code&gt;: Enforces use of TLSv1.3 only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tlsv13&lt;/code&gt;: Disables support for TLSv1.3&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-max-ver &amp;lt;SSLv3|TLSv1.0|TLSv1.1|TLSv1.2|TLSv1.3&amp;gt;&lt;/code&gt;: Enforces the use of a SSL/TLS version or lower&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-min-ver &amp;lt;SSLv3|TLSv1.0|TLSv1.1|TLSv1.2|TLSv1.3&amp;gt;&lt;/code&gt;: Enforces the use of a SSL/TLS version or upper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-crt-list&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-crt-list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-passthrough&#34;&gt;SSL passthrough&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-passthrough&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-passthrough-http-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines if HAProxy should work in TCP proxy mode and leave the SSL offload to the backend.
SSL passthrough is a per domain configuration, which means that other domains can be
configured to SSL offload on HAProxy.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Up to v0.12, &lt;code&gt;ssl-passthrough&lt;/code&gt; supports only root &lt;code&gt;/&lt;/code&gt; path. Since v0.13, non root paths are also supported and configured in the HAProxy&amp;rsquo;s HTTP port.
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssl-passthrough&lt;/code&gt;: Enable SSL passthrough if defined as &lt;code&gt;true&lt;/code&gt;. The backend is then expected to SSL offload the incoming traffic. The default value is &lt;code&gt;false&lt;/code&gt;, which means HAProxy should do the SSL handshake.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-passthrough-http-port&lt;/code&gt;: Optional HTTP port number of the backend. If defined, connections to the HAProxy&amp;rsquo;s HTTP port, defaults to &lt;code&gt;80&lt;/code&gt;, is sent to the configured port number of the backend, which expects to speak plain HTTP. If not defined, connections to the HTTP port will redirect the client to HTTPS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hostnames configured as &lt;code&gt;ssl-passthrough&lt;/code&gt; configures HAProxy in the following way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requests to the HTTPS port, defaults to &lt;code&gt;443&lt;/code&gt;, will be sent to the backend and port number configured in the root &lt;code&gt;/&lt;/code&gt; path of the domain. Such port must speak TLS and will make the TLS handshake with the client. There is no path inspection, so only one backend is supported.&lt;/li&gt;
&lt;li&gt;Requests to the HTTP port, defaults to &lt;code&gt;80&lt;/code&gt;, will follow the same rules of non &lt;code&gt;ssl-passthrough&lt;/code&gt; domains: if the request matches a non root path, the configured backend will be used and it should speak plain HTTP, except if &lt;a href=&#34;#secure-backend&#34;&gt;&lt;code&gt;secure-backends&lt;/code&gt;&lt;/a&gt; is also configured. If there isn&amp;rsquo;t non root paths or if they doesn&amp;rsquo;t match, the request will fall back to: redirect to HTTPS (default), or the request will be sent to &lt;code&gt;ssl-passthrough-http-port&lt;/code&gt; port number of the ssl backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ssl-redirect&#34;&gt;SSL redirect&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;no-tls-redirect-locations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/.well-known/acme-challenge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-redirect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ssl-redirect-code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures if an encripted connection should be used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ssl-redirect&lt;/code&gt;: Defines if HAProxy should send a &lt;code&gt;302 redirect&lt;/code&gt; response to requests made on unencripted connections. Note that this configuration will only make effect if TLS is &lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/tree/master/examples/tls-termination&#34;&gt;configured&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssl-redirect-code&lt;/code&gt;: Defines the HTTP status code used in the redirect. The default value is &lt;code&gt;302&lt;/code&gt; if not declared. Supported values are &lt;code&gt;301&lt;/code&gt;, &lt;code&gt;302&lt;/code&gt;, &lt;code&gt;303&lt;/code&gt;, &lt;code&gt;307&lt;/code&gt; and &lt;code&gt;308&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no-tls-redirect-locations&lt;/code&gt;: Defines a comma-separated list of URLs that should be removed from the TLS redirect. Requests to &lt;code&gt;:80&lt;/code&gt; http port and starting with one of the URLs from the list will not be redirected to https despite of the TLS redirect configuration. This option defaults to &lt;code&gt;/.well-known/acme-challenge&lt;/code&gt;, used by ACME protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ssl-always-add-https&#34;&gt;&lt;code&gt;ssl-always-add-https&lt;/code&gt;&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#redirect&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#redirect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;stats&#34;&gt;Stats&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stats-auth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stats-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1936&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stats-proxy-protocol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stats-ssl-cert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configurations of the HAProxy statistics page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;stats-auth&lt;/code&gt;: Enable basic authentication with clear-text password - &lt;code&gt;&amp;lt;user&amp;gt;:&amp;lt;passwd&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stats-port&lt;/code&gt;: Change the port HAProxy should listen to requests&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stats-proxy-protocol&lt;/code&gt;: Define if the stats endpoint should enforce the PROXY protocol&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stats-ssl-cert&lt;/code&gt;: Optional namespace/secret-name of &lt;code&gt;tls.crt&lt;/code&gt; and &lt;code&gt;tls.key&lt;/code&gt; pair used to enable SSL on stats page. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used, containing both certificate and private key in PEM format, eg &lt;code&gt;file:///dir/crt.pem&lt;/code&gt;. Plain http will be used if not provided, the secret wasn&amp;rsquo;t found, the secret doesn&amp;rsquo;t have a crt/key pair or the file is not found.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;strict-host&#34;&gt;Strict host&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;strict-host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines whether the path of another matching host/FQDN should be used to try
to serve a request. The default value is &lt;code&gt;false&lt;/code&gt;, which means all matching
wildcard hosts will be visited in order to try to match the path. If &lt;code&gt;true&lt;/code&gt;,
a strict configuration is applied and the &lt;code&gt;default-backend&lt;/code&gt; should be used
if a path couldn&amp;rsquo;t be matched.&lt;/p&gt;

&lt;p&gt;Using the following configuration:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  spec:
    rules:
    - host: my.domain.com
      http:
        paths:
        - path: /a
          backend:
            serviceName: svc1
            servicePort: 8080
    - host: *.domain.com
      http:
        paths:
        - path: /
          backend:
            serviceName: svc2
            servicePort: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A request to &lt;code&gt;my.domain.com/b&lt;/code&gt; would serve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svc2&lt;/code&gt; if &lt;code&gt;strict-host&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;, the default value&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default-backend&lt;/code&gt; if &lt;code&gt;strict-host&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;syslog&#34;&gt;Syslog&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;syslog-endpoint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;syslog-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rfc5424&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;syslog-length&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1024&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;syslog-tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ingress&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Logging configurations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;syslog-endpoint&lt;/code&gt;: Configures the UDP syslog endpoint where HAProxy should send access logs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;syslog-format&lt;/code&gt;: Configures the log format to be either &lt;code&gt;rfc5424&lt;/code&gt; (default), &lt;code&gt;rfc3164&lt;/code&gt; or &lt;code&gt;raw&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;syslog-length&lt;/code&gt;: The maximum line length, log lines larger than this value will be truncated. Defaults to &lt;code&gt;1024&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;syslog-tag&lt;/code&gt;: Configure the tag field in the syslog header to the supplied string.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The HAProxy process can also send logs to stdout, instead of an external syslog endpoint or a syslog sidecar, by following the steps below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure &lt;code&gt;syslog-endpoint&lt;/code&gt; as &lt;code&gt;stdout&lt;/code&gt; and &lt;code&gt;syslog-format&lt;/code&gt; as &lt;code&gt;raw&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;From v0.12 and newer, configure HAProxy to run as a sidecar, see the &lt;a href=&#34;/v0.13/v0.13/docs/examples/external-haproxy/&#34;&gt;example page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-log&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-log-tag&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-log-tag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;tcp-services&#34;&gt;TCP Services&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tcp-service-port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TCP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configures a TCP proxy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tcp-service-port&lt;/code&gt;: Defines the port number HAProxy should listen to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default ingress resources configure HTTP services, and incoming requests are routed to backend servers based on hostnames and HTTP path. Whenever the &lt;code&gt;tcp-service-port&lt;/code&gt; configuration key is added to an ingress resource, incoming requests are processed as TCP requests and the listening port number is used to route requests, using a dedicated frontend in tcp mode. Optionally, the TLS SNI extension can also be used to route incoming request if the hostname is declared in the ingress spec.&lt;/p&gt;

&lt;p&gt;Due to the limited data that can be inspected on TCP requests, a limited number of configuration keys work with TCP services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Backend&lt;/code&gt; and &lt;code&gt;Path&lt;/code&gt; scoped configuration keys work, provided that they are not HTTP related - eg &lt;a href=&#34;#cors&#34;&gt;Cors&lt;/a&gt; and &lt;a href=&#34;#hsts&#34;&gt;HSTS&lt;/a&gt; are ignored by TCP services, on the other hand &lt;a href=&#34;#balance-algorithm&#34;&gt;balance algorithm&lt;/a&gt;, &lt;a href=&#34;#allowlist&#34;&gt;Allow list&lt;/a&gt; and &lt;a href=&#34;#blue-green&#34;&gt;Blue/green&lt;/a&gt; work just like in the HTTP requests counterpart.&lt;/li&gt;
&lt;li&gt;All &lt;code&gt;Global&lt;/code&gt; configuration keys related with the whole haproxy process will also be applied to TCP services, like max connections or syslog configurations.&lt;/li&gt;
&lt;li&gt;All &lt;code&gt;Host&lt;/code&gt; scoped configuration keys are currently unsupported&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every TCP service port creates a dedicated haproxy frontend that can be &lt;a href=&#34;#configuration-snippet&#34;&gt;customized&lt;/a&gt; in three distinct ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;config-tcp-service&lt;/code&gt; in the global ConfigMap, this will add the same configurations to all the TCP service frontends&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-tcp-service&lt;/code&gt; as an Ingress annotation, this will add the snippet in one TCP service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config-proxy&lt;/code&gt; in the global ConfigMap using &lt;code&gt;_front_tcp_&amp;lt;port-number&amp;gt;&lt;/code&gt; as the proxy name, see in the &lt;a href=&#34;#configuration-snippet&#34;&gt;configuration snippet&lt;/a&gt; documentation how it works&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
The documentation continues to refer to the old, and now deprecated &lt;a href=&#34;/v0.13/v0.13/docs/configuration/command-line/#tcp-services-configmap&#34;&gt;&lt;code&gt;--tcp-services-configmap&lt;/code&gt;&lt;/a&gt; configuration options. Whenever we are talking about the deprecated option, we will refer it as the &amp;ldquo;ConfigMap based TCP&amp;rdquo;.
&lt;/div&gt;


&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#configuration-snippet&#34;&gt;&lt;code&gt;config-tcp-service&lt;/code&gt;&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-format&#34;&gt;&lt;code&gt;tcp-service-log-format&lt;/code&gt;&lt;/a&gt; configuration key&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;timeout&#34;&gt;Timeout&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-client&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-client-fin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-connect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-http-request&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-keep-alive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-queue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-server-fin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;50s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-stop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timeout-tunnel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Define timeout configurations. The unit defaults to milliseconds if missing, change the unit with &lt;code&gt;s&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt;, &lt;code&gt;h&lt;/code&gt;, &amp;hellip; suffix.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Since &lt;code&gt;v0.11&lt;/code&gt;, &lt;code&gt;timeout-client&lt;/code&gt; and &lt;code&gt;timeout-client-fin&lt;/code&gt; are global configuration keys and cannot be configured per hostname.
&lt;/div&gt;


&lt;p&gt;The following keys are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;timeout-client&lt;/code&gt;: Maximum inactivity time on the client side&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-client-fin&lt;/code&gt;: Maximum inactivity time on the client side for half-closed connections - FIN_WAIT state&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-connect&lt;/code&gt;: Maximum time to wait for a connection to a backend&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-http-request&lt;/code&gt;: Maximum time to wait for a complete HTTP request&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-keep-alive&lt;/code&gt;: Maximum time to wait for a new HTTP request on keep-alive connections&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-queue&lt;/code&gt;: Maximum time a connection should wait on a server queue before return a 503 error to the client&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-server&lt;/code&gt;: Maximum inactivity time on the backend side&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-server-fin&lt;/code&gt;: Maximum inactivity time on the backend side for half-closed connections - FIN_WAIT state&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-stop&lt;/code&gt;: Maximum time to wait for long lived connections to finish, eg websocket, before hard-stop a HAProxy process due to a reload&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeout-tunnel&lt;/code&gt;: Maximum inactivity time on the client and backend side for tunnels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-hard-stop-after&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-hard-stop-after&lt;/a&gt; (&lt;code&gt;timeout-stop&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#2.4&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#2.4&lt;/a&gt; (time suffix)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;tls-alpn&#34;&gt;TLS ALPN&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tls-alpn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h2,http/1.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines the TLS ALPN extension advertisement. The default value is &lt;code&gt;h2,http/1.1&lt;/code&gt; which enables
HTTP/2 on the client side.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tls-alpn&lt;/code&gt; was &lt;code&gt;Global&lt;/code&gt; scope up to v0.10.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-alpn&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#5.1-alpn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;use-htx&#34;&gt;Use HTX&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use-htx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines if the new HTX internal representation for HTTP elements should be used. The default value
is &lt;code&gt;true&lt;/code&gt; since v0.10, it was &lt;code&gt;false&lt;/code&gt; on v0.9. HTX should be used to enable HTTP/2 protocol to backends.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#backend-protocol&#34;&gt;backend-protocol&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-option%20http-use-htx&#34;&gt;https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-option%20http-use-htx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;var-namespace&#34;&gt;Var namespace&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var-namespace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;If &lt;code&gt;var-namespace&lt;/code&gt; is configured as &lt;code&gt;true&lt;/code&gt;, a HAProxy var &lt;code&gt;txn.namespace&lt;/code&gt; is created with the
kubernetes namespace owner of the service which is the target of the request. This variable is
useful on http logs. The default value is &lt;code&gt;false&lt;/code&gt;. Usage: &lt;code&gt;k8s-namespace: %[var(txn.namespace)]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#log-format&#34;&gt;http-log&lt;/a&gt; configuration key&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;waf&#34;&gt;WAF&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration key&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;waf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;waf-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deny&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Defines which web application firewall (WAF) implementation should be used
to validate requests. Currently the only supported value is &lt;code&gt;modsecurity&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This configuration has no effect if the ModSecurity endpoints are not configured.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;waf-mode&lt;/code&gt; key defines wether the WAF should be &lt;code&gt;deny&lt;/code&gt; or &lt;code&gt;detect&lt;/code&gt; for that Backend.
If the WAF is in &lt;code&gt;detect&lt;/code&gt; mode the requests are passed to ModSecurity and logged, but not denied.&lt;/p&gt;

&lt;p&gt;The default behavior here is &lt;code&gt;deny&lt;/code&gt; if &lt;code&gt;waf&lt;/code&gt; is set to &lt;code&gt;modsecurity&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#modsecurity&#34;&gt;Modsecurity&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Command-line options</title>
      <link>/v0.13/docs/configuration/command-line/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v0.13/docs/configuration/command-line/</guid>
      <description>
        
        
        

&lt;p&gt;The following command-line options are supported:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Since&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-check-period&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;24h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-election-id&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[namespace]/configmap-name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;acme-leader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-fail-initial-duration&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-fail-max-duration&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-secret-key-name&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[namespace]/secret-name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;acme-private-key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-server&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-token-configmap-name&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[namespace]/configmap-name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;acme-validation-tokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#acme&#34;&gt;&lt;code&gt;--acme-track-tls-annotation&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.9&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#allow-cross-namespace&#34;&gt;&lt;code&gt;--allow-cross-namespace&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#annotations-prefix&#34;&gt;&lt;code&gt;--annotations-prefix&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;prefix list without &lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;haproxy-ingress.github.io,ingress.kubernetes.io&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#apiserver-host&#34;&gt;&lt;code&gt;--apiserver-host&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;address of K8s API server&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#backend-shards&#34;&gt;&lt;code&gt;--backend-shards&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;int&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#buckets-response-time&#34;&gt;&lt;code&gt;--buckets-response-time&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;float64 slice&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.0005,.001,.002,.005,.01&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#configmap&#34;&gt;&lt;code&gt;--configmap&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/configmapname&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ingress-class&#34;&gt;&lt;code&gt;--controller-class&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;suffix&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#default-backend-service&#34;&gt;&lt;code&gt;--default-backend-service&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/servicename&lt;/td&gt;
&lt;td&gt;haproxy&amp;rsquo;s 404 page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#default-ssl-certificate&#34;&gt;&lt;code&gt;--default-ssl-certificate&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/secretname&lt;/td&gt;
&lt;td&gt;fake, auto generated&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#disable-api-warnings&#34;&gt;&lt;code&gt;--disable-api-warnings&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#disable-config-keywords&#34;&gt;&lt;code&gt;--disable-config-keywords&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;comma-separated list of keywords&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#disable-external-name&#34;&gt;&lt;code&gt;--disable-external-name&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#disable-pod-list&#34;&gt;&lt;code&gt;--disable-pod-list&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#election-id&#34;&gt;&lt;code&gt;--election-id&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;identifier&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ingress-controller-leader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#force-namespace-isolation&#34;&gt;&lt;code&gt;--force-namespace-isolation&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;--health-check-path&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/healthz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;--healthz-port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;port number&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10254&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ingress-class&#34;&gt;&lt;code&gt;--ingress-class&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ingress-class&#34;&gt;&lt;code&gt;--ingress-class-precedence&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13.5&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#kubeconfig&#34;&gt;&lt;code&gt;--kubeconfig&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;/path/to/kubeconfig&lt;/td&gt;
&lt;td&gt;in cluster config&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#master-socket&#34;&gt;&lt;code&gt;--master-socket&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;socket path&lt;/td&gt;
&lt;td&gt;use embedded haproxy&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#max-old-config-files&#34;&gt;&lt;code&gt;--max-old-config-files&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;num of files&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;--profiling&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#publish-service&#34;&gt;&lt;code&gt;--publish-service&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/servicename&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#rate-limit-update&#34;&gt;&lt;code&gt;--rate-limit-update&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uploads per second (float)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#reload-interval&#34;&gt;&lt;code&gt;--reload-interval&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#reload-strategy&#34;&gt;&lt;code&gt;--reload-strategy&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[native|reusesocket]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;reusesocket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#report-node-internal-ip-address&#34;&gt;&lt;code&gt;--report-node-internal-ip-address&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#sort-backends&#34;&gt;&lt;code&gt;--sort-backends&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#sort-endpoints-by&#34;&gt;&lt;code&gt;--sort-endpoints-by&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[endpoint|ip|name|random]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;endpoint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#stats&#34;&gt;&lt;code&gt;--stats-collect-processing-period&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;500ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.10&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#sync-period&#34;&gt;&lt;code&gt;--sync-period&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#tcp-services-configmap&#34;&gt;&lt;code&gt;--tcp-services-configmap&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace/configmapname&lt;/td&gt;
&lt;td&gt;no tcp svc&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#update-status&#34;&gt;&lt;code&gt;--update-status&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#update-status-on-shutdown&#34;&gt;&lt;code&gt;--update-status-on-shutdown&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#v&#34;&gt;&lt;code&gt;--v&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;log level as integer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#validate-config&#34;&gt;&lt;code&gt;--validate-config&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#verify-hostname&#34;&gt;&lt;code&gt;--verify-hostname&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#version&#34;&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#wait-before-shutdown&#34;&gt;&lt;code&gt;--wait-before-shutdown&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;seconds as integer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.8&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#wait-before-update&#34;&gt;&lt;code&gt;--wait-before-update&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;duration&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.11&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#watch-gateway&#34;&gt;&lt;code&gt;--watch-gateway&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.13&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#ingress-class&#34;&gt;&lt;code&gt;--watch-ingress-without-class&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[true|false]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v0.12&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;#watch-namespace&#34;&gt;&lt;code&gt;--watch-namespace&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;namespace&lt;/td&gt;
&lt;td&gt;all namespaces&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;acme&#34;&gt;Acme&lt;/h2&gt;

&lt;p&gt;Configures the acme server and other static options used to authorize and sign certificates
against a server which implements the acme protocol, version 2.&lt;/p&gt;

&lt;p&gt;Supported acme command-line options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--acme-check-period&lt;/code&gt;: interval between checks for expiring certificates. Defaults to &lt;code&gt;24h&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-election-id&lt;/code&gt;: prefix of the ConfigMap name used to store the leader election data. Only the leader of a haproxy-ingress cluster should start the authorization and sign certificate process. Defaults to &lt;code&gt;acme-leader&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-fail-initial-duration&lt;/code&gt;: the starting time to wait and retry after a failed authorization and sign process. Defaults to &lt;code&gt;5m&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-fail-max-duration&lt;/code&gt;: the time between retries of failed authorization will exponentially grow up to the max duration time. Defaults to &lt;code&gt;8h&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-secret-key-name&lt;/code&gt;: secret name used to store the client private key. Defaults to &lt;code&gt;acme-private-key&lt;/code&gt;. A new key, hence a new client, is created if the secret does not exist.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-server&lt;/code&gt;: mandatory, starts a local server used to answer challenges from the acme environment. This option should be provided on all haproxy-ingress instances to the certificate signing work properly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-token-configmap-name&lt;/code&gt;: the ConfigMap name used to store temporary tokens generated during the challenge. Defaults to &lt;code&gt;acme-validation-tokens&lt;/code&gt;. Such tokens need to be stored in k8s because any haproxy-ingress instance might receive the request from the acme environment.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--acme-track-tls-annotation&lt;/code&gt;: defines if ingress objects with annotation &lt;code&gt;kubernetes.io/tls-acme: &amp;quot;true&amp;quot;&lt;/code&gt; should also be tracked. Defaults to &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#acme&#34;&gt;acme configuration keys&lt;/a&gt; doc, which has also an overview on how acme works on haproxy-ingress&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;allow-cross-namespace&#34;&gt;&amp;ndash;allow-cross-namespace&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;--allow-cross-namespace&lt;/code&gt; argument, if added, will allow reading secrets from one namespace to an
ingress resource of another namespace. The default behavior is to deny such cross namespace reading.
This adds a breaking change from &lt;code&gt;v0.4&lt;/code&gt; to &lt;code&gt;v0.5&lt;/code&gt; on &lt;code&gt;haproxy-ingress.github.io/auth-tls-secret&lt;/code&gt;
annotation, where cross namespace reading were allowed without any configuration.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#cross-namespace&#34;&gt;cross namespace&lt;/a&gt; configuration keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;annotations-prefix&#34;&gt;&amp;ndash;annotations-prefix&lt;/h2&gt;

&lt;p&gt;Configures a comma-separated list of annotations prefix that the controller should look for when
parsing services and ingress objects. The default value is &lt;code&gt;haproxy-ingress.github.io,ingress.kubernetes.io&lt;/code&gt;.
The default configuration means declare eg a SSL Redirect annotation with
&lt;code&gt;haproxy-ingress.github.io/ssl-redirect: &amp;quot;true&amp;quot;&lt;/code&gt; or &lt;code&gt;ingress.kubernetes.io/ssl-redirect: &amp;quot;true&amp;quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The order of the declaration is used to priorize one of them if the same configuration key is
declared twice - if two distinct prefix is used to configure the same key in the same ingress or
service resource, the value of the annotation with the prefix that was configured first in this
command-line option is used.&lt;/p&gt;

&lt;p&gt;Annotations with other prefix or without any prefix are ignored. This allows to use HAProxy Ingress
with other ingress controllers that shares ingress and service resources without conflicting each
other.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;apiserver-host&#34;&gt;&amp;ndash;apiserver-host&lt;/h2&gt;

&lt;p&gt;Allows you to specify an explicit host for the Kubernetes API server, in the format of
&lt;code&gt;protocol://address:port&lt;/code&gt;, e.g., &lt;code&gt;http://localhost:8080&lt;/code&gt;.  If this value isn&amp;rsquo;t specified, the
assumption is that the binary is running inside a Kubernetes cluster and local discovery will be
attempted.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;backend-shards&#34;&gt;&amp;ndash;backend-shards&lt;/h2&gt;

&lt;p&gt;Defines how many files should be used to configure the haproxy backends. The default value is
0 (zero) which uses one single file to configure the whole haproxy process. Values greather than
0 (zero) splits the backend configuration into separated files. Only files with changed backends
are parsed and written to disk, reducing io and cpu usage on big clusters - about 1000 or more
services.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;buckets-response-time&#34;&gt;&amp;ndash;buckets-response-time&lt;/h2&gt;

&lt;p&gt;Configures the buckets of the histogram &lt;code&gt;haproxyingress_haproxy_response_time_seconds&lt;/code&gt;, used to compute the response time of the haproxy&amp;rsquo;s admin socket. The response time unit is in seconds. The default value is &lt;code&gt;.0005,.001,.002,.005,.01&lt;/code&gt; (&lt;code&gt;500µs&lt;/code&gt;, &lt;code&gt;1ms&lt;/code&gt;, &lt;code&gt;2ms&lt;/code&gt;, &lt;code&gt;5ms&lt;/code&gt;, &lt;code&gt;10ms&lt;/code&gt;) if not configured.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;configmap&#34;&gt;&amp;ndash;configmap&lt;/h2&gt;

&lt;p&gt;The name of the ConfigMap that contains the custom configuration to use, in the format
&lt;code&gt;namespace/configmapname&lt;/code&gt;.  Beware that in version 0.12 and below, an incorrect value here will
silently fail.  Version 0.13 and later will crash if the ConfigMap is unreadable or nonexistent.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/blob/master/examples/custom-configuration/README.md&#34;&gt;custom-configuration example using &lt;code&gt;--configmap&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;default-backend-service&#34;&gt;&amp;ndash;default-backend-service&lt;/h2&gt;

&lt;p&gt;Defines the &lt;code&gt;namespace/servicename&lt;/code&gt; that should be used if the incoming request doesn&amp;rsquo;t match any
hostname, or the requested path doesn&amp;rsquo;t match any location within the desired hostname. An internal
404 error page is used if not declared.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;default-ssl-certificate&#34;&gt;&amp;ndash;default-ssl-certificate&lt;/h2&gt;

&lt;p&gt;Defines the &lt;code&gt;namespace/secretname&lt;/code&gt; of the default certificate that should be used if ingress
resources using TLS configuration doesn&amp;rsquo;t provide it&amp;rsquo;s own certificate.  A filename prefixed
with &lt;code&gt;file://&lt;/code&gt; can be used, containing both certificate and private key in PEM format, eg
&lt;code&gt;file:///dir/crt.pem&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A self-signed fake certificate is used if not declared, the secret or the file is not found.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;disable-api-warnings&#34;&gt;&amp;ndash;disable-api-warnings&lt;/h2&gt;

&lt;p&gt;Since v0.12.4&lt;/p&gt;

&lt;p&gt;Disable warning logs sent from the API server. Most of the warnings are related with API
deprecation. The default behavior is to log all API server warnings.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;disable-config-keywords&#34;&gt;&amp;ndash;disable-config-keywords&lt;/h2&gt;

&lt;p&gt;Since v0.10.9&lt;/p&gt;

&lt;p&gt;Defines a comma-separated list of HAProxy keywords that should not be used on annotation based configuration snippets. Configuration snippets added as a global config does not follow this option. Use an asterisk &lt;code&gt;*&lt;/code&gt; to disable configuration snippets using annotations.&lt;/p&gt;

&lt;p&gt;Every keyword in the configuration will be compared with the first token of every configuration line, ignoring tabs and spaces. If a match occur, all the configuration snippet will be ignored and a warning is logged.&lt;/p&gt;

&lt;p&gt;The default value is an empty string, enabling the configuration and accepting any HAProxy keyword.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;disable-external-name&#34;&gt;&amp;ndash;disable-external-name&lt;/h2&gt;

&lt;p&gt;Since v0.10.9&lt;/p&gt;

&lt;p&gt;Services of type ExternalName uses DNS lookup to define the target server IP list. Declare &lt;code&gt;--disable-external-name&lt;/code&gt; to disable a DNS based target IP list, refusing services of type ExternalName.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;disable-pod-list&#34;&gt;&amp;ndash;disable-pod-list&lt;/h2&gt;

&lt;p&gt;Since v0.11&lt;/p&gt;

&lt;p&gt;Disables in memory pod list and also pod watch for changes. Pod list and watch is used by the &lt;code&gt;drain-support&lt;/code&gt; and &lt;code&gt;assign-backend-server-id&lt;/code&gt; options, which will not work if pod list is disabled. Blue/green and &lt;code&gt;session-cookie-value-strategy&lt;/code&gt; set to &lt;code&gt;pod-uid&lt;/code&gt; also use pod list if enabled, otherwise k8s api is called if needed. The default value is &lt;code&gt;false&lt;/code&gt;, which means pods will be watched and listed in memory.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;election-id&#34;&gt;&amp;ndash;election-id&lt;/h2&gt;

&lt;p&gt;The ID to be used for electing ingress controller leader.  Defaults to &lt;code&gt;ingress-controller-leader&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;force-namespace-isolation&#34;&gt;&amp;ndash;force-namespace-isolation&lt;/h2&gt;

&lt;p&gt;Whether to force namespace isolation.  This flag is required to avoid the reference of secrets,
configmaps or the default backend service located in a different namespace than specified in the
flag &lt;code&gt;--watch-namespace&lt;/code&gt; (which defaults to all namespaces, so you will probably want to set that
flag, too).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;ingress-class&#34;&gt;Ingress Class&lt;/h2&gt;

&lt;p&gt;More than one ingress controller is supported per Kubernetes cluster. These options allow to
override the class of ingress resources that this instance of the controller should listen to.
Classes that match will be used in the HAProxy configuration, other classes will be ignored.
Ingress resources without class name and without class annotation is also ignored since v0.12,
add the command-line option &lt;code&gt;--watch-ingress-without-class&lt;/code&gt; to also listen to these ingress.&lt;/p&gt;

&lt;p&gt;These options have a new behavior since v0.12, see the corresponding documentation if using an
older controller version.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--ingress-class&lt;/code&gt;: defines the value of &lt;code&gt;kubernetes.io/ingress.class&lt;/code&gt; annotation this controller
should listen to. The default value is &lt;code&gt;haproxy&lt;/code&gt; if not declared.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--controller-class&lt;/code&gt;: by default, HAProxy Ingress will watch IngressClasses whose
&lt;code&gt;spec.controller&lt;/code&gt; name is &lt;code&gt;haproxy-ingress.github.io/controller&lt;/code&gt;. All ingress resources that
link to these IngressClasses will be added to the configuration. The &lt;code&gt;--controller-class&lt;/code&gt;
command-line option customizes the controller name, allowing to run more than one HAProxy Ingress
in the same cluster. Configuring &lt;code&gt;--controller-class=staging&lt;/code&gt; would listen to IngressClasses whose
controller name is &lt;code&gt;haproxy-ingress.github.io/controller/staging&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--ingress-class-precedence&lt;/code&gt;: defines if IngressClass resource should take precedence over
kubernetes.io/ingress.class annotation if both are defined and conflicting.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--watch-ingress-without-class&lt;/code&gt;: defines if this controller should also listen to ingress resources
that doesn&amp;rsquo;t declare neither the &lt;code&gt;kubernetes.io/ingress.class&lt;/code&gt; annotation nor the
&lt;code&gt;&amp;lt;ingress&amp;gt;.spec.ingressClassName&lt;/code&gt; field. The default since v0.12 is to ignore ingress without class
annotation and class name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--ignore-ingress-without-class&lt;/code&gt;: this option is ignored since v0.12. Use
&lt;code&gt;--watch-ingress-without-class&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#class-matter&#34;&gt;Class matter&lt;/a&gt; in the Configuration Keys doc&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class&#34;&gt;https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;kubeconfig&#34;&gt;&amp;ndash;kubeconfig&lt;/h2&gt;

&lt;p&gt;Ingress controller will try to connect to the Kubernetes master using environment variables and a
service account. This behavior can be changed using &lt;code&gt;--kubeconfig&lt;/code&gt; argument that reference a
kubeconfig file with master endpoint and credentials. This is a mandatory argument if the controller
is deployed outside of the Kubernetes cluster.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;master-socket&#34;&gt;&amp;ndash;master-socket&lt;/h2&gt;

&lt;p&gt;Since v0.12&lt;/p&gt;

&lt;p&gt;Configures HAProxy Ingress to use an external haproxy deployment in master-worker mode. This option
receives the unix socket of the master CLI. The default value is an empty string, which will
instruct the controller to start and manage the embedded haproxy instead of an external instance.&lt;/p&gt;

&lt;p&gt;The following conditions should be satisfied in order to an external haproxy work properly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The following paths should be shared between HAProxy Ingress and the external haproxy: &lt;code&gt;/etc/haproxy&lt;/code&gt;, &lt;code&gt;/var/lib/haproxy&lt;/code&gt;, &lt;code&gt;/var/run/haproxy&lt;/code&gt;. HAProxy Ingress must have write access to all of them, external haproxy should have write access to &lt;code&gt;/var/run/haproxy&lt;/code&gt;. This can be made using a sidecar container and k8s&amp;rsquo; emptyDir, or a remote file system provided that it updates synchronously and supports unix sockets&lt;/li&gt;
&lt;li&gt;Start the external haproxy with:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-S /var/run/haproxy/master.sock,mode,600&lt;/code&gt;. &lt;code&gt;mode 600&lt;/code&gt; isn&amp;rsquo;t mandatory but recommended;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f /etc/haproxy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;HAProxy Ingress image has a &lt;code&gt;--init&lt;/code&gt; command-line option which creates an initial valid configuration file, this allows the external haproxy to bootstraps successfully. This option can be used as an init container.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/examples/external-haproxy/&#34;&gt;example&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#external&#34;&gt;External&lt;/a&gt; and &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#master-worker&#34;&gt;Master-worker&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;max-old-config-files&#34;&gt;&amp;ndash;max-old-config-files&lt;/h2&gt;

&lt;p&gt;Everytime a configuration change need to update HAProxy, a configuration file is rewritten even if
dynamic update is used. By default the same file is recreated and the old configuration is lost.
Use &lt;code&gt;--max-old-config-files&lt;/code&gt; to configure after how much files Ingress controller should start to
remove old configuration files. If &lt;code&gt;0&lt;/code&gt;, the default value, a single &lt;code&gt;haproxy.cfg&lt;/code&gt; is used.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;publish-service&#34;&gt;&amp;ndash;publish-service&lt;/h2&gt;

&lt;p&gt;Some infrastructure tools like &lt;code&gt;external-DNS&lt;/code&gt; relay in the ingress status to created access routes to the services exposed with ingress object.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
...
status:
  loadBalancer:
    ingress:
    - hostname: &amp;lt;ingressControllerLoadbalancerFQDN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Use &lt;code&gt;--publish-service=namespace/servicename&lt;/code&gt; to indicate the services fronting the ingress controller. The controller mirrors the address of this service&amp;rsquo;s endpoints to the load-balancer status of all Ingress objects it satisfies.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;rate-limit-update&#34;&gt;&amp;ndash;rate-limit-update&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;--rate-limit-update&lt;/code&gt; to change how much time to wait between two consecutive configuration updates.
A configuration update is the process of read all enqueued Kubernetes events, reflect in the HAProxy
model and immediately apply everything that does not need a reload, eg server certificate endpoint
updates. Note that the first configuration update is always immediate, the delay will only prevent
two or more consecutive updates in the same time frame - the second update will be enqueued and
processed later, satisfying the rate limit configuration. Moreover, updates will only happen if
Kubernetes reports changing events. The default value is &lt;code&gt;0.5&lt;/code&gt; which means to wait two seconds between
two consecutive configuration changes.&lt;/p&gt;

&lt;p&gt;Up to v0.12 this was the only way to limit how often HAProxy would be reloaded, but this also prevents
to dynamically update HAProxy as fast as possible. v0.13 adds &lt;a href=&#34;#reload-interval&#34;&gt;&lt;code&gt;--reload-interval&lt;/code&gt;&lt;/a&gt;,
which allows a higher rate limit update with a lower rate of reloads.&lt;/p&gt;

&lt;p&gt;See also &lt;a href=&#34;#reload-interval&#34;&gt;&lt;code&gt;--reload-interval&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;reload-interval&#34;&gt;&amp;ndash;reload-interval&lt;/h2&gt;

&lt;p&gt;Since v0.13&lt;/p&gt;

&lt;p&gt;Configures the minimal time between two consecutive HAProxy reloads. The default value is &lt;code&gt;0&lt;/code&gt;,
which means to always reload HAProxy just after a configuration change requires a reload. The
interval should be configured with a time suffix, e.g., &lt;code&gt;30s&lt;/code&gt; means that if two distinct and
consecutive configuration changes enforce a reload, the second reload will be enqueued until 30
seconds have passed from the first one, applying every new configuration changes made between
this interval.&lt;/p&gt;

&lt;p&gt;Higher values help to limit the number of active instances and save some memory on large clusters
with long connections. Note however that, if two consecutive updates require a reload, the second
one will delay up to the configured duration to be reflected by HAProxy.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;reload-strategy&#34;&gt;&amp;ndash;reload-strategy&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;--reload-strategy&lt;/code&gt; command-line argument is used to select which reload strategy
HAProxy should use. The following options are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;native&lt;/code&gt;: Uses native HAProxy reload option &lt;code&gt;-sf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reusesocket&lt;/code&gt;: (starting on v0.6) Uses HAProxy &lt;code&gt;-x&lt;/code&gt; command-line option to pass the listening sockets between old and new HAProxy process, allowing hitless reloads. This is the default option since v0.8.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multibinder&lt;/code&gt;: (deprecated on v0.6) Uses GitHub&amp;rsquo;s &lt;a href=&#34;https://github.com/github/multibinder&#34;&gt;multibinder&lt;/a&gt;. This &lt;a href=&#34;https://githubengineering.com/glb-part-2-haproxy-zero-downtime-zero-delay-reloads-with-multibinder/&#34;&gt;link&lt;/a&gt;
describes how it works.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;report-node-internal-ip-address&#34;&gt;&amp;ndash;report-node-internal-ip-address&lt;/h2&gt;

&lt;p&gt;Sets whether the node&amp;rsquo;s IP address returned in the ingress status should be the node&amp;rsquo;s internal
instead of the external IP address.  Defaults to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;sort-backends&#34;&gt;&amp;ndash;sort-backends&lt;/h2&gt;

&lt;p&gt;Defines if backend&amp;rsquo;s endpoints should be sorted by name. Since v0.8 the endpoints will stay in the
same order found in the Kubernetes&amp;rsquo; endpoint objects if &lt;code&gt;--sort-backends&lt;/code&gt; is missing. This option
has less precedence than &lt;code&gt;--sort-endpoints-by&lt;/code&gt; if both are declared.&lt;/p&gt;

&lt;p&gt;In v0.7 and older version, if &lt;code&gt;--sort-backends&lt;/code&gt; is missing, HAProxy Ingress randomly shuffle endpoints
on each reload in order to avoid requesting always the same backends just after haproxy reloads.&lt;/p&gt;

&lt;p&gt;Sorting backends by name has a real effect only if using a distinct &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#backend-server-naming&#34;&gt;backend-server-naming&lt;/a&gt;
option, because the default value builds the server name using a numeric sequence.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#backend-server-naming&#34;&gt;backend-server-naming&lt;/a&gt; configuration key&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#sort-endpoints-by&#34;&gt;sort-endpoints-by&lt;/a&gt; command-line option&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;sort-endpoints-by&#34;&gt;&amp;ndash;sort-endpoints-by&lt;/h2&gt;

&lt;p&gt;Since v0.11&lt;/p&gt;

&lt;p&gt;Defines in which order the endpoints of a backend should be sorted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;endpoint&lt;/code&gt;: this is the default value, uses the same order declared in the Kubernetes&amp;rsquo; Endpoint objects. &lt;code&gt;ep&lt;/code&gt; is an alias to &lt;code&gt;endpoint&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip&lt;/code&gt;: sort endpoints by the IP and port of the destination server&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: sort the endpoints by the name given to the server, see also &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#backend-server-naming&#34;&gt;backend-server-naming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;random&lt;/code&gt;: randomly shuffle the endpoints every time haproxy needs to be reloaded, this option avoids to always send requests to the same endpoints depending on the balancing algorithm&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;stats&#34;&gt;Stats&lt;/h2&gt;

&lt;p&gt;Configures an endpoint with statistics, debugging and health checks. The following URIs are provided:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/healthz&lt;/code&gt;: a healthz URI for the haproxy-ingress&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/metrics&lt;/code&gt;: Prometheus compatible metrics exporter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/acme/check&lt;/code&gt; (&lt;code&gt;POST&lt;/code&gt;): starts check for missing, expiring or outdated certificates controlled by acme client. Should be issued in the leader.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/debug/pprof&lt;/code&gt;: profiling tools&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/build&lt;/code&gt;: build information - controller name, version, git commit hash and repository&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/stop&lt;/code&gt;: stops haproxy-ingress controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--health-check-path&lt;/code&gt;: Defines the URL to be used as a health check for the default server.  Defaults to &lt;code&gt;/healthz&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--healthz-port&lt;/code&gt;: Defines the port number haproxy-ingress should listen to. Defaults to &lt;code&gt;10254&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--profiling&lt;/code&gt;: Configures if the profiling URI should be enabled. Defaults to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--stats-collect-processing-period&lt;/code&gt;: Defines the interval between two consecutive readings of haproxy&amp;rsquo;s &lt;code&gt;Idle_pct&lt;/code&gt;, used to generate &lt;code&gt;haproxy_processing_seconds_total&lt;/code&gt; metric. haproxy updates Idle_pct every &lt;code&gt;500ms&lt;/code&gt;, which makes that the best configuration value, and it&amp;rsquo;s also the default if not configured. Values higher than &lt;code&gt;500ms&lt;/code&gt; will produce a less accurate collect. Change to 0 (zero) to disable this metric.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;sync-period&#34;&gt;&amp;ndash;sync-period&lt;/h2&gt;

&lt;p&gt;Configures the default resync period of the Kubernetes client&amp;rsquo;s informer factory. Defaults to 10
minutes.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;tcp-services-configmap&#34;&gt;&amp;ndash;tcp-services-configmap&lt;/h2&gt;

&lt;p&gt;Configure &lt;code&gt;--tcp-services-configmap&lt;/code&gt; argument with &lt;code&gt;namespace/configmapname&lt;/code&gt; resource with TCP
services and ports that HAProxy should listen to. Use the HAProxy&amp;rsquo;s port number as the key of the
ConfigMap.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
&lt;p&gt;Starting on v0.13, &lt;code&gt;--tcp-services-configmap&lt;/code&gt; is deprecated. Use &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#tcp-services&#34;&gt;&lt;code&gt;tcp-service-port&lt;/code&gt;&lt;/a&gt; configuration key instead.&lt;/p&gt;

&lt;p&gt;The documentation refers to &amp;ldquo;ConfigMap based TCP&amp;rdquo; when taking about this configuration options, and it refers to &amp;ldquo;TCP Service&amp;rdquo; when talking about to the new, annotation based TCP configuration.&lt;/p&gt;

&lt;/div&gt;


&lt;p&gt;The value of the ConfigMap entry is a colon separated list of the following arguments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;namespace&amp;gt;/&amp;lt;service-name&amp;gt;&lt;/code&gt;, mandatory, is the well known notation of the service that will receive incoming connections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;portnumber&amp;gt;&lt;/code&gt;, mandatory, is the port number the upstream service is listening - this is not related to the listening port of HAProxy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;in-proxy&amp;gt;&lt;/code&gt;, optional, should be defined as &lt;code&gt;PROXY&lt;/code&gt; if HAProxy should expect requests using the &lt;a href=&#34;https://www.haproxy.org/download/2.0/doc/proxy-protocol.txt&#34;&gt;PROXY&lt;/a&gt; protocol. Leave empty to not use PROXY protocol. This is usually used only if there is another load balancer in front of HAProxy which supports the PROXY protocol. PROXY protocol v1 and v2 are supported.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;out-proxy&amp;gt;&lt;/code&gt;, optional, should be defined as &lt;code&gt;PROXY&lt;/code&gt; or &lt;code&gt;PROXY-V2&lt;/code&gt; if the upstream service expect connections using the PROXY protocol v2. Use &lt;code&gt;PROXY-V1&lt;/code&gt; instead if the upstream service only support v1 protocol. Leave empty to connect without using the PROXY protocol.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;namespace/secret-name&amp;gt;&lt;/code&gt;, optional, used to configure SSL/TLS over the TCP connection. Secret should have &lt;code&gt;tls.crt&lt;/code&gt; and &lt;code&gt;tls.key&lt;/code&gt; pair used on TLS handshake. Leave empty to not use ssl-offload. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing both certificate and private key in PEM format, eg &lt;code&gt;file:///dir/crt.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;check-interval&amp;gt;&lt;/code&gt;, added in v0.10, optional and defaults to &lt;code&gt;2s&lt;/code&gt;, configures a TCP check interval. Declare &lt;code&gt;-&lt;/code&gt; (one single dash) as the time to disable it. Valid time is a number and a mandatory suffix: &lt;code&gt;us&lt;/code&gt;, &lt;code&gt;ms&lt;/code&gt;, &lt;code&gt;s&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt;, &lt;code&gt;h&lt;/code&gt; or &lt;code&gt;d&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;namespace/secret-name&amp;gt;&lt;/code&gt;, added in v0.10, optional, used to configure SSL/TLS client verification over the TCP connection. Secret should have &lt;code&gt;ca.crt&lt;/code&gt; and optional &lt;code&gt;ca.crl&lt;/code&gt;. Leave empty to not use ssl client verification. A filename prefixed with &lt;code&gt;file://&lt;/code&gt; can be used containing the CA bundle in PEM format, and optionally followed by a comma and the filename with the crl, eg &lt;code&gt;file:///dir/ca.pem&lt;/code&gt; or &lt;code&gt;file:///dir/ca.pem,/dir/crl.pem&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Optional fields can be skipped using consecutive colons.&lt;/p&gt;

&lt;p&gt;In the example below:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;...
data:
  &amp;quot;3306&amp;quot;: &amp;quot;default/mysql:3306::::-&amp;quot;
  &amp;quot;5432&amp;quot;: &amp;quot;default/pgsql:5432::::1s&amp;quot;
  &amp;quot;8000&amp;quot;: &amp;quot;system-prod/http:8000::PROXY-V1&amp;quot;
  &amp;quot;9900&amp;quot;: &amp;quot;system-prod/admin:9900:PROXY::system-prod/tcp-9900&amp;quot;
  &amp;quot;9990&amp;quot;: &amp;quot;system-prod/admin:9999::PROXY-V2&amp;quot;
  &amp;quot;9995&amp;quot;: &amp;quot;system-prod/admin:9900:::system-prod/tcp-9995::system-prod/tcp-9995-ca&amp;quot;
  &amp;quot;9999&amp;quot;: &amp;quot;system-prod/admin:9999:PROXY:PROXY&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;HAProxy will listen 7 new ports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;3306&lt;/code&gt; will proxy to a &lt;code&gt;mysql&lt;/code&gt; service on &lt;code&gt;default&lt;/code&gt; namespace. Check interval is disabled.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5432&lt;/code&gt; will proxy to a &lt;code&gt;pgsql&lt;/code&gt; service on &lt;code&gt;default&lt;/code&gt; namespace. Check interval is defined to run on every second.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;8000&lt;/code&gt; will proxy to &lt;code&gt;http&lt;/code&gt; service, port &lt;code&gt;8000&lt;/code&gt;, on the &lt;code&gt;system-prod&lt;/code&gt; namespace. The upstream service will expect connections using the PROXY protocol but it only supports v1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9900&lt;/code&gt; will proxy to &lt;code&gt;admin&lt;/code&gt; service, port &lt;code&gt;9900&lt;/code&gt;, on the &lt;code&gt;system-prod&lt;/code&gt; namespace. Clients should connect using the PROXY protocol v1 or v2. Upcoming connections should be encrypted, HAProxy will ssl-offload data using crt/key provided by &lt;code&gt;system-prod/tcp-9900&lt;/code&gt; secret.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9990&lt;/code&gt; and &lt;code&gt;9999&lt;/code&gt; will proxy to the same &lt;code&gt;admin&lt;/code&gt; service and &lt;code&gt;9999&lt;/code&gt; port and the upstream service will expect connections using the PROXY protocol v2. The HAProxy frontend, however, will only expect PROXY protocol v1 or v2 on it&amp;rsquo;s port &lt;code&gt;9999&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9995&lt;/code&gt; will proxy to &lt;code&gt;admin&lt;/code&gt; service, port &lt;code&gt;9900&lt;/code&gt;, on the &lt;code&gt;system-prod&lt;/code&gt; namespace. Upcoming connections should be encrypted, HAProxy will ssl-offload data using crt/key provided by &lt;code&gt;system-prod/tcp-9995&lt;/code&gt; secret. Furthermore, clients must present a certificate that will be valid under the certificate authority (and optional certificate revocation list) provded in the &lt;code&gt;system-prod/tcp-9995-ca&lt;/code&gt; secret.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Check interval was added in v0.10 and defaults to &lt;code&gt;2s&lt;/code&gt;. All declared services has check interval enabled, except &lt;code&gt;3306&lt;/code&gt; which disabled it.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#tcp-services&#34;&gt;TCP Services&lt;/a&gt; configuration keys&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;update-status&#34;&gt;&amp;ndash;update-status&lt;/h2&gt;

&lt;p&gt;Indicates whether the ingress controller should update the &lt;code&gt;status&lt;/code&gt; attribute of all the Ingress
resources that this controller is tracking.  Defaults to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;update-status-on-shutdown&#34;&gt;&amp;ndash;update-status-on-shutdown&lt;/h2&gt;

&lt;p&gt;Indicates whether the ingress controller should update the &lt;code&gt;status&lt;/code&gt; attribute of all the Ingress
resources that this controller is tracking when the controller is being stopped.  Defaults to
&lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;v&#34;&gt;&amp;ndash;v&lt;/h2&gt;

&lt;p&gt;Configures the log verbosity.  &lt;code&gt;1&lt;/code&gt; is the default value and outputs only errors, warnings and a few
update events.  &lt;code&gt;2&lt;/code&gt; is a good balance between low verbosity and rich details about controller
events.  &lt;code&gt;3&lt;/code&gt; is also available and provides even more details.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;validate-config&#34;&gt;&amp;ndash;validate-config&lt;/h2&gt;

&lt;p&gt;Determines whether the resulting configuration files should be validated when a dynamic update was
applied. Default value is &lt;code&gt;false&lt;/code&gt;, which means the validation will only happen when HAProxy needs to
be reloaded.&lt;/p&gt;

&lt;p&gt;If validation fails, HAProxy Ingress will log the error and set the metric
&lt;code&gt;haproxyingress_update_success&lt;/code&gt; to zero, indicating failure.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;verify-hostname&#34;&gt;&amp;ndash;verify-hostname&lt;/h2&gt;

&lt;p&gt;Ingress resources has &lt;code&gt;spec/tls[]/secretName&lt;/code&gt; attribute to override the default X509 certificate.
As a default behavior the certificates are validated against the hostname in order to match the
SAN extension or CN (CN only up to &lt;code&gt;v0.4&lt;/code&gt;). Invalid certificates, ie certificates which doesn&amp;rsquo;t
match the hostname are discarded and a warning is logged into the ingress controller logging.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;--verify-hostname=false&lt;/code&gt; argument to bypass this validation. If used, HAProxy will provide
the certificate declared in the &lt;code&gt;secretName&lt;/code&gt; ignoring if the certificate is or is not valid.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;version&#34;&gt;&amp;ndash;version&lt;/h2&gt;

&lt;p&gt;Show release information about the ingress controller.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;wait-before-shutdown&#34;&gt;&amp;ndash;wait-before-shutdown&lt;/h2&gt;

&lt;p&gt;If argument &lt;code&gt;--wait-before-shutdown&lt;/code&gt; is defined, controller will wait defined time in seconds
before it starts shutting down components when SIGTERM was received. By default, it&amp;rsquo;s 0, which means
the controller starts shutting down itself right after signal was sent.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;wait-before-update&#34;&gt;&amp;ndash;wait-before-update&lt;/h2&gt;

&lt;p&gt;Since v0.11&lt;/p&gt;

&lt;p&gt;Defines the amount of time to wait before start a reconciliation event and update haproxy.
The purpose of this delay is to group all the notifications of a batch update and apply pending
changes in one single shot. The default value is &lt;code&gt;200ms&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;watch-gateway&#34;&gt;&amp;ndash;watch-gateway&lt;/h2&gt;

&lt;p&gt;Since v0.13&lt;/p&gt;

&lt;p&gt;Enables Gateway API watch and parse. The Gateway API CRDs should be installed before enable
this option. See also the Gateway API configuration &lt;a href=&#34;/v0.13/v0.13/docs/configuration/gateway-api/&#34;&gt;doc&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;watch-namespace&#34;&gt;&amp;ndash;watch-namespace&lt;/h2&gt;

&lt;p&gt;By default the proxy will be configured using all namespaces from the Kubernetes cluster. Use
&lt;code&gt;--watch-namespace&lt;/code&gt; with the name of a namespace to watch and build the configuration of a
single namespace.&lt;/p&gt;

&lt;p&gt;You may also want to use &lt;code&gt;--force-namespace-isolation&lt;/code&gt; to completely disallow referencing secrets,
configmaps or the default backend service located in a different namespace than specified with
&lt;code&gt;--watch-namespace&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Template</title>
      <link>/v0.13/docs/configuration/template/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v0.13/docs/configuration/template/</guid>
      <description>
        
        
        &lt;p&gt;Change the default templates mounting a new template file using a ConfigMap.
Note that in the current version, updates to the ConfigMap will not update the
in-memory parsed template.&lt;/p&gt;

&lt;p&gt;All templates support &lt;a href=&#34;https://masterminds.github.io/sprig/&#34;&gt;Sprig&lt;/a&gt; template library.
This library provides a group of commonly used template functions to work with dictionaries,
lists, math etc.&lt;/p&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Note&lt;/h4&gt;
Starting from v0.11, all template files were moved from &lt;code&gt;/etc/haproxy&lt;/code&gt; to &lt;code&gt;/etc/templates&lt;/code&gt;. Change to an older doc version if using HAProxy Ingress up to v0.10.
&lt;/div&gt;


&lt;p&gt;Overwriting a template file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The links below reference the &lt;code&gt;master&lt;/code&gt; branch, change to the same tag of your HAProxy Ingress version.&lt;/li&gt;
&lt;li&gt;Change to the &lt;code&gt;Raw&lt;/code&gt; view&lt;/li&gt;
&lt;li&gt;Copy the whole file and edit it to fit your needs&lt;/li&gt;
&lt;li&gt;Paste the content to a ConfigMap, use the file name as the content key&lt;/li&gt;
&lt;li&gt;Mount the ConfigMap into the Mounting directory (see below) of the HAProxy Ingress pod&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Warning&lt;/h4&gt;
Consider overwriting the template files as a last resort. Templates change a lot between HAProxy Ingress versions and the overwrite should be updated on every controller update. Try to use a &lt;a href=&#34;/v0.13/v0.13/docs/configuration/keys/#configuration-snippet&#34;&gt;configuration snippet&lt;/a&gt; instead or file a new &lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/issues/new?template=fr.md&#34;&gt;feature request&lt;/a&gt;.
&lt;/div&gt;


&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mounting directory (v0.11+)&lt;/th&gt;
&lt;th&gt;ConfigMap keys&lt;/th&gt;
&lt;th&gt;Source (v0.11+)&lt;/th&gt;
&lt;th&gt;Source (up to v0.10)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/etc/templates/haproxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;haproxy.tmpl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/blob/master/rootfs/etc/templates/haproxy/haproxy.tmpl&#34;&gt;haproxy.tmpl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/blob/release-0.10/rootfs/etc/haproxy/template/haproxy.tmpl&#34;&gt;haproxy.tmpl&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/etc/templates/modsecurity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;modsecurity.tmpl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/blob/master/rootfs/etc/templates/modsecurity/modsecurity.tmpl&#34;&gt;modsecurity.tmpl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/jcmoraisjr/haproxy-ingress/blob/release-0.10/rootfs/etc/haproxy/modsecurity/spoe-modsecurity.tmpl&#34;&gt;spoe-modsecurity.tmpl&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
  </channel>
</rss>
