<p>on microsoft <a href="https://learn.microsoft.com/en-us/azure/aks/ingress-internal-ip" rel="nofollow noreferrer">docs</a> I found that I should define this Helm YAML file for creating Kubernetes Ingress Controller:</p>
<pre><code>controller:
  service:
    loadBalancerIP: 10.240.0.42
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: &quot;true&quot;
</code></pre>
<p>So you can easily notice it DOES NOT have usual Kubernetes <strong>apiVersion and kind</strong> specification.
and after, on the same link that I need to execute the helm command to create Ingress:</p>
<pre><code>helm install nginx-ingress ingress-nginx/ingress-nginx \
    -f internal-ingress.yaml \
..............
</code></pre>
<p>As you see - suggested Helm file is not very usual, but I would like to stick to those official Microsoft instructions!
Again, it does not have specification for creating Ingress Controller using the regular apiVersion and kind notation like on many links and examples that can be found on the internet.</p>
<p><a href="https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-service.yaml" rel="nofollow noreferrer">https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-service.yaml</a>
<a href="https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/" rel="nofollow noreferrer">https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/</a></p>
<p><a href="https://stackoverflow.com/questions/56243121/can-i-set-custom-ports-for-a-kubernetes-ingress-to-listen-on-besides-80-443">Can I set custom ports for a Kubernetes ingress to listen on besides 80 / 443?</a></p>
<p>So I really feel very very confused!!! Can you please help me on this - I need to set it's Port but I really could not find specification documentation and examples for this one YAML Microsoft example which actually works!!!</p>
<pre><code>controller:
  service:
    loadBalancerIP: 10.240.0.42
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: &quot;true&quot;
</code></pre>
<p>Where and how I can find correct syntax how I can &quot;translate&quot; regular &quot;apiVersion&quot; and &quot;kind&quot; specification into this?</p>
<p>Why they are making confusion in this way with this different format???
Please help! Thanks</p>

<p>The <code>-f</code> does not set a &quot;manifest&quot; as stated in the Microsoft docs. As per <code>helm install --help</code>:</p>
<blockquote>
<p><code>-f</code>, <code>--values</code> strings               specify values in a YAML file
or a URL (can specify multiple)</p>
</blockquote>
<p>The default <a href="https://helm.sh/docs/chart_template_guide/values_files/" rel="nofollow noreferrer">values file</a> contains the values to be passed into the chart.</p>
<p>User-supplied values with <code>-f</code> are merged with the default value files to generate the final manifest. The precedence order is:</p>
<blockquote>
<ul>
<li>The values.yaml file in the chart</li>
<li>If this is a subchart, the values.yaml file of a parent chart</li>
<li>A values file if passed into helm install or helm upgrade with the -f flag (helm install -f myvals.yaml ./mychart)</li>
<li>Individual parameters passed with --set (such as helm install --set foo=bar ./mychart)</li>
</ul>
</blockquote>
<blockquote>
<p>The list above is in order of specificity: values.yaml is the default, which can be overridden by a parent chart's values.yaml, which can in turn be overridden by a user-supplied values file, which can in turn be overridden by --set parameters.</p>
</blockquote>
<p>What are you doing is overriding the <code>controller</code> value on top of the default values file. You can find the original/default values for the <em>ingress-nginx</em> chart <a href="https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/values.yaml" rel="nofollow noreferrer">here</a>.</p>
