Istio er þægilegt tæki til að tengja, tryggja og fylgjast með dreifðum forritum. Istio notar margs konar tækni til að keyra og stjórna hugbúnaði í stærðargráðu, þar á meðal gáma til að pakka forritakóða og ósjálfstæði fyrir uppsetningu, og Kubernetes til að stjórna þessum gámum. Þess vegna, til að vinna með Istio, verður þú að vita hvernig forrit með mörgum þjónustum sem byggir á þessari tækni virkar без Istio. Ef þú þekkir þessi verkfæri og hugtök nú þegar skaltu ekki hika við að sleppa þessari kennslu og fara beint í hlutann Uppsetning Istio á Google Kubernetes Engine (GKE) eða setja upp viðbót Istio á GKE.
Þetta er skref-fyrir-skref leiðbeining þar sem við munum ganga í gegnum allt ferlið frá frumkóða til GKE íláts til að gefa þér grunnskilning á þessari tækni með dæmi. Þú munt líka sjá hvernig Istio nýtir kraft þessarar tækni. Þetta gerir ráð fyrir að þú veist ekkert um gáma, Kubernetes, þjónustunet eða Istio.
verkefni
Í þessari kennslu muntu klára eftirfarandi verkefni:
Að læra einfalt halló heim forrit með mörgum þjónustum.
Keyra forritið frá frumkóða.
Pökkun umsóknarinnar í ílát.
Að búa til Kubernetes klasa.
Að dreifa gámum í klasa.
Áður en þú byrjar
Fylgdu leiðbeiningunum til að virkja Kubernetes Engine API:
Í þessari kennslu geturðu notað Cloud Shell, sem undirbýr sýndarvélina g1-small í Google Compute Engine með Debian-undirstaða Linux, eða Linux eða macOS tölvu.
Valkostur A: Notkun Cloud Shell
Kostir þess að nota Cloud Shell:
Python 2 og Python 3 þróunarumhverfi (þar á meðal virtualenv) eru fullstillt.
Skipanalínuverkfæri gcloud, bryggju, Git и kubectl, sem við munum nota eru þegar uppsett.
Sýnisforritið er skrifað í Python og samanstendur af tveimur hlutum sem hafa samskipti með því að nota REST:
miðlara: einfaldur þjónn með einum endapunkti FÁ, /, sem prentar „halló heimur“ á stjórnborðið.
loadgen: forskrift sem sendir umferð til miðlara, með stillanlegum fjölda beiðna á sekúndu.
Keyrir forrit frá frumkóða
Til að kanna sýnishornsforritið skaltu keyra það í Cloud Shell eða á tölvunni þinni.
1) Í vörulista istio-samples/sample-apps/helloserver hlaupa miðlara:
python3 server/server.py
Við ræsingu miðlara eftirfarandi birtist:
INFO:root:Starting server...
2) Opnaðu annan flugstöðvarglugga til að senda beiðnir til miðlara. Ef þú ert að nota Cloud Shell, smelltu á bæta við táknið til að opna aðra lotu.
3) Sendu beiðni til miðlara:
curl http://localhost:8080
þjónn svarar:
Hello World!
4) Frá möppunni þar sem þú sóttir sýnishornskóðann, farðu í möppuna sem inniheldur loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Frá sjónarhóli netkerfisins keyrir allt forritið á einum gestgjafa (staðbundinni tölvu eða Cloud Shell sýndarvél). Þess vegna getur þú notað localhosttil að senda beiðnir til miðlara.
10) Að hætta loadgen и miðlara, koma inn Ctrl-c í hverjum flugstöðvarglugga.
11) Í flugstöðvarglugganum loadgen slökkva á sýndarumhverfinu:
deactivate
Pökkun umsóknar í ílát
Til að keyra forritið á GKE þarftu að pakka sýnishornsforritinu - miðlara и loadgen - kl ílát. Gámur er leið til að pakka forriti til að einangra það frá umhverfi sínu.
Til að pakka forriti í ílát þarftu Dockerfil. Dockerfil er textaskrá sem skilgreinir skipanir til að byggja frumkóða forritsins og ósjálfstæði þess inn í Docker mynd. Þegar hún hefur verið byggð hleður þú upp myndinni í gámaskrá eins og Docker Hub eða Gámaskrá.
Dæmið hefur þegar Dockerfil í miðlara и loadgen með öllum nauðsynlegum skipunum til að safna myndum. Fyrir neðan - Dockerfil í miðlara:
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" ]
Team FRÁ python:3-slim sem grunnur segir Docker að nota það nýjasta Python 3 mynd sem grunnur.
Team AFRITA. . afritar frumskrárnar í núverandi vinnumöppu (aðeins í okkar tilviki server.py) í skráarkerfi ílátsins.
AÐGANGUR skilgreinir skipunina sem er notuð til að ræsa ílátið. Í okkar tilviki er þessi skipun nánast sú sama og þú notaðir til að keyra server.py frá frumkóða.
Team AFHJÚPA bendir til þess miðlara bíður eftir gögnum í gegnum höfnina 8080. Þetta lið er það ekki veitir hafnir. Þetta er einhvers konar skjöl sem þarf til að opna höfnina 8080 þegar gáminn er ræstur.
Undirbúningur að geyma umsókn þína
1) Stilltu eftirfarandi umhverfisbreytur. Skipta um PROJECT_ID til GCP verkefnakennisins.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Að nota gildi PROJECT_ID и GCR_REPO þú merkir Docker myndina þegar þú smíðar hana og ýtir henni í einkagámaskrá.
2) Stilltu sjálfgefið GCP verkefni fyrir skipanalínutólið gcloud.
gcloud config set project $PROJECT_ID
3) Stilltu sjálfgefið svæði fyrir skipanalínutólið gcloud.
gcloud config set compute/zone us-central1-b
4) Gakktu úr skugga um að gámaskrárþjónustan sé virkjuð í GCP verkefninu.
Skoðaðu lista yfir myndir í geymslunni og staðfestu að myndunum hafi verið hlaðið upp:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Skipunin sýnir nöfn nýupphlaðna mynda:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Að búa til GKE klasa.
Hægt væri að keyra þessa gáma á Cloud Shell sýndarvél eða á tölvu með skipuninni skipakví. En í framleiðsluumhverfi þarftu leið til að skipuleggja gáma miðlægt. Til dæmis þarftu kerfi sem tryggir að gámar séu alltaf í gangi og þú þarft leið til að stækka og snúa upp fleiri gámatilvikum ef umferð eykst.
Til að keyra gámaforrit sem þú getur notað G.K.E.. GKE er gámaskipunarvettvangur sem safnar saman sýndarvélum í klasa. Hver sýndarvél er kölluð hnútur. GKE klasar eru byggðir á opnum uppsprettu Kubernetes klasastjórnunarkerfi. Kubernetes veitir kerfi til að hafa samskipti við klasann.
Team gcloud býr til þyrping sem er tilbúinn í GCP verkefninu og sjálfgefnu svæði sem þú tilgreindir. Til að keyra Istio mælum við með að hafa að minnsta kosti 4 hnúta og sýndarvél n1-staðall-2.
Liðið býr til þyrpinguna á nokkrum mínútum. Þegar þyrpingin er tilbúin gefur skipunin eitthvað á þessa leið skilaboðin.
2) Gefðu upp skilríki í skipanalínutólinu kubectltil að nota það til að stjórna klasanum:
3) Nú geturðu átt samskipti við Kubernetes í gegnum kubectl. Til dæmis getur eftirfarandi skipun fundið út stöðu hnúta:
kubectl get nodes
Skipunin framleiðir lista yfir hnúta:
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
Kubernetes lykilhugtök
Skýringarmyndin sýnir forrit á GKE:
Áður en þú setur upp gáma í GKE skaltu læra lykilhugtök Kubernetes. Það eru tenglar alveg í lokin ef þú vilt læra meira.
Hnútar og klasar. Í GKE er hnútur sýndarvél. Á öðrum Kubernetes kerfum getur hnútur verið tölva eða sýndarvél. Klasi er safn hnúta sem geta talist ein eining þar sem þú setur upp gámaforrit.
Belg. Í Kubernetes keyra gámar í belg. Pod í Kubernetes er óskiptanleg eining. Pod geymir einn eða fleiri ílát. Þú setur upp netþjónagáma og loadgen í aðskildum belgjum. Þegar það eru nokkrir ílát í belg (td forritaþjónn og proxy-þjónn), gámum er stjórnað sem einni heild og deila belgauðlindum.
Dreifingar. Í Kubernetes er dreifing hlutur sem er safn af sömu belgjum. Dreifing setur af stað margar eftirlíkingar af belgjum sem dreift er yfir klasahnúta. Dreifing kemur sjálfkrafa í stað belg sem hafa mistekist eða svara ekki.
Kubernetes þjónusta. Þegar forritakóði er keyrður í GKE er tengingin milli loadgen и miðlara. Þegar þú byrjaðir þjónustu á Cloud Shell sýndarvél eða skjáborði sendir þú beiðnir til miðlara ástæðulaust localhost: 8080. Þegar þeim hefur verið dreift til GKE eru fræbelgir keyrðir á tiltækum hnútum. Sjálfgefið hefur þú enga stjórn á hvaða hnút belgurinn er að keyra á, svo þú fræbelgur engar varanlegar IP tölur.
Til að sækja IP tölu fyrir miðlara, þú þarft að skilgreina netútdrátt ofan á belgunum. Það er það sem það er Kubernetes þjónusta. Kubernetes þjónustan veitir viðvarandi endapunkt fyrir sett af belgjum. Það eru nokkrir tegundir þjónustu. miðlara notar LoadBalancer, sem veitir ytri IP-tölu til að hafa samband við miðlara utan úr klasanum.
Kubernetes er einnig með innbyggt DNS kerfi sem úthlutar DNS nöfnum (til dæmis, helloserver.default.cluster.local) þjónusta. Þökk sé þessu hafa fræbelgir innan klasans samskipti við aðra fræbelg í klasanum á varanlegu heimilisfangi. Ekki er hægt að nota DNS nafnið utan klasans, svo sem í Cloud Shell eða á tölvu.
Kubernetes birtast
Þegar þú keyrðir forritið frá uppruna, notaðir þú nauðsynlega skipunina python3
server.py
Þörf felur í sér sögn: „gera þetta“.
Kubernetes notar yfirlýsingarfyrirmynd. Þetta þýðir að við erum ekki að segja Kubernetes nákvæmlega hvað á að gera, heldur að lýsa því ástandi sem óskað er eftir. Til dæmis, Kubernetes ræsir og stöðvar belg eftir þörfum til að tryggja að raunverulegt ástand kerfisins passi við það ástand sem óskað er eftir.
Þú gefur til kynna viðkomandi ástand í upplýsingaskrám eða skrám YAML. YAML skrá inniheldur forskriftir fyrir einn eða fleiri Kubernetes hluti.
Dæmið inniheldur YAML skrá fyrir miðlara и loadgen. Hver YAML skrá tilgreinir æskilega stöðu dreifingarhlutarins og Kubernetes þjónustu.
LoadBalancer: Viðskiptavinir senda beiðnir á IP-tölu álagsjafnarans, sem hefur viðvarandi IP-tölu og er aðgengileg utan þyrpingarinnar.
targetPort: eins og þú manst, liðið FYRIR 8080 в Dockerfil veitti ekki hafnir. Þú útvegar höfnina 8080svo þú getir haft samband við gáminn miðlara utan klasans. Í okkar tilviki hellosvc.default.cluster.local:80 (stutt nafn: hallósvc) samsvarar höfninni 8080 Pod IP tölur halló þjónn.
höfn: Þetta er gáttarnúmerið þar sem önnur þjónusta í klasanum mun senda beiðnir.
loadgen.yaml
Dreifing mótmæla loadgen.yaml Líta út eins og server.yaml. Munurinn er sá að dreifingarhluturinn inniheldur hluta env. Það skilgreinir umhverfisbreyturnar sem þarf loadgen og sem þú settir upp þegar þú keyrir forritið frá uppruna.
Tími loadgen tekur ekki við beiðnum sem berast, fyrir reitinn tegund gefið til kynna ClusterIP. Þessi tegund veitir viðvarandi IP-tölu sem þjónusta í klasanum getur notað, en þetta IP-tala er ekki útsett fyrir utanaðkomandi viðskiptavinum.
Skipta um PROJECT_ID til GCP verkefnakennisins þíns.
9) Vista og loka loadgen.yaml, lokaðu textaritlinum.
10) Dreifðu YAML skránni á Kubernetes:
kubectl apply -f loadgen.yaml
Þegar henni er lokið framleiðir skipunin eftirfarandi kóða:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Athugaðu stöðu belganna:
kubectl get pods
Skipunin sýnir stöðuna:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Dragðu út forritaskrár úr belgnum loadgen. Skipta um POD_ID til auðkennis frá fyrra svari.
kubectl logs loadgenerator-POD_ID
13) Fáðu ytri IP tölur hallósvc:
kubectl get service
Skipunarsvarið lítur einhvern veginn svona út:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellosvc LoadBalancer 10.81.15.158 192.0.2.1 80:31127/TCP 33m
kubernetes ClusterIP 10.81.0.1 <none> 443/TCP 93m
loadgensvc ClusterIP 10.81.15.155 <none> 80/TCP 4m52s
14) Sendu beiðni til hallósvc: skipta út EXTERNAL_IP á ytri IP tölu hallósvc.
curl http://EXTERNAL_IP
Tökum á móti Istio
Þú ert nú þegar með forrit sent til GKE. loadgen getur notað Kubernetes DNS (halló:80) til að senda beiðnir til miðlaraog þú getur sent beiðnir til miðlara eftir ytri IP tölu. Þrátt fyrir að Kubernetes hafi marga eiginleika vantar einhverjar upplýsingar um þjónustuna:
Hvernig hefur þjónusta samskipti? Hver eru tengslin milli þjónustu? Hvernig flæðir umferð milli þjónustu? Ertu meðvitaður um það loadgen sendir beiðnir til miðlara, en ímyndaðu þér að þú vitir ekkert um forritið. Til að svara þessum spurningum skulum við skoða listann yfir hlaupandi belg í GKE.
Mælingar. Hversu lengi miðlara svarar beiðni sem berast? Hversu margar beiðnir á sekúndu berast þjóninum? Gefur það villuboð?
Öryggisupplýsingar. Umferð á milli loadgen и miðlara fer bara í gegn HTTP eða af mTLS?
Istio svarar öllum þessum spurningum. Til að gera þetta setur Istio umboð fyrir hliðarvagn Sendiherra í hverjum belg. Umboðsmaður sendiherra stöðvar alla inn- og útsendingu í forritagáma. Það þýðir að miðlara и loadgen móttaka í gegnum hliðarvagn umboðsenvoy, og allri umferð frá loadgen к miðlara fer í gegnum umboð sendifulltrúa.
Tengingar milli umboðsmanna sendiboða mynda þjónustunet. Þjónustunetsarkitektúrinn veitir lag af stjórn ofan á Kubernetes.
Þar sem sendiboðar keyra í sínum eigin gámum, er hægt að setja Istio ofan á GKE þyrpingu með nánast engum breytingum á forritskóðanum. En þú hefur unnið nokkra vinnu til að gera forritið þitt tilbúið til að vera stjórnað af Istio:
Þjónusta fyrir alla gáma. Til dreifingar miðlara и loadgen tengt Kubernetes þjónustunni. Jafnvel loadgen, sem tekur ekki á móti beiðnum, það er þjónusta.
Hafnir í þjónustu verða að hafa nöfn. Þó að þjónustuhöfn geti verið skilin eftir ónefnd í GKE, krefst Istio þess að þú tilgreinir nafn hafnar í samræmi við bókun hans. Í YAML skrá höfn fyrir miðlara kallað HTTPvegna þess að þjónninn notar samskiptaregluna HTTP. Ef þjónusta notað gRPC, þú myndir nefna höfnina grpc.
Dreifingar eru merktar. Þess vegna geturðu notað umferðarstjórnunareiginleika Istio, eins og að skipta umferð á milli útgáfur af sömu þjónustu.
Er að setja upp Istio
Það eru tvær leiðir til að setja upp Istio. Dós virkjaðu Istio á GKE framlengingu eða settu upp opinn uppspretta útgáfu af Istio á klasanum. Með Istio á GKE geturðu auðveldlega stjórnað Istio uppsetningum og uppfærslum í gegnum líftíma GKE klasans. Ef þú vilt nýjustu útgáfuna af Istio eða meiri stjórn á Istio stjórnborðinu þínu skaltu setja upp opna útgáfuna í staðinn fyrir Istio on GKE viðbótina. Til að ákveða nálgunina skaltu lesa greinina Þarf ég Istio á GKE?.
Veldu valkost, skoðaðu viðeigandi leiðbeiningar og fylgdu leiðbeiningunum til að setja upp Istio á þyrpingunni þinni. Ef þú vilt nota Istio með nýlega uppsettu forritinu þínu, gera hliðarvagna útfærslu kleift fyrir nafnrými sjálfgefið.
Þrif
Til að forðast að vera rukkaður á Google Cloud Platform reikninginn þinn fyrir tilföngin sem þú notaðir í þessari kennslu skaltu eyða gámaklasanum þegar þú hefur sett upp Istio og spilað með sýnishornsforritinu. Þetta mun fjarlægja öll klasatilföng, svo sem tölvutilvik, diska og nettilföng.