<p>Digging into www, didn't found an answer:
I want to know how I can use cert-manager with haproxy-ingress and lets encrypt.</p>

<p>Any documentation / guidelines?</p>

<ol>
<li><p><strong>Deploy Certmanager with</strong>:</p>
<p><code>kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.yaml</code></p>
<p><code>kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.crds.yaml</code></p>
</li>
<li><p><strong>Deploy a ClusterIssuer</strong> (cluster issuers are namespace agnostic)</p>
</li>
</ol>
<pre class="lang-yaml prettyprint-override"><code>cat &gt; prod-issuer.yaml &lt;&lt;EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: email@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: haproxy
EOF
</code></pre>
<p>Apply the cluster issuer with <code>kubectl apply -f prod-issuer.yaml</code></p>
<ol start="3">
<li><strong>Create an Ingress Resource</strong> (namespace gnostic, this example is using Nginx backend service)</li>
</ol>
<pre class="lang-yaml prettyprint-override"><code>cat &gt; nginx-ingress.yaml &lt;&lt;EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-router
  namespace: production
  annotations:
    kubernetes.io/ingress.class: &quot;haproxy&quot;
    cert-manager.io/cluster-issuer: &quot;letsencrypt-prod&quot;
spec:
  tls:
  - hosts:
    - &quot;example.com&quot;
    secretName: nginx-tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - pathType: ImplementationSpecific
        path: &quot;/&quot;
        backend:
          service:
            name: nginx
            port: 
              number: 80
  - host: www.example.com
    http:
      paths:
      - pathType: ImplementationSpecific
        path: &quot;/&quot;
        backend:
          service:
            name: nginx
            port: 
              number: 80
EOF
</code></pre>
<p>Apply the ingress recourse with <code>kubectl apply -f nginx-ingress.yaml</code></p>
<p>The important piece of information here, is that the Haproxy controller does NOT need the annotation <code>acme.cert-manager.io/http01-edit-in-place: &quot;true&quot;</code>
that nginx-ingress controller does. It works as expected without any extra annotations.
When you apply the Ingress Resourse to the cluster, the certificate will be issued in 1-2 minutes tops.
Use <code>kubectl describe certificate nginx-tls-secret -n production</code> to check the status of the certificate, and look at the event to get the certificate.</p>
<p>For more debugging info incase something went wrong, refer here <a href="https://cert-manager.io/docs/faq/acme/" rel="nofollow noreferrer">https://cert-manager.io/docs/faq/acme/</a></p>
