<p>I have a Kubernetes cluster (v. 1.22) and inside it I have Nginx ingress controller deployed. I have found I could <a href="https://kubernetes.github.io/ingress-nginx/how-it-works/#when-a-reload-is-required" rel="noreferrer">reload my ingress</a> in several situations:
The next list describes the scenarios when a reload is required:</p>
<blockquote>
<ul>
<li>New Ingress Resource Created.</li>
<li>TLS section is added to existing Ingress.</li>
<li>Change in Ingress annotations that impacts more than just upstream configuration. For instance load-balance annotation does not require a reload.</li>
<li>A path is added/removed from an Ingress.</li>
<li>An Ingress, Service, Secret is removed.</li>
<li>Some missing referenced object from the Ingress is available, like a Service or Secret.</li>
<li>A Secret is updated.</li>
</ul>
</blockquote>
<p>My ingress now using only HTTP traffic and I want to add TLS section to existing Ingress.</p>
<p><strong>So, my question is: What should I exactly do to reload my ingress?</strong></p>
<p>I cannot find any information in docs or other places. Any suggestion is appreciated!</p>

<blockquote>
<p><strong>What should I exactly do to reload my ingress?</strong></p>
</blockquote>
<p>You just need to update the ingress, in your case you just need to add the TLS section is to existing Ingress.</p>
<p>Then (automatically) the ingress controller should find the differences (as <a href="https://stackoverflow.com/users/11344502/anemyte">anemyte</a> says in its answer) and update the ingress. From now on, you will be able to use TLS.</p>
<p>In general, this should all happen automatically. In theory, this could also be done manually, although it is not recommended. It is described <a href="https://github.com/kubernetes/ingress-nginx/issues/2612" rel="noreferrer">in this topic</a>.</p>
<hr />
<p><strong>EDIT:</strong></p>
<p>I have reproduced this situation.
First I have created simple ingress with following <code>ingress.yaml</code>:</p>
<pre class="lang-yaml prettyprint-override"><code>apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ing-1
spec:
  ingressClassName: nginx
  rules:
    - host: www.example.com
      http:
        paths:
          - backend:
              service:
                name: app-1
                port:
                  number: 80
            path: /
            pathType: Prefix
</code></pre>
<p>Then I have run <code>kubectl get ingress</code> and here is the output:</p>
<pre><code>NAME    CLASS   HOSTS             ADDRESS        PORTS     AGE
ing-1   nginx   www.example.com   35.X.X.X       80        3m
</code></pre>
<p>In this step I had working ingress without TLS (only working port 80). Then I have created  <code>tls.yaml</code> for TLS (I have used self signed certs, you need to use your certs and domain):</p>
<pre class="lang-yaml prettyprint-override"><code>apiVersion: v1
kind: Secret
metadata:
  name: tls
data:
  tls.crt: |
    &lt;my cert&gt;
  tls.key: |
    &lt;my key&gt;
type: kubernetes.io/tls
</code></pre>
<p>I have run in by <code>kubectl apply -f tls.yaml</code> and then I had changed <code>ingress.yaml</code> as below:</p>
<pre class="lang-yaml prettyprint-override"><code>apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ing-1
spec:
  ingressClassName: nginx
  rules:
    - host: www.example.com
      http:
        paths:
          - backend:
              service:
                name: app-1
                port:
                  number: 80
            path: /
            pathType: Prefix
    # This section is only required if TLS is to be enabled for the Ingress
  tls:
   - hosts:
     - www.example.com
     secretName: tls
</code></pre>
<p>I have added the TLS section. Then I have run <code>kubectl apply -f ingress.yaml</code> and after few second I could see this output when running <code>kubectl get ingress</code>:</p>
<pre><code>NAME    CLASS   HOSTS             ADDRESS        PORTS     AGE
ing-1   nginx   www.example.com   35.239.7.126   80, 443   18m
</code></pre>
<p>TLS is working. In the logs I can see this message:</p>
<pre><code>Event(v1.ObjectReference{Kind:&quot;Ingress&quot;, Namespace:&quot;default&quot;, Name:&quot;ing-1&quot;, UID:&quot;84966fae-e135-47bb-8110-bf372de912c8&quot;, APIVersion:&quot;networking.k8s.io/v1&quot;, ResourceVersion:&quot;11306&quot;, FieldPath:&quot;&quot;}): type: 'Normal' reason: 'Sync' Scheduled for sync
</code></pre>
<p>Ingress reloaded automatically :)</p>
