<p>I have a GKE cluster, external domain name, and letsencrypt certs.
When I am using a Load balancer and instruct pods to use certs that I generate using certbot then performance is quite good. But I have to renew certs manually which takes a lot of effort.</p>
<p>When using an ingress controller and letting cert-manager update certs by itself then additional hops add latency and make the traffic path more complex. Then the connection is on h2 from client to ingress and then the connection become plain HTTP from ingress to pods.</p>
<p>Is there any way remove the extra hops when using nginx ingress controller and take out the performance issue?</p>

<p>There is no extra hop if you are using the cert-manager with ingress.</p>
<p>You can use the cert-manager it will save the <strong>cert</strong> into <strong>secret</strong> and attach to ingress. However, it's up to you where you are doing TLS termination.</p>
<p>You can also bypass the HTTPS traffic till POD for end-to-end encryption if you are doing TLS termination at ingress level backed traffic till POD will be in plain <strong>HTTP</strong>.</p>
<pre><code>Internet &gt; ingress (TLS in secret) &gt; Plain HTTP if you terminate &gt; service &gt; PODs
</code></pre>
<p>If you want to use the certificate into POD you can mount the secret into POD and that will be further used by the application.</p>
<p><a href="https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod" rel="nofollow noreferrer">https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod</a></p>
<p>If you will use the secret with POD you might need to reload the POD in that case you can use the Reloader to auto roll out the PODs.</p>
<p>Reloader : <a href="https://github.com/stakater/Reloader" rel="nofollow noreferrer">https://github.com/stakater/Reloader</a></p>
