- Aplikacija, razporejena v gruči Kubernetes, se izvaja kot zbirke.
- Stroki so v bistvu vsebniki, ki so razporejeni na več vozliščih.
- Vozlišča so lahko fizični strežniki ali VM-ji, ki jih ponuja vaš ponudnik gostovanja. Očitno lahko Kubernetes tudi namestite na lokalni strežnik, če tako želite.
- Vsak Pod ima svoj edinstven naslov IP.
- Vaša aplikacija je razdeljena na številne podkomponente, ki jih pogosto imenujemo mikro storitve.
- Za vsako mikrostoritev vaše aplikacije obstaja ustrezna storitev v Kubernetesu.
- V kontekstu Kubernetesa a Storitev izpostavi zbirko strokov preostali gruči kot eno samo abstrakcijo. En sam virtualni IP.
- To pomaga eni storitvi vaše aplikacije komunicirati z drugo storitvijo. To je abstrakcija, ki vam omogoča, da naslovite zbirko strokov, namesto da določite naslov IP stroka, vsakič, ko želite govoriti z njim.
- Storitev Kubernetes deluje tudi kot izravnalnik obremenitve za vse stroke, ki jih predstavlja. Promet se enakomerno porazdeli po vseh vozliščih.
Zaenkrat dobro. Vsaka storitev se lahko pogovarja z drugo storitvijo. Ta komunikacija je možna v celotni gruči Kubernetes
Izpostavljanje storitev
“Če drevo pade v gozd in ni nikogar, ki bi ga slišal, ali se sliši zvok?"
Podobno je, če vaša aplikacija ne služi namenu zunaj gruče Kubernetes, ali je res pomembno, ali je vaša gruča dobro zgrajena ali ne? Verjetno ne.
Za konkreten primer recimo, da imamo klasično spletno aplikacijo, sestavljeno iz vmesnika, napisanega v Nodejsu, in zaledja, napisanega v Pythonu, ki uporablja bazo podatkov MySQL. V svoji gruči Kubernetes razporedite dve ustrezni storitvi.
Izdelate datoteko Docker, ki določa, kako programsko opremo za čelni računalnik zapakirate v vsebnik, in podobno pakirate svoj backend. Nato boste v svoji gruči Kubernetes razporedili dve storitvi, od katerih vsaka za seboj izvaja niz pods. Spletna storitev lahko govori z gručo baz podatkov in obratno.
Vendar Kubernetes nobene od teh storitev (ki so bistvene končne točke HTTP) ne izpostavlja tujini. Kot je navedeno v uradnih dokumentih:
“Predpostavlja se, da imajo storitve navidezne IP-je, ki jih je mogoče usmerjati le v omrežju grozdov"
To je z vidika varnosti povsem smiselno, vaše storitve se lahko med seboj pogovarjajo, vendar grozd zunanjim entitetam ne dovoli neposrednega pogovora s storitvami. Na primer, samo vaša spletna fronta lahko govori s storitvijo baze podatkov, nihče drug pa ne more niti pošiljati zahtev storitvi baze podatkov.
Težava nastane, ko pogledamo primer uporabe čelne storitve. Izpostaviti ga mora preostali javnosti, da lahko končni uporabniki uporabljajo vašo aplikacijo. Takšne storitve izpostavljamo s pomočjo Kubernetes Ingress.
Kubernetes Ingress
Ingress izpostavi poti HTTP in HTTPS zunaj gruče storitvam znotraj gruče. Pravila usmerjanja lahko nadzirate z definiranjem vira Kubernetes Ingress. Toda naredi veliko več kot to. Izpostavitev ene same storitve je mogoče doseči z različnimi drugimi možnostmi, kot sta NodePort ali Load Balancers, vendar te zmogljivosti nimajo funkcij, ki so dovolj izpopolnjene za sodobno spletno aplikacijo.
Funkcije, kot so izpostavljenost več aplikacij na enem IP, določanje poti itd.
Torej, razumimo te funkcije za preostanek članka:
Vstop za eno službo
To je najpreprostejša različica izpostavitve ene same storitve, kot je spletna fronta, z IP-jem (ali domenskim imenom) in privzetimi vrati HTTP in HTTPS (i.e, 80 in 443).
Enkratni Fanout
To je vhodna nastavitev, ki vam omogoča, da dohodni promet omogočite enemu naslovu IP in ga usmerite na več storitev.
Sestavljen je iz:
- Vir vstopa je sestavljen iz imena gostitelja foo.bar.com
- Seznam poti, po katerih bo promet preusmerjen kot foo.bar.com / admin foo.bar.com / home foo.bar.com / sso
Enotni odtok je primer, ko se en IP uporablja za več storitev. Storitve so lahko na različnih poteh v URI-ju, kot je foo.bar.com / admin je lahko storitev za skrbnike in foo.bar.com / home je lahko storitev, ki generira domačo stran vsakega uporabnika.
Vhodna vrata bodo vedno 80 ali 443, vendar se vrata, v katerih se izvajajo storitve (znotraj gruče), lahko precej razlikujejo.
Takšen vdor nam pomaga zmanjšati število izravnalnikov obremenitve v gruči, saj v bistvu deluje kot ena.
Navidezno gostovanje na podlagi imen
Javni naslovi IP so omejeni. So tudi precej drage. Zamisel o virtualnem gostovanju, ki temelji na imenih, je starejša od Kubernetesa. Bistvo je v tem, da usmerite zapise DNS za različna spletna mesta, kot je ww1.primer.com in ww2.primer.com na isti naslov IP. Strežnik, ki se izvaja na tem naslovu IP, bo videl dohodno zahtevo in če je ime gostitelja, omenjeno v zahtevi, za ww1.primer.com, potem vam to spletno mesto postreže in če ww2.primer.com, potem je to vročeno.
V kontekstu Kubernetesa lahko zaženemo dve storitvi, ki se izvajata na, recimo, vratih 80 in obe izpostavimo na enem samem naslovu IP z uporabo vhoda tudi vrat 80. Na vstopni točki promet ww1.primer.com se bo ločil od prometa za ww2.primer.com. Od tod tudi izraz navidezno gostovanje na osnovi imena.
Zaključek
Vstop v Kubernetes je precej izpopolnjen, da ga pokrijemo v enem samem prispevku. Obstajajo različni primeri uporabe in številni krmilniki Ingress, ki bodo vaši gruči dodali funkcionalnost Ingress. Priporočam, da začnete z Nginx Ingress Controller.
Za nadaljnje podrobnosti in specifikacije lahko sledite tudi uradni dokumentaciji.