Helm - documentation specification for very unusual and not regular Kubernetes YAML format

2/11/2021

on microsoft docs I found that I should define this Helm YAML file for creating Kubernetes Ingress Controller:

controller:
  service:
    loadBalancerIP: 10.240.0.42
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"

So you can easily notice it DOES NOT have usual Kubernetes apiVersion and kind specification. and after, on the same link that I need to execute the helm command to create Ingress:

helm install nginx-ingress ingress-nginx/ingress-nginx \
    -f internal-ingress.yaml \
..............

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.

https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-service.yaml https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

https://stackoverflow.com/questions/56243121/can-i-set-custom-ports-for-a-kubernetes-ingress-to-listen-on-besides-80-443

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!!!

controller:
  service:
    loadBalancerIP: 10.240.0.42
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"

Where and how I can find correct syntax how I can "translate" regular "apiVersion" and "kind" specification into this?

Why they are making confusion in this way with this different format??? Please help! Thanks

-- AndreyS
azure-aks
kubernetes
kubernetes-helm
nginx-ingress

1 Answer

2/11/2021

The -f does not set a "manifest" as stated in the Microsoft docs. As per helm install --help:

-f, --values strings specify values in a YAML file or a URL (can specify multiple)

The default values file contains the values to be passed into the chart.

User-supplied values with -f are merged with the default value files to generate the final manifest. The precedence order is:

  • The values.yaml file in the chart
  • If this is a subchart, the values.yaml file of a parent chart
  • A values file if passed into helm install or helm upgrade with the -f flag (helm install -f myvals.yaml ./mychart)
  • Individual parameters passed with --set (such as helm install --set foo=bar ./mychart)

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.

What are you doing is overriding the controller value on top of the default values file. You can find the original/default values for the ingress-nginx chart here.

-- Eduardo Baitello
Source: StackOverflow