azureacskubernetes-helmkubernetes-ingress

Azure ACS - How to create ingress controller with internal load balancer


I want to create ingress controller in my ACS cluster to access services.

Using helm I can achieve this (with below command), but the ingress controller is exposed to internet through External Load Balancer.

helm install stable/nginx-ingress 

All services in the cluster are internal and dont need to be exposed to internet. They will be accessed from applications running in same vnet.

How do I create a ingress controller that is not public but instead can be accessed through a Internal Load Balancer?


Solution

  • helm fetch stable/nginx-ingress to download the ingress helm chart. Unzip and go to the templates Directory. Edit the controller-service.yaml remove the condition and add the line service.beta.kubernetes.io/azure-load-balancer-internal: "true" it should now look like;

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    labels:
    

    apply the local helm chart and you will get a ingress controller with a internal IP address. perform a kubectl get svc -n xxxxx (namespace you install the nginx-ingress controller into). It should eventually look something like this.

    factual-bat-nginx-ingress-controller LoadBalancer 10.0.65.21 10.136.0.7