Search code examples
nginxkubernetesnginx-ingress

How to deploy nginx-ingress controller to kubernetes master nodes by using "controller.nodeSelector" option?


I need only deploy nginx-ingress controller to kubernetes master nodes, by using Helm chart "ingress-nginx". It provided an option "controller.nodeSelector" to select k8s nodes for deployment. So I want to use this option to select k8s master nodes with label node-role.kubernetes.io/master=, but tried different formats, can't have it work as expected.

Failed case:

helm install --set controller.hostNetwork=true --set controller.hostPort.enabled=true --set controller.extraArgs.enable-ssl-passthrough="" --set controller.replicaCount=1 --set controller.nodeSelector."node-role\.kubernetes\.io/master"="" --namespace rwe ingress-nginx ingress-nginx/ingress-nginx

Could you help advise how to have this option take into effect? Thanks.


Solution

  • First remove the taint from master node to make it schedulable

    kubectl taint node master node-role.kubernetes.io/master:NoSchedule-
    

    Add a label master=true to the master node

    kubectl label nodes master master=true
    

    And then use below helm command. Note --set-string instead of set

    helm install --set controller.hostNetwork=true --set controller.hostPort.enabled=true --set controller.extraArgs.enable-ssl-passthrough="" --set controller.replicaCount=1 --set-string controller.nodeSelector.master=true --namespace rwe ingress-nginx ingress-nginx/ingress-nginx