Ingresso è uno dei concetti importanti in Kubernetes, che consente agli utenti esterni di accedere all'applicazione containerizzata utilizzando FQDN (nome di dominio completo). Sebbene Ingress non sia abilitato e installato per impostazione predefinita nel cluster Kubernetes. Dobbiamo abilitare questo concetto fondamentale utilizzando controller di ingresso di terze parti come Nginx, Traefik, HAProxy e Istio ecc.
In questo tutorial dimostreremo come configurare e utilizzare il controller di ingresso NGINX in Kubernetes Cluster.
Come nell'immagine sopra, gli utenti esterni accedono alle applicazioni utilizzando il controller di ingresso NGINX tramite FQDN e il controller di ingresso interno instrada la richiesta al servizio, quindi il servizio instrada la richiesta ai punti di back-end o ai pod.
Abilita il controller di ingresso NGINX in Minikube
Minikube è un cluster Kubernetes a nodo singolo, possiamo facilmente abilitare il controller di ingresso nginx in minikube eseguendo "minikube addons comando ".
Esegui il comando seguente per verificare lo stato del controller di ingresso,
# minikube addons list
Esegui il seguente comando minikube per abilitare il controller di ingresso,
[[email protected] ~]# minikube addons enable ingress * The 'ingress' addon is enabled [[email protected] ~]#
Se eseguiamo nuovamente il comando "minikube addons list", questa volta dobbiamo vedere che lo stato di ingresso è abilitato.
Esegui il seguente comando kubectl per verificare se il pod del controller di ingresso è in esecuzione o meno.
[[email protected] ~]# kubectl get pods --all-namespaces | grep -i nginx-controller kube-system ingress-nginx-controller-7bb4c67d67-gkjj5 1/1 Running 0 20m [[email protected] ~]#
L'output sopra conferma che nginx-controller è stato abilitato e avviato correttamente il suo pod nello spazio dei nomi kube-system.
Installazione del controller di ingresso nel cluster Kubernetes (baremetal)
Nota: Presumo che il cluster Kubernetes sia attivo e funzionante.
Accedi al nodo master o al piano di controllo ed esegui il seguente comando kubectl per installare ingress.
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/baremetal/deploy.yaml
Uscita,
Verifica lo stato Ingress, esegui sotto i comandi kubectl
[[email protected] ~]$ kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-4phb2 0/1 Completed 0 8m53s ingress-nginx-admission-patch-m9t8z 0/1 Completed 2 8m53s ingress-nginx-controller-f9d6fc8d8-r92jd 1/1 Running 0 8m53s [[email protected] ~]$ $ kubectl get all -n ingress-nginx
Perfetto, l'output sopra conferma che il controller Ingress è stato installato correttamente.
Test del controller di ingresso
Per testare il controller Ingress, aggiungi prima le seguenti voci in haproxy . Il mio pod del controller di ingresso è in esecuzione su worker-node2, ecco perché ho menzionato worker-node2 insieme a NodePort.
Salva e chiudi il file, quindi riavvia il servizio haproxy.
Crea una distribuzione basata su nginx con il nome "myapp"
$ kubectl create deployment myapp --image=nginx deployment.apps/myapp created $
Crea un servizio esponendo la distribuzione con il tipo "NodePort"
$ kubectl expose deployment myapp --name=myapp --type=NodePort --port=80 service/myapp exposed $
Verifica lo stato di distribuzione e servizio, esegui
$ kubectl get deployments myapp $ kubectl get svc myapp
uscita,
Crea risorsa Ingress per myapp
Crea il file demo-ingress.yaml con il seguente contenuto. Quando applichiamo questo file, creerà una risorsa di ingresso che consentirà all'applicazione di accedere dall'esterno del cluster kubernetes tramite il nome host. Quindi, in questo caso, il nome host dell'applicazione è "myapp.example.com"
$ vi demo-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-demo spec: ingressClassName: nginx rules: - host: "myapp.example.com" http: paths: - pathType: Prefix path: / backend: service: name: myapp port: number: 80
salva e chiudi il file.
Esegui sotto il comando kubectl per creare una risorsa di ingresso sopra,
$ kubectl create -f demo-ingress.yaml ingress.networking.k8s.io/ingress-demo created $
Esegui di seguito per verificare lo stato della risorsa di ingresso creata sopra
$ kubectl get ingress ingress-demo $kubectl describe ingress ingress-demo
Perfetto, l'output sopra conferma che le risorse di ingresso sono state create correttamente.
Prima di accedere a questi URL dall'esterno del cluster, assicurati di aggiungere la seguente voce nel file hosts del tuo sistema da dove intendevi accedervi.
192.168.1.240 myapp.example.com
Ora prova ad accedere all'URL dal browser web, digita
http://myapp.example.com
Ottimo, quanto sopra conferma che abbiamo distribuito e configurato correttamente il controller di ingresso nginx in Kubernetes. Condividi i tuoi preziosi feedback e commenti.