Kako implementirati Nginx na Kubernetes klaster


U našem posljednjem članku raspravljali smo o tome kako postaviti i pokrenuti Kubernetes klaster, hajde da razgovaramo o tome kako možemo implementirati NGINX uslugu na našem klasteru.

Pokrenut ću ovu implementaciju na virtuelnoj mašini koju hostuje javni provajder u oblaku. Kao što je to slučaj sa mnogim javnim uslugama u oblaku, mnogi generalno održavaju javnu i privatnu IP šemu za svoje virtuelne mašine.

Testing Environment

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

Postavljanje NGINX-a na Kubernetes klaster

Pokrenut ćemo ovu implementaciju iz glavnog čvora.

Započnimo provjerom statusa klastera. Svi vaši čvorovi bi trebali biti u stanju READY.

kubectl get nodes

Kreiramo implementaciju NGINX koristeći sliku NGINX.

kubectl create deployment nginx --image=nginx

Sada možete vidjeti stanje vaše implementacije.

kubectl get deployments

Ako želite vidjeti više detalja o svojoj implementaciji, možete pokrenuti naredbu opiši. Na primjer, moguće je odrediti koliko se replika implementacije izvodi. U našem slučaju, očekujemo da ćemo vidjeti repliku od 1 pokrenute (tj. 1/1 replike).

kubectl describe deployment nginx

Sada je vaša implementacija Nginxa aktivna, možda ćete htjeti izložiti uslugu NGINX javnoj IP adresi dostupnoj na internetu.

Izlaganje vaše Nginx usluge javnoj mreži

Kubernetes nudi nekoliko opcija prilikom izlaganja vaše usluge na osnovu funkcije koja se zove Kubernetes Service-types, a one su:

  1. ClusterIP – Ovaj tip usluge generalno izlaže uslugu na internoj IP adresi, dostupnoj samo unutar klastera, a moguće i samo unutar čvorova klastera.
  2. NodePort – Ovo je najosnovnija opcija izlaganja vašoj usluzi da bude dostupna izvan vašeg klastera, na određenom portu (koji se naziva NodePort) na svakom čvoru u klasteru. Uskoro ćemo ilustrovati ovu opciju.
  3. LoadBalancer – Ova opcija koristi eksterne usluge balansiranja opterećenja koje nude različiti provajderi kako bi se omogućio pristup vašoj usluzi. Ovo je pouzdanija opcija kada razmišljate o visokoj dostupnosti vaše usluge i ima više funkcija osim zadanog pristupa.
  4. ExternalName – Ova usluga preusmjerava saobraćaj na usluge izvan klastera. Kao takva, usluga je tako mapirana na DNS ime koje bi moglo biti hostovano izvan vašeg klastera. Važno je napomenuti da ovo ne koristi proxy.

Zadani tip usluge je ClusterIP.

U našem scenariju želimo koristiti NodePort tip usluge jer imamo i javnu i privatnu IP adresu i za sada nam nije potreban vanjski balanser opterećenja. Sa ovim tipom usluge, Kubernetes će ovu uslugu dodijeliti portovima u rasponu 30000+.

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

Pokrenite naredbu get svc da vidite sažetak usluge i izloženih portova.

kubectl get svc

Sada možete provjeriti da je stranica Nginx dostupna na svim čvorovima koristeći komandu curl.

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

Kao što vidite, stranica “DOBRODOŠLI U NGINX!” može se pristupiti.

Dostizanje efemernih JAVNIH IP adresa

Kao što ste možda primijetili, Kubernetes izvještava da nemam registriran aktivni javni IP, odnosno da nemam registriran VANJSKI IP.

kubectl get svc

Hajde da proverimo da li je zaista tačno, da nemam VANJSKI IP povezan sa mojim interfejsima pomoću IP komande.

ip a

Nema javne IP adrese kao što vidite.

Kao što je ranije spomenuto, trenutno koristim ovu implementaciju na Virtuelnoj mašini koju nudi javni provajder u oblaku. Dakle, iako nema određenog interfejsa kojem je dodijeljena javna IP adresa, dobavljač VM-a je izdao efemernu eksternu IP adresu.

Efemerna eksterna IP adresa je privremena IP adresa koja ostaje vezana za VM dok se virtuelna instanca ne zaustavi. Kada se virtuelna instanca ponovo pokrene, dodeljuje se nova eksterna IP adresa. U osnovi, to je jednostavan način za pružatelje usluga da iskoriste neaktivne javne IP adrese.

Izazov ovdje, osim činjenice da vaš javni IP nije statičan, je u tome što je Efemerni javni IP jednostavno proširenje (ili proxy) privatnog IP-a i iz tog razloga će usluga pristupa se samo na portu 30386. To znači da će se servisu pristupati na URL-u , to jest 104.197.170.99:30386, što ako provjerite Vaš pretraživač, trebali biste biti u mogućnosti da vidite stranicu dobrodošlice.

Uz to, uspješno smo implementirali NGINX na našem Kubernetes klasteru s 3 čvora.