Deploying the ingress controller for Kubernetes
To deploy the ingress controller for Rancher-based Kubernetes
If you have the ingress-nginx namespace, delete it by running the following commands:
kubectl delete ds -n ingress-nginx nginx-ingress-controller
kubectl -n ingress-nginx delete svc ingress-nginx-controller-admission
kubectl delete clusterrole ingress-nginx
kubectl delete ClusterRoleBinding ingress-nginx
kubectl delete IngressClass nginx
kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission
kubectl delete ns ingress-nginxDownload the psp.yaml file from github by using the following command:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/docs/examples/psp/psp.yamlIf you have the restricted-psp property enabled by default, apply the psp.yaml file by using the following command:
kubectl apply -f psp.yamlGet the deploy.yaml file from github by using the following command:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml- In the deploy.yaml file, change the value for the kind parameter for the ingress-nginx-controller from Deployment to DaemonSet.
Note that the namespace for the ingress controller is ingress-nginx. Apply the deploy.yaml file by using the following command:
kubectl apply -f deploy.yamlCreate a secret with the certificate and key to be mounted on the ingress controller pods by using the following command:
kubectl create secret tls my-tls-secret --cert=/path/to/cert.pem --key=/path/to/privkey.pem -n ingress-nginx- Edit the daemonset as described below:
- Add the secret that you created in the args section.
Set the ingress-class parameter according to your requirement.
kubectl edit daemonset ingress-nginx-controller -n ingress-nginx
...
spec:
containers:
- args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
- --election-id=ingress-controller-leader
- --controller-class=k8s.io/ingress-nginx
- --ingress-class=nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
- --default-ssl-certificate=ingress-nginx/my-tls-secret
...
Configure the ingress controller.
- Verify that the pods are running on each worker node.
Update the service ingress-nginx-controller and add load balancer IP as an external IP by using the following command:
kubectl patch service/ingress-nginx-controller -n ingress-nginx -p '{"spec":{"externalIPs":["xxx.xx.xx.xxx"]}}'Update the load balancer settings to point to the correct ports of ingress-nginx-controller service. Check the ingress-nginx-controller service ports by using the following command:
kubectl -n ingress-nginx get svcExample output:
For example, you will see output like below:
$ kubectl -n ingress-nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.43.43.12 XXX.XXX.XXX.XXX 80:31764/TCP,443:31864/TCP 24h
ingress-nginx-controller-admission ClusterIP 10.43.46.181 <none> 443/TCP 24h