Istio on mugav tööriist hajutatud rakenduste ühendamiseks, turvamiseks ja jälgimiseks. Istio kasutab tarkvara mastaabis käitamiseks ja haldamiseks mitmesuguseid tehnoloogiaid, sealhulgas konteinereid rakenduse koodi ja sõltuvuste pakkimiseks juurutamiseks ning Kubernetesi nende konteinerite haldamiseks. Seetõttu peate Istioga töötamiseks teadma, kuidas nendel tehnoloogiatel põhineva mitme teenusega rakendus töötab ilma Istio. Kui need tööriistad ja mõisted on teile juba tuttavad, jätke see õpetus vabalt vahele ja minge otse jaotisesse Istio installimine Google Kubernetes Engine'i (GKE) või laienduse installimine Istio GKE-s.
See on samm-sammuline juhend, kus me käime läbi kogu protsessi lähtekoodist GKE konteinerini, et anda teile näite kaudu põhiteadmised nendest tehnoloogiatest. Samuti näete, kuidas Istio nende tehnoloogiate võimsust ära kasutab. See eeldab, et te ei tea konteinerite, Kubernetese, teenindusvõrkude ega Istio kohta midagi.
ülesanded
Selles õpetuses täidate järgmised ülesanded.
Mitme teenusega lihtsa teremaailma rakenduse õppimine.
Käivitage rakendus lähtekoodist.
Rakenduse pakendamine konteineritesse.
Kubernetese klastri loomine.
Konteinerite juurutamine klastrisse.
Enne alustamist
Kubernetes Engine API lubamiseks järgige juhiseid.
Selles õpetuses saate kasutada Cloud Shelli, mis valmistab ette virtuaalse masina g1-small Google Compute Engine'is Debianil põhineva Linuxiga või Linuxi või macOS-i arvutiga.
Valik A: Cloud Shelli kasutamine
Cloud Shelli kasutamise eelised:
Python 2 ja Python 3 arenduskeskkonnad (sh virtualenv) on täielikult konfigureeritud.
Käsurea tööriistad gpilv, sadamatööline, git и kubectl, mida kasutame, on juba installitud.
Võrgustiku vaatenurgast töötab kogu rakendus ühes hostis (kohalikus arvutis või Cloud Shelli virtuaalmasinas). Seetõttu võite kasutada localhosttaotluste saatmiseks server.
10) Peatada loadgen и server, sisenema Ctrl-c igas terminali aknas.
11) Terminali aknas loadgen deaktiveerige virtuaalne keskkond:
deactivate
Rakenduse pakendamine konteineritesse
Rakenduse käivitamiseks GKE-s peate pakkima näidisrakenduse − server и loadgen - sisse Konteinerid. Konteiner on viis rakenduse pakendamiseks, et isoleerida see keskkonnast.
Rakenduse konteinerisse pakkimiseks vajate dockerfile. dockerfile on tekstifail, mis määratleb käsud rakenduse lähtekoodi ja selle sõltuvuste loomiseks Dockeri pilt. Pärast loomist laadite pildi üles konteineriregistrisse, nagu Docker Hub või Konteinerite register.
Näidis on juba olemas dockerfile eest server и loadgen koos kõigi piltide kogumiseks vajalike käskudega. Allpool - dockerfile eest server:
FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
g++
&& rm -rf /var/lib/apt/lists/*
# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
wget
WORKDIR /helloserver
# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/
# Add the application
COPY . .
EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]
Meeskond pythonist: 3-slim alusena käsib Dockeril kasutada uusimat Python 3 pilt alusena.
Meeskond KOPERI. . kopeerib lähtefailid praegusesse töökataloogi (ainult meie puhul server.py) konteineri failisüsteemi.
SISENEMISPUNKT määrab konteineri käivitamiseks kasutatava käsu. Meie puhul on see käsk peaaegu sama, mida varem käivitasite server.py lähtekoodist.
Meeskond KOKKUPUUDE viitab sellele server ootab pordi kaudu andmeid 8080. See meeskond ei ole pakub sadamaid. See on mingi dokumentatsioon, mida on vaja pordi avamiseks 8080 konteineri käivitamisel.
Vaadake hoidlas olevate piltide loend üle ja veenduge, et pildid on üles laaditud:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Käsk kuvab äsja üleslaaditud piltide nimed:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
GKE klastri loomine.
Neid konteinereid saab käsuga käivitada Cloud Shelli virtuaalmasinas või arvutis dock käivitada. Kuid tootmiskeskkonnas on teil vaja võimalust konteinerite tsentraalseks orkestreerimiseks. Näiteks vajate süsteemi, mis tagab, et konteinerid töötaksid alati, ning teil on vaja viisi, kuidas liikluse suurenemise korral suurendada ja luua täiendavaid konteinerite eksemplare.
Konteinerrakenduste käitamiseks saate kasutada G.K.E.. GKE on konteinerite orkestreerimisplatvorm, mis koondab virtuaalsed masinad klastriks. Iga virtuaalmasinat nimetatakse sõlmeks. GKE klastrid põhinevad avatud lähtekoodiga Kubernetes klastrite haldussüsteemil. Kubernetes pakub mehhanisme klastriga suhtlemiseks.
Meeskond gpilv loob GCP projektis ja teie määratud vaikevööndis istioready klastri. Istio käitamiseks soovitame omada vähemalt 4 sõlme ja virtuaalset masinat n1-standard-2.
Meeskond loob klastri mõne minutiga. Kui klaster on valmis, väljastab käsk midagi sellist Teade.
3) Nüüd saate Kubernetesega suhelda kaudu kubectl. Näiteks saab sõlmede oleku teada saada järgmise käsuga:
kubectl get nodes
Käsk loob sõlmede loendi:
NAME STATUS ROLES AGE VERSION
gke-istoready-default-pool-dbeb23dc-1vg0 Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5 Ready <none> 100s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw Ready <none> 99s v1.13.6-gke.13
Kubernetese põhikontseptsioonid
Diagramm näitab rakendust GKE-s:
Enne konteinerite juurutamist GKE-s tutvuge Kubernetese põhikontseptsioonidega. Kui soovite rohkem teada saada, on lõpus lingid.
Sõlmed ja klastrid. GKE-s on sõlm virtuaalne masin. Teistel Kubernetese platvormidel võib sõlmeks olla arvuti või virtuaalmasin. Klaster on sõlmede kogum, mida võib pidada üheks üksuseks, kus juurutate konteinerrakenduse.
Kaunad. Kubernetes jooksevad konteinerid kaunades. Pod Kubernetesis on jagamatu üksus. Pod mahutab ühte või mitut konteinerit. Juurutate serverikonteinerid ja loadgen eraldi kaunades. Kui kaustas on mitu konteinerit (näiteks rakendusserver ja puhverserver), hallatakse konteinereid ühe üksusena ja need jagavad pod-ressursse.
Kasutuselevõtt. Kubernetesis on juurutus objekt, mis on identsete kaustade kogum. Juurutamine käivitab mitu koopiat kaustadest, mis on jaotatud klastri sõlmede vahel. Juurutamine asendab automaatselt katsid, mis on ebaõnnestunud või ei reageeri.
Kubernetese teenus. Rakenduse koodi käivitamisel GKE-s on ühendus vahel loadgen и server. Kui alustasite teenuseid Cloud Shelli virtuaalmasinas või töölaual, saatsite päringud aadressile server kell localhost: 8080. Pärast GKE-sse juurutamist käivitatakse kaustad saadaolevates sõlmedes. Vaikimisi pole teil kontrolli selle üle, millises sõlmes pod töötab, nii et teie kaunad püsivaid IP-aadresse pole.
IP-aadressi saamiseks server, peate kaunade peal määratlema võrguabstraktsiooni. Seda see on Kubernetese teenus. Teenus Kubernetes pakub kaustade komplektile püsivat lõpp-punkti. Neid on vähe teenuste liigid. server kasutab Koormuse tasakaalustaja, mis annab ühenduse võtmiseks välise IP-aadressi server väljastpoolt klastrit.
Kubernetesil on ka sisseehitatud DNS-süsteem, mis määrab DNS-nimed (näiteks helloserver.default.cluster.local) teenuseid. Tänu sellele suhtlevad klastris olevad kaunad konstantsel aadressil klastri teiste kaunadega. DNS-nime ei saa kasutada väljaspool klastrit, näiteks Cloud Shellis või arvutis.
Kubernetes avaldub
Kui käivitasite rakenduse allikast, kasutasite kohustuslikku käsku python3
server.py
Imperatiiv tähendab tegusõna: "tee seda".
Kubernetes kasutab deklaratiivne mudel. See tähendab, et me ei ütle Kubernetesile täpselt, mida teha, vaid pigem kirjeldame soovitud olekut. Näiteks Kubernetes käivitab ja peatab kaustasid vastavalt vajadusele, et hoida süsteemi tegelik olek soovitud olekuga kooskõlas.
Soovitud oleku näitate manifestides või failides YAML. YAML-fail sisaldab ühe või mitme Kubernetese objekti spetsifikatsioone.
Näide sisaldab YAML-faili server и loadgen. Iga YAML-fail määrab juurutusobjekti ja Kubernetese teenuse soovitud oleku.
Koormuse tasakaalustaja: Kliendid saadavad päringuid koormuse tasakaalustaja IP-aadressile, millel on püsiv IP-aadress ja millele pääseb juurde väljastpoolt klastrit.
sihtport: nagu mäletate, meeskond KOKKUPUUDE 8080 в dockerfile ei andnud sadamaid. Teie pakute sadamat 8080et saaksite konteineriga ühendust võtta server väljaspool klastrit. Meie puhul hellosvc.default.cluster.local:80 (lühike nimi: hellosvc) vastab sadamale 8080 Podi IP-aadressid helloserver.
port: see on pordi number, kuhu teised klastri teenused päringuid saadavad.
loadgen.yaml
Juurutamise objekt loadgen.yaml välja nägema server.yaml. Erinevus seisneb selles, et juurutusobjekt sisaldab jaotist env. See määratleb vajalikud keskkonnamuutujad loadgen ja mille installisite rakenduse allikast käivitamisel.
aeg loadgen ei võta vastu sissetulevaid päringuid väljale tüüp näidatud KlastriIP. See tüüp pakub püsivat IP-aadressi, mida klastri teenused saavad kasutada, kuid see IP-aadress ei avaldata välistele klientidele.
Teil on juba rakendus GKE-sse juurutatud. loadgen saab kasutada Kubernetes DNS-i (hellosvc:80) taotluste saatmiseks serverja saate saata päringuid aadressile server välise IP-aadressi järgi. Kuigi Kubernetesil on palju funktsioone, puudub teenuste kohta teave:
Kuidas teenused omavahel suhtlevad? Millised on teenustevahelised suhted? Kuidas liiklus teenuste vahel liigub? Kas olete sellest teadlik loadgen saadab päringud aadressile server, kuid kujutage ette, et te ei tea rakendusest midagi. Nendele küsimustele vastamiseks vaatame GKE jooksvate kaunade loendit.
Mõõdikud. Kui kaua server vastab sissetulevale päringule? Mitu päringut sekundis server võtab? Kas see annab veateateid?
Turvateave. Liiklus vahel loadgen и server lihtsalt läheb läbi HTTP või poolt mTLS?
Istio vastab kõigile neile küsimustele. Selleks paneb Istio külgkorvi puhverserveri saadik igas kaunas. Envoy puhverserver peatab kogu sissetuleva ja väljamineva liikluse rakenduste konteineritesse. See tähendab et server и loadgen vastu võtma külgkorvi puhverserveri kaudu ja kogu liiklust loadgen к server läbib Envoy volikirja.
Ühendused Envoy puhverserverite vahel moodustavad teenindusvõrgu. Teenindusvõrgu arhitektuur pakub Kubernetese peal juhtimiskihti.
Kuna Envoy puhverserverid töötavad oma konteinerites, saab Istio installida GKE klastri peale ilma rakenduse koodi peaaegu muutmata. Kuid olete oma rakenduse Istio haldamiseks ette valmistanud:
Teenused kõikidele konteineritele. Lähetuste juurde server и loadgen seotud Kubernetese teenusega. Isegi loadgen, mis ei võta vastu sissetulevaid päringuid, on olemas teenus.
Teenuste pordidel peavad olema nimed. Kuigi teeninduspordid võib GKE-s jätta nimetamata, nõuab Istio täpsustamist sadama nimi vastavalt tema protokollile. YAML-failis port server kutsutud httpsest server kasutab protokolli HTTP. Kui teenus kasutatud gRPC, nimetaksite sadamat grpc.
Juurutused on märgistatud. Seetõttu saate kasutada Istio liikluse haldamise funktsioone, näiteks liikluse jagamist sama teenuse versioonide vahel.
Paigaldamine
Istio installimiseks on kaks võimalust. Saab lubage Istio GKE laiendis või installige Istio avatud lähtekoodiga versioon klastri peal. GKE Istio abil saate hõlpsalt hallata Istio installimisi ja täiendusi kogu GKE klastri elutsükli jooksul. Kui soovite Istio uusimat versiooni või rohkem kontrolli oma Istio juhtpaneeli konfiguratsiooni üle, installige GKE laienduse Istio asemel avatud lähtekoodiga versioon. Lähenemisviisi üle otsustamiseks lugege artiklit Kas ma vajan GKE-s Istiot?.
Valige suvand, vaadake üle sobiv juhend ja järgige Istio klastrisse installimiseks juhiseid. Kui soovite kasutada Istiot oma äsja juurutatud rakendusega, võimaldada külgkorvi rakendamist nimeruumi jaoks vaikimisi.
Puhastamine
Kui soovite vältida selles õpetuses kasutatud ressursside eest tasu võtmist Google Cloud Platformi kontolt, kustutage konteinerite klaster pärast Istio installimist ja näidisrakendusega mängimist. See eemaldab kõik klastri ressursid, nagu arvutuseksemplarid, kettad ja võrguressursid.