Istio hija għodda konvenjenti għall-konnessjoni, l-iżgurar u l-monitoraġġ tal-applikazzjonijiet distribwiti. Istio juża varjetà ta 'teknoloġiji biex iħaddem u jamministra softwer fuq skala, inklużi kontenituri biex jippakkjaw kodiċi tal-applikazzjoni u dipendenzi għall-iskjerament, u Kubernetes biex jimmaniġġja dawk il-kontenituri. Għalhekk, biex taħdem ma 'Istio trid tkun taf kif taħdem applikazzjoni b'diversi servizzi bbażati fuq dawn it-teknoloġiji mingħajr Istio. Jekk dawn l-għodod u l-kunċetti diġà huma familjari għalik, tħossok liberu li taqbeż dan it-tutorja u mur dritt għas-sezzjoni Installazzjoni ta' Istio fuq Google Kubernetes Engine (GKE) jew tinstalla estensjoni Istio fuq GKE.
Din hija gwida pass pass fejn se nimxu permezz tal-proċess kollu mill-kodiċi tas-sors sal-kontenitur GKE biex nagħtuk fehim bażiku ta 'dawn it-teknoloġiji permezz ta' eżempju. Int ser tara wkoll kif Istio jisfrutta l-qawwa ta 'dawn it-teknoloġiji. Dan jassumi li ma taf xejn dwar kontenituri, Kubernetes, malji tas-servizz, jew Istio.
kompiti
F'dan it-tutorja, int se tlesti l-kompiti li ġejjin:
Titgħallem applikazzjoni sempliċi hello world b'ħafna servizzi.
Mexxi l-applikazzjoni mill-kodiċi tas-sors.
Ippakkjar l-applikazzjoni f'kontenituri.
Ħolqien ta' cluster Kubernetes.
L-iskjerament ta' kontenituri fi cluster.
Qabel ma tibda
Segwi l-istruzzjonijiet biex tattiva l-API Kubernetes Engine:
F'dan it-tutorja, tista 'tuża Cloud Shell, li tipprepara l-magna virtwali g1-żgħir fil-Google Compute Engine b'Linux ibbażat fuq Debian, jew kompjuter Linux jew macOS.
Għażla A: Uża Cloud Shell
Benefiċċji tal-użu ta' Cloud Shell:
Ambjenti ta' żvilupp Python 2 u Python 3 (inkluż virtualenv) huma kkonfigurati bis-sħiħ.
Għodod tal-Linja tal-Kmand gcloud, docker, Mur и kubectl, li se nużaw huma diġà installati.
L-applikazzjoni tal-kampjun hija miktuba f'Python u tikkonsisti f'żewġ komponenti li jinteraġixxu bl-użu SERĦAN:
servers: server sempliċi b'endpoint wieħed IKOLLOK, /, li jistampa "hello world" fuq il-console.
loadgen: skript li jibgħat it-traffiku lil servers, b'numru konfigurabbli ta' talbiet kull sekonda.
Tmexxi applikazzjoni mill-kodiċi tas-sors
Biex tesplora l-applikazzjoni tal-kampjun, mexxiha f'Cloud Shell jew fuq il-kompjuter tiegħek.
1) Fil-katalgu istio-samples/sample-apps/helloserver run servers:
python3 server/server.py
Fl-istartjar servers jintwera dan li ġej:
INFO:root:Starting server...
2) Iftaħ tieqa terminali oħra biex tibgħat it-talbiet lil servers. Jekk qed tuża Cloud Shell, ikklikkja l-ikona żid biex tiftaħ sessjoni oħra.
3) Ibgħat talba lil servers:
curl http://localhost:8080
tweġibiet tas-server:
Hello World!
4) Mid-direttorju fejn niżżilt il-kodiċi tal-kampjun, mur fid-direttorju li fih loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Mill-perspettiva tan-netwerking, l-applikazzjoni kollha taħdem fuq host wieħed (kompjuter lokali jew magna virtwali Cloud Shell). Għalhekk tista 'tuża localhostbiex tibgħat talbiet lil servers.
10) Biex tieqaf loadgen и servers, daħħal Ctrl-c f'kull tieqa terminali.
11) Fit-tieqa tat-terminal loadgen iddiżattiva l-ambjent virtwali:
deactivate
Ippakkjar ta' applikazzjoni f'kontenituri
Biex tħaddem l-applikazzjoni fuq GKE, għandek bżonn tippakkja l-applikazzjoni ta' eżempju − servers и loadgen - fi Kontenituri. Kontenitur huwa mod biex tiġi ppakkjata applikazzjoni biex tiġi iżolata mill-ambjent tagħha.
Biex tippakkja applikazzjoni f'kontenitur, għandek bżonn dockerfile. dockerfile huwa fajl test li jiddefinixxi kmandi għall-bini tal-kodiċi tas-sors tal-applikazzjoni u d-dipendenzi tagħha fihom Immaġini Docker. Ladarba tinbena, ittella 'l-immaġni f'reġistru tal-kontejners bħal Docker Hub jew Reġistru tal-Kontenituri.
L-eżempju diġà għandu dockerfile għall- servers и loadgen bil-kmandi kollha meħtieġa biex tiġbor immaġini. Hawn taħt - dockerfile għall- servers:
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 MINN python:3-slim bħala bażi jgħid lil Docker biex juża l-aħħar Immaġini Python 3 bħala bażi.
Team KOPJA. . tikkopja l-fajls tas-sors fid-direttorju tax-xogħol kurrenti (fil-każ tagħna biss server.py) għas-sistema tal-fajls tal-kontenitur.
PUNT TA' DĦUL jiddefinixxi l-kmand li jintuża biex jibda l-kontenitur. Fil-każ tagħna, dan il-kmand huwa kważi l-istess bħal dak li kont tmexxi server.py mill-kodiċi tas-sors.
Team ESPOŻI jindika li servers jistenna dejta mill-port 8080. Dan it-tim mhux jipprovdi portijiet. Din hija xi tip ta 'dokumentazzjoni li hija meħtieġa biex tiftaħ il-port 8080 meta tibda l-kontenitur.
Tħejjija biex tikkontejnizza l-applikazzjoni tiegħek
Irrevedi l-lista tal-immaġini fir-repożitorju u vverifika li l-immaġini ttellgħu:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Il-kmand juri l-ismijiet tal-immaġini li għadhom kif ttellgħu:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Il-ħolqien ta' cluster GKE.
Dawn il-kontenituri jistgħu jitħaddmu fuq magna virtwali Cloud Shell jew fuq kompjuter bil-kmand docker run. Iżda f'ambjent ta 'produzzjoni, għandek bżonn mod kif orkestra l-kontenituri ċentralment. Pereżempju, għandek bżonn sistema li tiżgura li l-kontejners ikunu dejjem għaddejjin, u għandek bżonn mod kif tkabbar u żżid każijiet ta' kontenituri addizzjonali jekk jiżdied it-traffiku.
Biex tħaddem applikazzjonijiet f'kontejners tista' tuża G.K.E.. GKE hija pjattaforma tal-orkestrazzjoni tal-kontejners li tiġbor magni virtwali fi cluster. Kull magna virtwali tissejjaħ node. Il-clusters tal-GKE huma bbażati fuq is-sistema ta' ġestjoni tal-clusters ta' Kubernetes open source. Kubernetes jipprovdi mekkaniżmi għall-interazzjoni mal-cluster.
Team gcloud joħloq cluster istioready fil-proġett GCP u fiż-żona default li speċifikajt. Biex tmexxi Istio, nirrakkomandaw li jkollok mill-inqas 4 nodi u magna virtwali n1-standard-2.
It-tim joħloq il-cluster fi ftit minuti. Meta l-cluster ikun lest, il-kmand joħroġ xi ħaġa bħal din Сообщение.
3) Issa tista 'tikkomunika ma' Kubernetes permezz kubectl. Pereżempju, il-kmand li ġej jista 'jsib l-istatus tan-nodi:
kubectl get nodes
Il-kmand jipproduċi lista ta’ nodi:
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 Kunċetti Ewlenin
Id-dijagramma turi applikazzjoni fuq GKE:
Qabel ma tuża kontenituri f'GKE, tgħallem il-kunċetti ewlenin ta' Kubernetes. Hemm links fl-aħħar nett jekk trid titgħallem aktar.
Nodi u raggruppamenti. Fil-GKE, node hija magna virtwali. Fuq pjattaformi Kubernetes oħra, nodu jista 'jkun kompjuter jew magna virtwali. Cluster huwa ġabra ta' nodi li jistgħu jitqiesu bħala unità waħda fejn tuża applikazzjoni fil-kontejners.
Imżiewed. F'Kubernetes, il-kontenituri jimxu fi imżiewed. Pod f'Kubernetes hija unità indiviżibbli. Pod iżomm kontenitur wieħed jew aktar. Inti tiskjera kontenituri tas-server u loadgen fi imżiewed separati. Meta jkun hemm diversi kontenituri f'pod (pereżempju, server tal-applikazzjoni u proxy server), il-kontenituri huma ġestiti bħala entità waħda u jaqsmu r-riżorsi pod.
Skjeramenti. F'Kubernetes, skjerament huwa oġġett li huwa ġabra ta 'miżwed identiċi. L-iskjerament tniedi repliki multipli ta’ pods imqassma fuq in-nodi tal-clusters. L-iskjerament jissostitwixxi awtomatikament il-miżwed li fallew jew li ma jirrispondux.
Servizz Kubernetes. Meta tħaddem kodiċi tal-applikazzjoni fil-GKE, il-konnessjoni bejn loadgen и servers. Meta bdejt is-servizzi fuq magna virtwali jew desktop tal-Cloud Shell, bgħatt talbiet lil servers по адресу localhost: 8080. Ladarba jiġu skjerati fil-GKE, il-miżwed jiġu esegwiti fuq in-nodi disponibbli. B'mod awtomatiku, m'għandekx kontroll fuq liema node qed jaħdem il-pod, allura inti imżiewed l-ebda indirizz IP permanenti.
Biex tikseb indirizz IP għal servers, għandek bżonn tiddefinixxi estrazzjoni tan-netwerk fuq il-miżwed. Dak hu Servizz Kubernetes. Is-servizz Kubernetes jipprovdi punt final persistenti għal sett ta 'miżwed. Hemm ftit tipi ta' servizzi. servers użi LoadBalancer, li jipprovdi indirizz IP estern biex tikkuntattja servers minn barra l-cluster.
Kubernetes għandu wkoll sistema DNS inkorporata li tassenja ismijiet DNS (pereżempju, helloserver.default.cluster.local) servizzi. Grazzi għal dan, il-miżwed fi ħdan il-cluster jikkomunikaw ma 'miżwed oħra fil-cluster f'indirizz permanenti. L-isem DNS ma jistax jintuża barra l-cluster, bħal fil-Cloud Shell jew fuq kompjuter.
Kubernetes manifest
Meta ħadt l-applikazzjoni mis-sors, użajt il-kmand imperattiv python3
server.py
L-imperattiv jimplika verb: "għamel dan."
Kubernetes juża mudell dikjarattiv. Dan ifisser li mhux qed ngħidu lil Kubernetes eżattament x'għandu jagħmel, iżda pjuttost niddeskrivu l-istat mixtieq. Pereżempju, Kubernetes jibda u jwaqqaf il-miżwed kif meħtieġ biex jiżgura li l-istat attwali tas-sistema jaqbel mal-istat mixtieq.
Int tindika l-istat mixtieq f'manifesti jew fajls IAML. Fajl YAML fih speċifikazzjonijiet għal oġġett Kubernetes wieħed jew aktar.
L-eżempju fih fajl YAML għal servers и loadgen. Kull fajl YAML jispeċifika l-istat mixtieq tal-oġġett tal-iskjerament u s-servizz Kubernetes.
L-ewwel qasam spec fih deskrizzjoni tal-istat mixtieq.
spec.repliki jindika n-numru mixtieq ta’ imżiewed.
Sezzjoni spec.template jiddefinixxi mudell pod. Hemm qasam fl-ispeċifikazzjoni tal-pod immaġni, li jispeċifika l-isem tal-immaġni li jeħtieġ li tiġi estratta mir-Reġistru tal-Kontenituri.
LoadBalancer: Il-klijenti jibagħtu talbiet lill-indirizz IP tal-load balancer, li għandu indirizz IP persistenti u huwa aċċessibbli minn barra l-cluster.
targetPort: kif tiftakar, it-tim JESPONI 8080 в dockerfile ma pprovdewx portijiet. Inti tipprovdi l-port 8080sabiex inti tista 'tikkuntattja l-kontenitur servers barra l-cluster. Fil-każ tagħna hellosvc.default.cluster.local:80 (isem fil-qosor: hellosvc) jikkorrispondi għall-port 8080 Pod indirizzi IP Helloserver.
port: Dan huwa n-numru tal-port fejn servizzi oħra fil-cluster se jibagħtu t-talbiet.
loadgen.yaml
Oġġezzjoni għall-iskjerament loadgen.yaml qisek server.yaml. Id-differenza hija li l-oġġett tal-iskjerament fih sezzjoni NS. Jiddefinixxi l-varjabbli ambjentali li huma meħtieġa loadgen u li installajt meta tħaddem l-applikazzjoni mis-sors.
Darba loadgen ma jaċċettax talbiet deħlin, għall-qasam tip indikat ClusterIP. Dan it-tip jipprovdi indirizz IP persistenti li s-servizzi fil-cluster jistgħu jużaw, iżda dan l-indirizz IP mhuwiex espost għal klijenti esterni.
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) Ibgħat talba lil hellosvc: ibdel ESTERNA_IP għal indirizz IP estern hellosvc.
curl http://EXTERNAL_IP
Ejja nieħdu fuq Istio
Diġà għandek applikazzjoni skjerata għal GKE. loadgen tista' tuża Kubernetes DNS (hellosvc:80) biex tibgħat talbiet lil serversu tista 'tibgħat talbiet lil servers mill-indirizz IP estern. Għalkemm Kubernetes għandu ħafna karatteristiċi, hemm xi informazzjoni nieqsa dwar is-servizzi:
Kif jinteraġixxu s-servizzi? X'inhuma r-relazzjonijiet bejn is-servizzi? Kif jgħaddi t-traffiku bejn is-servizzi? Inti konxju li loadgen jibgħat talbiet lil servers, imma immaġina li ma taf xejn dwar l-applikazzjoni. Biex inwieġbu dawn il-mistoqsijiet, inħarsu lejn il-lista ta 'miżwed li jaħdmu fil-GKE.
Metriċi. Kemm idum servers jirrispondi għal talba li tkun waslet? Kemm ir-rikjesti kull sekonda jaslu mis-server? Jagħti messaġġi ta' żball?
Informazzjoni dwar is-Sigurtà. Traffiku bejn loadgen и servers jgħaddi biss HTTP jew minn mTLS?
Istio iwieġeb dawn il-mistoqsijiet kollha. Biex tagħmel dan, Istio ipoġġi prokura sidecar mibgħut f'kull pod. Il-prokura tal-Mibgħut jinterċetta t-traffiku kollu deħlin u ħerġin lejn il-kontenituri tal-applikazzjoni. Dan ifisser li servers и loadgen tirċievi permezz ta' prokura sidecar Mibgħut, u t-traffiku kollu minn loadgen к servers jgħaddi mill-prokura tal-Mibgħut.
Konnessjonijiet bejn il-prokuri tal-Envoy jiffurmaw xibka tas-servizz. L-arkitettura tal-malji tas-servizz tipprovdi saff ta 'kontroll fuq Kubernetes.
Peress li l-prokuri tal-Envoy jaħdmu fil-kontenituri tagħhom stess, Istio jista' jiġi installat fuq cluster GKE bi kważi l-ebda tibdil fil-kodiċi tal-applikazzjoni. Imma għamilt xi xogħol biex tħejji l-applikazzjoni tiegħek biex tkun immaniġġjata minn Istio:
Servizzi għall-kontejners kollha. Għal skjeramenti servers и loadgen marbut mas-servizz Kubernetes. Anke loadgen, li ma jirċievix talbiet deħlin, hemm servizz.
Portijiet fis-servizzi għandu jkollhom ismijiet. Għalkemm il-portijiet tas-servizz jistgħu jitħallew mingħajr isem fil-GKE, Istio jeħtieġ li tispeċifika isem tal-port skond il-protokoll tiegħu. Fil-fajl YAML il-port għal servers imsejħa httpgħaliex is-server juża l-protokoll HTTP... Jekk servizz użati gRPC, inti ssemmi l-port grpc.
L-iskjeramenti huma mmarkati. Għalhekk, tista 'tuża l-karatteristiċi tal-ġestjoni tat-traffiku ta' Istio, bħall-qsim tat-traffiku bejn verżjonijiet tal-istess servizz.
Installazzjoni Istio
Hemm żewġ modi kif tinstalla Istio. Can abilita Istio fuq l-estensjoni GKE jew installa l-verżjoni open source ta 'Istio fuq il-cluster. B'Istio fuq GKE, tista' faċilment timmaniġġja l-installazzjonijiet u l-aġġornamenti ta' Istio matul iċ-ċiklu tal-ħajja tal-cluster GKE. Jekk trid l-aħħar verżjoni ta 'Istio jew aktar kontroll fuq il-konfigurazzjoni tal-pannell tal-kontroll Istio tiegħek, installa l-verżjoni open source minflok l-estensjoni Istio fuq GKE. Biex tiddeċiedi dwar l-approċċ, aqra l-artiklu Għandi bżonn Istio fuq GKE?.
Agħżel għażla, irrevedi l-gwida xierqa, u segwi l-istruzzjonijiet biex tinstalla Istio fuq il-cluster tiegħek. Jekk trid tuża Istio mal-applikazzjoni ġdida tiegħek, jippermettu l-implimentazzjoni sidecar għall-ispazju tal-isem inadempjenza.
Tindif
Biex tevita li tiġi ċċarġjata fuq il-kont tiegħek tal-Google Cloud Platform għar-riżorsi li użajt f'dan it-tutorja, ħassar ir-raggruppament tal-kontejners ladarba tkun installajt Istio u lgħabt bl-applikazzjoni tal-kampjun. Dan se jneħħi r-riżorsi kollha tal-clusters, bħal istanzi ta' komputazzjoni, diski, u riżorsi tan-netwerk.