Ricerca nel sito web

Come distribuire Nginx su un cluster Kubernetes


Nel nostro ultimo articolo, abbiamo discusso come configurare ed eseguire un cluster Kubernetes, parliamo di come possiamo implementare il servizio NGINX sul nostro cluster.

Eseguirò questa distribuzione su una macchina virtuale ospitata da un provider di cloud pubblico. Come accade con molti servizi cloud pubblici, molti generalmente mantengono uno schema IP pubblico e privato per le proprie macchine virtuali.

Ambiente di test

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Distribuzione di NGINX su un cluster Kubernetes

Eseguiremo questa distribuzione dal nodo master.

Iniziamo controllando lo stato del cluster. Tutti i tuoi nodi dovrebbero essere nello stato PRONTO.

kubectl get nodes

Creiamo una distribuzione di NGINX utilizzando l'immagine NGINX.

kubectl create deployment nginx --image=nginx

Ora puoi vedere lo stato della tua distribuzione.

kubectl get deployments

Se desideri visualizzare maggiori dettagli sulla tua distribuzione, puoi eseguire il comando describe. Ad esempio, è possibile determinare quante repliche della distribuzione sono in esecuzione. Nel nostro caso, ci aspettiamo di vedere una replica di 1 in esecuzione (ovvero repliche 1/1).

kubectl describe deployment nginx

Ora che la tua distribuzione Nginx è attiva, potresti voler esporre il servizio NGINX a un IP pubblico raggiungibile su Internet.

Esporre il tuo servizio Nginx alla rete pubblica

Kubernetes offre diverse opzioni quando espone il tuo servizio in base a una funzionalità chiamata Tipi di servizio Kubernetes e sono:

  1. ClusterIP – Questo tipo di servizio generalmente espone il servizio su un IP interno, raggiungibile solo all'interno del cluster e possibilmente solo all'interno dei nodi del cluster.
  2. NodePort: questa è l'opzione più semplice per rendere il tuo servizio accessibile all'esterno del cluster, su una porta specifica (chiamata NodePort) su ogni nodo del cluster. Illustreremo questa opzione a breve.
  3. LoadBalancer: questa opzione sfrutta i servizi esterni di bilanciamento del carico offerti da vari fornitori per consentire l'accesso al tuo servizio. Questa è un'opzione più affidabile quando si pensa alla disponibilità elevata per il tuo servizio e ha più funzionalità oltre all'accesso predefinito.
  4. ExternalName: questo servizio reindirizza il traffico ai servizi esterni al cluster. In quanto tale, il servizio viene quindi mappato su un nome DNS che potrebbe essere ospitato all'esterno del cluster. È importante notare che questo non utilizza il proxy.

Il tipo di servizio predefinito è ClusterIP.

Nel nostro scenario, vogliamo utilizzare il tipo di servizio NodePort perché disponiamo sia di un indirizzo IP pubblico che privato e per il momento non abbiamo bisogno di un bilanciatore del carico esterno. Con questo tipo di servizio, Kubernetes assegnerà questo servizio alle porte nell'intervallo 30000+.

kubectl create service nodeport nginx --tcp=80:80

Esegui il comando get svc per visualizzare un riepilogo del servizio e delle porte esposte.

kubectl get svc

Ora puoi verificare che la pagina Nginx sia raggiungibile su tutti i nodi utilizzando il comando curl.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Come puoi vedere, è possibile raggiungere la pagina “BENVENUTO IN NGINX!”.

Raggiungere indirizzi IP PUBBLICI effimeri

Come avrai notato, Kubernetes segnala che non ho alcun IP pubblico attivo registrato, o meglio nessun IP ESTERNO registrato.

kubectl get svc

Verifichiamo se è effettivamente vero che non ho alcun IP ESTERNO collegato alle mie interfacce utilizzando il comando IP.

ip a

Nessun IP pubblico come puoi vedere.

Come accennato in precedenza, attualmente sto eseguendo questa distribuzione su una macchina virtuale offerta da un provider di cloud pubblico. Pertanto, anche se non esiste un’interfaccia particolare a cui viene assegnato un IP pubblico, il provider della VM ha emesso un indirizzo IP esterno temporaneo.

Un indirizzo IP esterno temporaneo è un indirizzo IP temporaneo che rimane collegato alla VM finché l'istanza virtuale non viene arrestata. Quando l'istanza virtuale viene riavviata, viene assegnato un nuovo IP esterno. In poche parole, è un modo semplice per i fornitori di servizi di sfruttare gli IP pubblici inattivi.

La sfida qui, oltre al fatto che il tuo IP pubblico non è statico, è che l'IP pubblico temporaneo è semplicemente un'estensione (o proxy) dell'IP privato e, per questo motivo, il servizio si accederà solo sulla porta 30386. Ciò significa che si accederà al servizio sull'URL , ovvero 104.197.170.99:30386, che se si seleziona il tuo browser, dovresti essere in grado di vedere la pagina di benvenuto.

Grazie a ciò, abbiamo implementato con successo NGINX sul nostro cluster Kubernetes a 3 nodi.