Kako implementirati Nginx na Kubernetes klaster


U našem prošlom članku raspravljali smo o tome kako postaviti i pokrenuti Kubernetes klaster, raspravimo o tome kako možemo implementirati uslugu NGINX na našem klasteru.

Pokrenut ću ovu implementaciju na virtualnom stroju koji hostira javni pružatelj usluga u oblaku. Kao što je slučaj s mnogim javnim uslugama u oblaku, mnogi općenito održavaju javnu i privatnu IP shemu za svoje virtualne strojeve.

Okruženje za testiranje

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

Implementacija NGINX-a na Kubernetes klasteru

Pokrenut ćemo ovu implementaciju s glavnog čvora.

Počnimo s provjerom statusa klastera. Svi vaši čvorovi trebaju biti u stanju SPREMNO.

kubectl get nodes

Izrađujemo implementaciju NGINX pomoću slike NGINX.

kubectl create deployment nginx --image=nginx

Sada možete vidjeti stanje svoje implementacije.

kubectl get deployments

Ako želite vidjeti više pojedinosti o svojoj implementaciji, možete pokrenuti naredbu describe. Na primjer, moguće je odrediti koliko je replika implementacije pokrenuto. U našem slučaju, očekujemo da ćemo vidjeti repliku 1 koja radi (tj. 1/1 replike).

kubectl describe deployment nginx

Sada kada je vaša implementacija Nginxa aktivna, možda ćete htjeti izložiti uslugu NGINX javnom IP-u dostupnom na internetu.

Izlaganje vaše Nginx usluge javnoj mreži

Kubernetes nudi nekoliko opcija prilikom izlaganja vaše usluge na temelju značajke pod nazivom Kubernetes Service-types, a one su:

  1. IP klastera – Ova vrsta usluge općenito izlaže uslugu na internom IP-u, dostupnom samo unutar klastera, a moguće samo unutar čvorova klastera.
  2. NodePort – Ovo je najosnovnija opcija izlaganja vašoj usluzi tako da bude dostupna izvan vašeg klastera, na određenom priključku (koji se naziva NodePort) na svakom čvoru u klasteru. Ubrzo ćemo ilustrirati ovu opciju.
  3. LoadBalancer – Ova opcija koristi vanjske usluge balansiranja opterećenja koje nude različiti davatelji kako bi se omogućio pristup vašoj usluzi. Ovo je pouzdanija opcija kada razmišljate o visokoj dostupnosti svoje usluge i ima više značajki osim zadanog pristupa.
  4. ExternalName – Ova usluga preusmjerava promet na usluge izvan klastera. Kao takva, usluga je mapirana na DNS naziv koji bi mogao biti hostiran iz vašeg klastera. Važno je napomenuti da ovo ne koristi proxy.

Zadana vrsta usluge je ClusterIP.

U našem scenariju želimo koristiti NodePort vrstu usluge jer imamo i javnu i privatnu IP adresu i za sada nam ne treba vanjski balanser opterećenja. S ovom vrstom 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 je li stranica Nginx dostupna na svim čvorovima pomoću naredbe curl.

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

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

Dosezanje efemernih JAVNIH IP adresa

Kao što ste možda primijetili, Kubernetes prijavljuje da nemam registriran javni javni IP, ili bolje rečeno nema registriran VANJSKI IP.

kubectl get svc

Provjerimo je li doista istina da nemam VANJSKI IP priključen na svoja sučelja pomoću IP naredbe.

ip a

Kao što vidite, nema javne IP adrese.

Kao što je ranije spomenuto, trenutno izvodim ovu implementaciju na Virtualnom stroju koji nudi pružatelj usluga javnog oblaka. Dakle, iako nijednom određenom sučelju nije dodijeljen javni IP, pružatelj VM izdao je Efemernu vanjsku IP adresu.

Efemerna vanjska IP adresa je privremena IP adresa koja ostaje pripojena na VM dok se virtualna instanca ne zaustavi. Kada se virtualna instanca ponovno pokrene, dodjeljuje se novi vanjski IP. 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 taj što je Efemerni javni IP jednostavno proširenje (ili proxy) privatnog IP-a, i iz tog razloga će usluga pristupiti samo na portu 30386. To znači da će se usluzi pristupiti na URL-u , to jest 104.197.170.99:30386, što ako označite Vašem pregledniku, trebali biste moći vidjeti stranicu dobrodošlice.

Time smo uspješno implementirali NGINX na našem Kubernetes klasteru s 3 čvora.