Mae Istio yn offeryn cyfleus ar gyfer cysylltu, sicrhau a monitro cymwysiadau dosbarthedig. Mae Istio yn defnyddio amrywiaeth o dechnolegau i redeg a rheoli meddalwedd ar raddfa fawr, gan gynnwys cynwysyddion i becynnu cod cymhwysiad a dibyniaethau i'w defnyddio, a Kubernetes i reoli'r cynwysyddion hynny. Felly, i weithio gydag Istio rhaid i chi wybod sut mae cymhwysiad gyda gwasanaethau lluosog yn seiliedig ar y technolegau hyn yn gweithio без Istio. Os yw'r offer a'r cysyniadau hyn eisoes yn gyfarwydd i chi, mae croeso i chi hepgor y tiwtorial hwn a mynd yn syth i'r adran Gosod Istio ar Google Kubernetes Engine (GKE) neu osod estyniad Istio ar GKE.
Mae hwn yn ganllaw cam wrth gam lle byddwn yn cerdded trwy'r broses gyfan o'r cod ffynhonnell i gynhwysydd GKE i roi dealltwriaeth sylfaenol i chi o'r technolegau hyn trwy enghraifft. Byddwch hefyd yn gweld sut mae Istio yn trosoli pŵer y technolegau hyn. Mae hyn yn cymryd yn ganiataol nad ydych chi'n gwybod dim am gynwysyddion, Kubernetes, rhwyllau gwasanaeth, neu Istio.
tasgau
Yn y tiwtorial hwn, byddwch yn cwblhau'r tasgau canlynol:
Dysgu cymhwysiad byd helo syml gyda gwasanaethau lluosog.
Rhedeg y cais o'r cod ffynhonnell.
Pecynnu'r cais mewn cynwysyddion.
Creu clwstwr Kubernetes.
Gosod cynwysyddion i glwstwr.
Cyn i chi ddechrau
Dilynwch y cyfarwyddiadau i alluogi Kubernetes Engine API:
Yn y tiwtorial hwn, gallwch ddefnyddio Cloud Shell, sy'n paratoi'r peiriant rhithwir g1-bach yn Google Compute Engine gyda Linux seiliedig ar Debian, neu gyfrifiadur Linux neu macOS.
Opsiwn A: Defnyddio Cloud Shell
Manteision defnyddio Cloud Shell:
Amgylcheddau datblygu Python 2 a Python 3 (gan gynnwys virtualenv) wedi'u ffurfweddu'n llawn.
Offer Llinell Reoli cloud, docwr, git и ciwctl, y byddwn yn eu defnyddio eisoes wedi'u gosod.
Mae'r cymhwysiad sampl wedi'i ysgrifennu yn Python ac mae'n cynnwys dwy gydran sy'n rhyngweithio gan ddefnyddio REST:
gweinydd: gweinydd syml gydag un diweddbwynt CAEL, /, sy'n argraffu "helo byd" i'r consol.
llwythgen: sgript sy'n anfon traffig i gweinydd, gyda nifer ffurfweddadwy o geisiadau yr eiliad.
Rhedeg cais o god ffynhonnell
I archwilio'r cymhwysiad sampl, rhedwch ef yn Cloud Shell neu ar eich cyfrifiadur.
1) Yn y catalog istio-samples/sampl-apps/helloserver rhedeg gweinydd:
python3 server/server.py
Ar y cychwyn gweinydd arddangosir y canlynol:
INFO:root:Starting server...
2) Agorwch ffenestr derfynell arall i anfon ceisiadau ati gweinydd. Os ydych chi'n defnyddio Cloud Shell, cliciwch ar yr eicon ychwanegu i agor sesiwn arall.
3) Anfonwch gais i gweinydd:
curl http://localhost:8080
gweinydd yn ateb:
Hello World!
4) O'r cyfeiriadur lle gwnaethoch chi lawrlwytho'r cod sampl, ewch i'r cyfeiriadur sy'n cynnwys llwythgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
O safbwynt rhwydweithio, mae'r rhaglen gyfan yn rhedeg ar un gwesteiwr (cyfrifiadur lleol neu beiriant rhithwir Cloud Shell). Felly gallwch chi ddefnyddio localhosti anfon ceisiadau i gweinydd.
10) I stopio llwythgen и gweinydd, nodwch Ctrl-c ym mhob ffenestr derfynell.
11) Yn y ffenestr derfynell llwythgen dadactifadu'r amgylchedd rhithwir:
deactivate
Pecynnu cais mewn cynwysyddion
I redeg y cais ar GKE, mae angen i chi becynnu'r cymhwysiad sampl − gweinydd и llwythgen - yn Cynhwyswyr. Mae cynhwysydd yn ffordd o becynnu cais i'w ynysu o'i amgylchedd.
I becynnu cais i mewn i gynhwysydd, mae angen Dockerfile. Dockerfile yn ffeil testun sy'n diffinio gorchmynion ar gyfer adeiladu cod ffynhonnell y rhaglen a'i ddibyniaethau i mewn Delwedd docwr. Ar ôl ei adeiladu, rydych chi'n uwchlwytho'r ddelwedd i gofrestrfa cynhwysydd fel Docker Hub neu Cofrestrfa Cynhwysydd.
Mae gan yr enghraifft eisoes Dockerfile gyfer gweinydd и llwythgen gyda'r holl orchmynion angenrheidiol i gasglu delweddau. Isod - Dockerfile gyfer gweinydd:
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" ]
Tîm O python: 3-fain fel sylfaen yn dweud wrth Docker i ddefnyddio'r diweddaraf Delwedd Python 3 fel sylfaen.
Tîm COPI. . copïo'r ffeiliau ffynhonnell i'r cyfeiriadur gweithio cyfredol (yn ein hachos ni yn unig gweinydd.py) i system ffeiliau'r cynhwysydd.
MYNEDIAD yn diffinio'r gorchymyn a ddefnyddir i gychwyn y cynhwysydd. Yn ein hachos ni, mae'r gorchymyn hwn bron yr un fath â'r un yr oeddech chi'n arfer ei redeg gweinydd.py o'r cod ffynhonnell.
Tîm YMOSODIAD yn nodi hynny gweinydd yn aros am ddata trwy'r porthladd 8080. Nid yw'r tîm hwn yn darparu porthladdoedd. Mae hyn yn rhyw fath o ddogfennaeth sydd ei angen i agor y porthladd 8080 wrth gychwyn y cynhwysydd.
Paratoi i amwys eich cais
1) Gosodwch y newidynnau amgylchedd canlynol. Amnewid PROJECT_ID i'ch ID prosiect GCP.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Defnyddio gwerthoedd PROJECT_ID и GCR_REPO rydych chi'n tagio delwedd y Docker pan fyddwch chi'n ei hadeiladu ac yn ei gwthio i Gofrestrfa Cynhwyswyr preifat.
2) Gosodwch y prosiect GCP rhagosodedig ar gyfer yr offeryn llinell orchymyn cloud.
gcloud config set project $PROJECT_ID
3) Gosodwch y parth rhagosodedig ar gyfer yr offeryn llinell orchymyn cloud.
gcloud config set compute/zone us-central1-b
4) Sicrhewch fod y gwasanaeth Cofrestrfa Cynhwyswyr wedi'i alluogi yn y prosiect GCP.
Adolygwch y rhestr o ddelweddau yn y gadwrfa a gwiriwch fod y delweddau wedi'u huwchlwytho:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Mae'r gorchymyn yn dangos enwau'r delweddau sydd newydd eu huwchlwytho:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Creu clwstwr GKE.
Gellid rhedeg y cynwysyddion hyn ar beiriant rhithwir Cloud Shell neu ar gyfrifiadur gyda'r gorchymyn docker rhedeg. Ond mewn amgylchedd cynhyrchu, mae angen ffordd arnoch i drefnu cynwysyddion yn ganolog. Er enghraifft, mae angen system arnoch sy'n sicrhau bod cynwysyddion bob amser yn rhedeg, ac mae angen ffordd arnoch i gynyddu ac ehangu achosion cynwysyddion ychwanegol os bydd traffig yn cynyddu.
I redeg cymwysiadau cynhwysydd y gallwch eu defnyddio Mae G.K.E.. Mae GKE yn blatfform cerddorfa cynhwysydd sy'n cydgrynhoi peiriannau rhithwir yn glwstwr. Gelwir pob peiriant rhithwir yn nod. Mae clystyrau GKE yn seiliedig ar system rheoli clwstwr ffynhonnell agored Kubernetes. Mae Kubernetes yn darparu mecanweithiau ar gyfer rhyngweithio â'r clwstwr.
Tîm cloud yn creu clwstwr istioready yn y prosiect GCP a'r parth rhagosodedig a nodwyd gennych. I redeg Istio, rydym yn argymell cael o leiaf 4 nod a pheiriant rhithwir n1-safon-2.
Mae'r tîm yn creu'r clwstwr mewn ychydig funudau. Pan fydd y clwstwr yn barod, mae'r gorchymyn yn allbynnu rhywbeth fel hyn сообщение.
2) Darparu tystlythyrau yn yr offeryn llinell orchymyn ciwctli'w ddefnyddio i reoli'r clwstwr:
3) Nawr gallwch chi gyfathrebu â Kubernetes trwy ciwctl. Er enghraifft, gall y gorchymyn canlynol ddarganfod statws nodau:
kubectl get nodes
Mae'r gorchymyn yn cynhyrchu rhestr o nodau:
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
Cysyniadau Allweddol Kubernetes
Mae'r diagram yn dangos cymhwysiad ar GKE:
Cyn i chi ddefnyddio cynwysyddion yn GKE, dysgwch gysyniadau allweddol Kubernetes. Mae yna ddolenni ar y diwedd os ydych chi eisiau dysgu mwy.
Nodau a chlystyrau. Yn GKE, peiriant rhithwir yw nod. Ar lwyfannau Kubernetes eraill, gall nod fod yn gyfrifiadur neu'n beiriant rhithwir. Mae clwstwr yn gasgliad o nodau y gellir eu hystyried yn uned sengl lle rydych chi'n defnyddio cymhwysiad mewn cynhwysydd.
Podiau. Yn Kubernetes, mae cynwysyddion yn rhedeg mewn codennau. Mae Pod yn Kubernetes yn uned anwahanadwy. Mae Pod yn dal un neu fwy o gynwysyddion. Rydych chi'n defnyddio cynwysyddion gweinydd a llwythgen mewn codennau ar wahân. Pan fo nifer o gynwysyddion mewn pod (er enghraifft, gweinydd cais a gweinydd dirprwyol), mae cynwysyddion yn cael eu rheoli fel un endid ac yn rhannu adnoddau pod.
Gosodiadau. Yn Kubernetes, mae gosodiad yn wrthrych sy'n gasgliad o godau union yr un fath. Mae'r defnydd yn lansio copïau lluosog o godennau wedi'u dosbarthu ar draws nodau clwstwr. Mae lleoli yn disodli codennau sydd wedi methu neu nad ydynt yn ymateb yn awtomatig.
gwasanaeth Kubernetes. Wrth redeg cod cais yn GKE, mae'r cysylltiad rhwng llwythgen и gweinydd. Pan ddechreuoch chi wasanaethau ar beiriant rhithwir neu fwrdd gwaith Cloud Shell, fe wnaethoch chi anfon ceisiadau at gweinydd yn localhost: 8080. Ar ôl eu defnyddio i GKE, mae codennau'n cael eu gweithredu ar y nodau sydd ar gael. Yn ddiofyn, nid oes gennych unrhyw reolaeth dros ba nod y mae'r pod yn rhedeg arno, felly chi codennau dim cyfeiriadau IP parhaol.
I gael cyfeiriad IP ar gyfer gweinydd, mae angen ichi ddiffinio tyniad rhwydwaith ar ben y codennau. Dyna beth ydyw gwasanaeth Kubernetes. Mae gwasanaeth Kubernetes yn darparu pwynt terfyn parhaus ar gyfer set o godennau. Mae yna ychydig mathau o wasanaethau. gweinydd defnyddiau Llwyth Cydbwysydd, sy'n darparu cyfeiriad IP allanol i gysylltu ag ef gweinydd o'r tu allan i'r clwstwr.
Mae gan Kubernetes hefyd system DNS adeiledig sy'n aseinio enwau DNS (er enghraifft, helloserver.default.clwstwr.lleol) gwasanaethau. Diolch i hyn, mae codennau o fewn y clwstwr yn cyfathrebu â chodau eraill yn y clwstwr mewn cyfeiriad parhaol. Ni ellir defnyddio'r enw DNS y tu allan i'r clwstwr, megis yn Cloud Shell neu ar gyfrifiadur.
Mae Kubernetes yn amlygu
Pan wnaethoch chi redeg y rhaglen o'r ffynhonnell, fe wnaethoch chi ddefnyddio'r gorchymyn hanfodol python3
gweinydd.py
Mae Imperative yn awgrymu berf: “gwnewch hyn.”
Kubernetes yn defnyddio model datganiadol. Mae hyn yn golygu nad ydym yn dweud wrth Kubernetes yn union beth i'w wneud, ond yn hytrach yn disgrifio'r cyflwr dymunol. Er enghraifft, mae Kubernetes yn cychwyn ac yn stopio codennau yn ôl yr angen i sicrhau bod cyflwr gwirioneddol y system yn cyfateb i'r cyflwr dymunol.
Rydych chi'n nodi'r cyflwr dymunol mewn maniffestau neu ffeiliau YAML. Mae ffeil YAML yn cynnwys manylebau ar gyfer un neu fwy o wrthrychau Kubernetes.
Mae'r enghraifft yn cynnwys ffeil YAML ar gyfer gweinydd и llwythgen. Mae pob ffeil YAML yn nodi cyflwr dymunol y gwrthrych lleoli a gwasanaeth Kubernetes.
Llwyth Cydbwysydd: Mae cleientiaid yn anfon ceisiadau i gyfeiriad IP y cydbwysedd llwyth, sydd â chyfeiriad IP parhaus ac sy'n hygyrch o'r tu allan i'r clwstwr.
targedPort: fel y cofiwch, y tîm DATGUDDIAD 8080 в Dockerfile ni ddarparodd borthladdoedd. Chi sy'n darparu'r porthladd 8080fel y gallwch gysylltu â'r cynhwysydd gweinydd y tu allan i'r clwstwr. Yn ein hachos ni hellosvc.default.cluster.local:80 (enw byr: helosvc) yn cyfateb i'r porthladd 8080 Cyfeiriadau IP pod hellweinydd.
porthladd: Dyma'r rhif porthladd lle bydd gwasanaethau eraill yn y clwstwr yn anfon ceisiadau.
llwythgen.yaml
Defnydd yn gwrthwynebu llwythgen.yaml edrych fel gweinydd.yaml. Y gwahaniaeth yw bod y gwrthrych lleoli yn cynnwys adran env. Mae'n diffinio'r newidynnau amgylcheddol sydd eu hangen llwythgen ac a osodwyd gennych wrth redeg y rhaglen o'r ffynhonnell.
Unwaith llwythgen nid yw'n derbyn ceisiadau sy'n dod i mewn, ar gyfer y maes math wedi'i nodi ClwstwrIP. Mae'r math hwn yn darparu cyfeiriad IP parhaus y gall gwasanaethau yn y clwstwr ei ddefnyddio, ond nid yw'r cyfeiriad IP hwn yn agored i gleientiaid allanol.
Amnewid PROJECT_ID i'ch ID prosiect GCP.
9) Arbed a chau llwythgen.yaml, cau'r golygydd testun.
10) Defnyddio'r ffeil YAML i Kubernetes:
kubectl apply -f loadgen.yaml
Ar ôl ei gwblhau'n llwyddiannus, mae'r gorchymyn yn cynhyrchu'r cod canlynol:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Gwiriwch statws y codennau:
kubectl get pods
Mae'r gorchymyn yn dangos y statws:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Tynnwch logiau cais o'r pod llwythgen. Amnewid POD_ID i'r ID o'r ateb blaenorol.
kubectl logs loadgenerator-POD_ID
13) Cael cyfeiriadau IP allanol helosvc:
kubectl get service
Mae'r ymateb gorchymyn yn edrych fel hyn:
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) Anfonwch gais i helosvc: disodli EXTERNAL_IP i gyfeiriad IP allanol helosvc.
curl http://EXTERNAL_IP
Gadewch i ni gymryd ar Istio
Mae gennych gais eisoes wedi'i ddefnyddio i GKE. llwythgen yn gallu defnyddio Kubernetes DNS (helo: 80) i anfon ceisiadau i gweinydda gallwch anfon ceisiadau i gweinydd gan gyfeiriad IP allanol. Er bod gan Kubernetes lawer o nodweddion, mae rhywfaint o wybodaeth ar goll am y gwasanaethau:
Sut mae gwasanaethau'n rhyngweithio? Beth yw'r berthynas rhwng gwasanaethau? Sut mae traffig yn llifo rhwng gwasanaethau? A ydych yn ymwybodol hynny llwythgen yn anfon ceisiadau i gweinydd, ond dychmygwch nad ydych chi'n gwybod dim am y cais. I ateb y cwestiynau hyn, gadewch i ni edrych ar y rhestr o godennau rhedeg yn GKE.
Metrigau. Pa mor hir gweinydd yn ymateb i gais sy'n dod i mewn? Sawl cais yr eiliad sy'n cael ei dderbyn gan y gweinydd? A yw'n rhoi negeseuon gwall?
Gwybodaeth Ddiogelwch. Traffig rhwng llwythgen и gweinydd dim ond yn mynd trwy HTTP neu gan mTLS?
Mae Istio yn ateb yr holl gwestiynau hyn. I wneud hyn, mae Istio yn gosod dirprwy car ochr Gennad ym mhob cod. Mae dirprwy'r Llysgennad yn rhyng-gipio'r holl draffig sy'n dod i mewn ac yn mynd allan i gynwysyddion cymwysiadau. Mae'n golygu hynny gweinydd и llwythgen derbyn trwy ddirprwy-gerbyd Cennad, a'r holl draffig o llwythgen к gweinydd yn mynd drwy'r dirprwy Envoy.
Mae cysylltiadau rhwng dirprwyon Llysgenhadon yn ffurfio rhwyll wasanaeth. Mae pensaernïaeth y rhwyll gwasanaeth yn darparu haen o reolaeth ar ben Kubernetes.
Gan fod dirprwyon Envoy yn rhedeg yn eu cynwysyddion eu hunain, gellir gosod Istio ar ben clwstwr GKE heb fawr ddim newidiadau i god y cais. Ond rydych chi wedi gwneud rhywfaint o waith i gael eich cais yn barod i gael ei reoli gan Istio:
Gwasanaethau ar gyfer pob cynhwysydd. I leoliadau gweinydd и llwythgen yn gysylltiedig â gwasanaeth Kubernetes. Hyd yn oed llwythgen, nad yw'n derbyn ceisiadau sy'n dod i mewn, mae yna wasanaeth.
Rhaid i borthladdoedd mewn gwasanaethau gael enwau. Er y gellir gadael porthladdoedd gwasanaeth heb eu henwi yn GKE, mae Istio yn gofyn ichi nodi enw porthladd yn unol â'i brotocol. Yn y ffeil YAML mae'r porthladd ar gyfer gweinydd galwyd httpoherwydd bod y gweinydd yn defnyddio'r protocol HTTP. Os gwasanaeth defnyddio gRPC, byddech chi'n enwi'r porthladd grpc.
Mae gosodiadau'n cael eu nodi. Felly, gallwch ddefnyddio nodweddion rheoli traffig Istio, megis rhannu traffig rhwng fersiynau o'r un gwasanaeth.
Gosodiad
Mae dwy ffordd i osod Istio. Gall galluogi Istio ar estyniad GKE neu gosod y fersiwn ffynhonnell agored o Istio ar y clwstwr. Gydag Istio ar GKE, gallwch chi reoli gosodiadau ac uwchraddiadau Istio yn hawdd trwy gydol cylch oes clwstwr GKE. Os ydych chi eisiau'r fersiwn ddiweddaraf o Istio neu fwy o reolaeth dros eich cyfluniad panel rheoli Istio, gosodwch y fersiwn ffynhonnell agored yn lle'r estyniad Istio on GKE. I benderfynu ar y dull, darllenwch yr erthygl Oes angen Istio ar GKE arnaf?.
Dewiswch opsiwn, adolygwch y canllaw priodol, a dilynwch y cyfarwyddiadau i osod Istio ar eich clwstwr. Os ydych chi am ddefnyddio Istio gyda'ch cais sydd newydd ei ddefnyddio, galluogi gweithredu ceir ochr ar gyfer gofod enwau diofyn.
Glanhau
Er mwyn osgoi codi tâl ar eich cyfrif Google Cloud Platform am yr adnoddau a ddefnyddiwyd gennych yn y tiwtorial hwn, dilëwch y clwstwr cynwysyddion ar ôl i chi osod Istio a chwarae gyda'r rhaglen sampl. Bydd hyn yn cael gwared ar yr holl adnoddau clwstwr, megis enghreifftiau cyfrifo, disgiau, ac adnoddau rhwydwaith.