Istio jẹ ohun elo irọrun fun sisopọ, aabo ati abojuto awọn ohun elo pinpin. Istio nlo ọpọlọpọ awọn imọ-ẹrọ lati ṣiṣẹ ati ṣakoso sọfitiwia ni iwọn, pẹlu awọn apoti si koodu ohun elo package ati awọn igbẹkẹle fun imuṣiṣẹ, ati Kubernetes lati ṣakoso awọn apoti yẹn. Nitorinaa, lati ṣiṣẹ pẹlu Istio o gbọdọ mọ bii ohun elo pẹlu awọn iṣẹ lọpọlọpọ ti o da lori awọn imọ-ẹrọ wọnyi ṣiṣẹ laisi Istio. Ti awọn irinṣẹ ati awọn imọran wọnyi ba ti mọ ọ tẹlẹ, lero ọfẹ lati foju ikẹkọ yii ki o lọ taara si apakan naa Fifi Istio sori ẹrọ Google Kubernetes (GKE) tabi fifi ohun itẹsiwaju Istio lori GKE.
Eyi jẹ itọsọna igbese-nipasẹ-igbesẹ nibiti a yoo rin nipasẹ gbogbo ilana lati koodu orisun si apoti GKE ki o le ni oye ipilẹ ti awọn imọ-ẹrọ wọnyi pẹlu apẹẹrẹ. Iwọ yoo tun rii bii Istio ṣe n lo agbara awọn imọ-ẹrọ wọnyi. Eyi dawọle pe o ko mọ ohunkohun nipa awọn apoti, Kubernetes, meshes iṣẹ, tabi Istio.
Awọn iṣẹ-ṣiṣe
Ninu ikẹkọ yii, iwọ yoo pari awọn iṣẹ ṣiṣe wọnyi:
Kọ ẹkọ ohun elo agbaye hello ti o rọrun pẹlu awọn iṣẹ lọpọlọpọ.
Ṣiṣe awọn ohun elo lati orisun koodu.
Iṣakojọpọ ohun elo ninu awọn apoti.
Ṣiṣẹda iṣupọ Kubernetes.
Gbigbe awọn apoti sinu iṣupọ kan.
Ṣaaju ki o to bẹrẹ
Tẹle awọn ilana lati mu Kubernetes Engine API ṣiṣẹ:
Ninu ikẹkọ yii, o le lo Cloud Shell, eyiti o mura ẹrọ foju g1-kekere ni Google oniṣiro Engine pẹlu Lainos ti o da lori Debian, tabi Linux tabi kọnputa macOS.
Aṣayan A: Lilo Ikarahun Awọsanma
Awọn anfani ti lilo Cloud Shell:
Python 2 ati Python 3 awọn agbegbe idagbasoke (pẹlu virtualenv) ti wa ni tunto ni kikun.
Òfin Line Tools gcloud, docker, Git и kubectl, eyi ti a yoo lo ti wa ni fifi sori ẹrọ tẹlẹ.
Ohun elo apẹẹrẹ ni kikọ ni Python ati pe o ni awọn paati meji ti o nlo pẹlu lilo REST:
server: o rọrun olupin pẹlu ọkan endpoint GBA, /, eyi ti o tẹ "hello aye" si console.
fifuye: akosile ti o rán ijabọ si server, pẹlu nọmba atunto ti awọn ibeere fun iṣẹju kan.
Nṣiṣẹ ohun elo lati koodu orisun
Lati ṣawari ohun elo apẹẹrẹ, ṣiṣẹ ni Cloud Shell tabi lori kọnputa rẹ.
1) Ni awọn katalogi istio-samples/ayẹwo-apps/helloserver sure server:
python3 server/server.py
Ni ibẹrẹ server awọn atẹle ti han:
INFO:root:Starting server...
2) Ṣii window ebute miiran lati firanṣẹ awọn ibeere si server. Ti o ba nlo ikarahun awọsanma, tẹ aami fikun lati ṣii igba miiran.
3) Fi ibeere ranṣẹ si server:
curl http://localhost:8080
idahun olupin:
Hello World!
4) Lati inu itọsọna nibiti o ti ṣe igbasilẹ koodu apẹẹrẹ, lọ si itọsọna ti o ni fifuye:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Lati irisi Nẹtiwọọki, gbogbo ohun elo nṣiṣẹ lori ogun kan (kọmputa agbegbe tabi Cloud Shell foju ẹrọ). Nitorina o le lo localhostlati firanṣẹ awọn ibeere si server.
10) Lati duro fifuye и server, wọle Konturolu-c ni gbogbo ebute window.
11) Ni awọn ebute window fifuye ma mu agbegbe foju ṣiṣẹ:
deactivate
Iṣakojọpọ ohun elo ninu awọn apoti
Lati ṣiṣẹ ohun elo lori GKE, o nilo lati ṣajọ ohun elo apẹẹrẹ - server и fifuye - ninu awọn apoti. Apoti jẹ ọna lati ṣajọ ohun elo kan lati ya sọtọ si agbegbe rẹ.
Lati ṣajọ ohun elo kan sinu apoti kan, o nilo dockerfile. dockerfile jẹ faili ọrọ ti o ṣalaye awọn aṣẹ fun kikọ koodu orisun ohun elo ati awọn igbẹkẹle rẹ sinu Docker aworan. Ni kete ti a kọ, o gbe aworan naa si iforukọsilẹ eiyan gẹgẹbi Docker Hub tabi Apoti iforukọsilẹ.
Apẹẹrẹ ti wa tẹlẹ dockerfile fun server и fifuye pẹlu gbogbo awọn ofin pataki lati gba awọn aworan. Ni isalẹ - dockerfile fun 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" ]
Egbe LATI Python: 3-slim bi ipilẹ sọ fun Docker lati lo tuntun Python 3 aworan bi ipilẹ.
Egbe DAADA. . daakọ awọn faili orisun si itọsọna iṣẹ lọwọlọwọ (ninu ọran wa nikan olupin.py) si eto faili eiyan naa.
OPO iwọle asọye aṣẹ ti o ti lo lati bẹrẹ awọn eiyan. Ninu ọran wa, aṣẹ yii fẹrẹ jẹ kanna bii eyiti o lo lati ṣiṣẹ olupin.py lati orisun koodu.
Egbe ṢEYA tọkasi wipe server nduro fun data nipasẹ ibudo 8080. Ẹgbẹ yii kii ṣe pese awọn ibudo. Eyi jẹ iru iwe kan ti o nilo lati ṣii ibudo naa 8080 nigbati o bere eiyan.
Ngbaradi lati gba ohun elo rẹ sinu apoti
1) Ṣeto awọn oniyipada ayika wọnyi. Rọpo PROJECT_ID si ID iṣẹ akanṣe GCP rẹ.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Lilo awọn iye PROJECT_ID и GCR_REPO o fi aami si aworan Docker nigbati o kọ ọ ki o si Titari si Iforukọsilẹ Apoti ikọkọ.
Ṣe atunyẹwo atokọ ti awọn aworan inu ibi ipamọ ki o rii daju pe a ti gbe awọn aworan naa silẹ:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Aṣẹ naa ṣafihan awọn orukọ ti awọn aworan ti a gbejade tuntun:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Ṣiṣẹda iṣupọ GKE.
Awọn apoti wọnyi le ṣee ṣiṣẹ lori ẹrọ foju Cloud Shell tabi lori kọnputa pẹlu aṣẹ naa ṣiṣe docker. Ṣugbọn ni agbegbe iṣelọpọ, o nilo ọna kan lati ṣe agbejade awọn apoti aarin. Fun apẹẹrẹ, o nilo eto kan ti o rii daju pe awọn apoti n ṣiṣẹ nigbagbogbo, ati pe o nilo ọna lati ṣe iwọn si oke ati yiyi awọn apẹẹrẹ apoti afikun ti ijabọ ba pọ si.
Lati ṣiṣe awọn ohun elo ti a fi sinu apoti o le lo G.K.E.. GKE jẹ pẹpẹ orchestration ti eiyan ti o ṣajọpọ awọn ẹrọ foju sinu iṣupọ kan. Kọọkan foju ẹrọ ni a npe ni a ipade. Awọn iṣupọ GKE da lori orisun ṣiṣi Kubernetes eto iṣakoso iṣupọ. Kubernetes n pese awọn ọna ṣiṣe fun ibaraenisepo pẹlu iṣupọ.
Egbe gcloud ṣẹda iṣupọ istioready ninu iṣẹ akanṣe GCP ati agbegbe aifọwọyi ti o pato. Lati ṣiṣẹ Istio, a ṣeduro nini o kere ju awọn apa 4 ati ẹrọ foju kan n1-boṣewa-2.
Ẹgbẹ naa ṣẹda iṣupọ ni iṣẹju diẹ. Nigbati iṣupọ naa ba ti ṣetan, aṣẹ naa ṣejade nkan bii eyi ifiranṣẹ.
2) Pese awọn iwe-ẹri ninu ọpa laini aṣẹ kubectllati lo lati ṣakoso iṣupọ:
3) Bayi o le ṣe ibasọrọ pẹlu Kubernetes nipasẹ kubectl. Fun apẹẹrẹ, aṣẹ atẹle le wa ipo ti awọn apa:
kubectl get nodes
Aṣẹ naa ṣe agbejade atokọ ti awọn apa:
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 Key agbekale
Aworan naa fihan ohun elo kan lori GKE:
Ṣaaju ki o to ran awọn apoti ni GKE, kọ ẹkọ awọn imọran bọtini ti Kubernetes. Awọn ọna asopọ wa ni ipari pupọ ti o ba fẹ kọ ẹkọ diẹ sii.
Awọn apa ati awọn iṣupọ. Ni GKE, ipade kan jẹ ẹrọ foju. Lori awọn iru ẹrọ Kubernetes miiran, ipade le jẹ kọnputa tabi ẹrọ foju kan. Iṣupọ kan jẹ akojọpọ awọn apa ti o le gbero ẹyọkan kan nibiti o ti gbe ohun elo ti a fi sinu apo silẹ.
Podu. Ni Kubernetes, awọn apoti nṣiṣẹ ni awọn podu. Pod kan ni Kubernetes jẹ ẹyọ ti a ko le pin. Pod kan mu ọkan tabi diẹ sii awọn apoti. O ran awọn apoti olupin ati fifuye ni lọtọ pods. Nigbati ọpọlọpọ awọn apoti ba wa ninu podu (fun apẹẹrẹ, olupin ohun elo ati aṣoju olupin), awọn apoti ti wa ni iṣakoso bi ẹyọkan ati pin awọn orisun podu.
Awọn imuṣiṣẹ. Ni Kubernetes, imuṣiṣẹ jẹ nkan ti o jẹ akojọpọ awọn adarọ-ese kanna. Imuṣiṣẹ ṣe ifilọlẹ awọn ẹda pupọ ti awọn adarọ-ese ti a pin kaakiri awọn apa iṣupọ. Ifilọlẹ laifọwọyi rọpo awọn adarọ-ese ti o kuna tabi ti ko dahun.
Kubernetes iṣẹ. Nigbati o ba nṣiṣẹ koodu ohun elo ni GKE, asopọ laarin fifuye и server. Nigbati o bẹrẹ awọn iṣẹ lori ẹrọ foju Cloud Shell tabi tabili tabili, o fi awọn ibeere ranṣẹ si server nipasẹ adirẹsi Agbegbe: 8080. Ni kete ti o ti gbe lọ si GKE, awọn adarọ-ese yoo ṣiṣẹ lori awọn apa ti o wa. Nipa aiyipada, o ko ni iṣakoso lori iru ipade ti podu naa nṣiṣẹ lori, nitorinaa iwọ awọn podu ko si yẹ IP adirẹsi.
Lati gba adiresi IP kan fun server, o nilo lati setumo abstraction nẹtiwọki kan lori oke awọn adarọ-ese. Ohun ti o jẹ Kubernetes iṣẹ. Iṣẹ Kubernetes n pese aaye ipari itẹramọṣẹ fun ṣeto awọn adarọ-ese. Diẹ wa orisi ti awọn iṣẹ. server awọn lilo LoadBalancer, eyiti o pese adiresi IP ita lati kan si server lati ita iṣupọ.
Kubernetes tun ni eto DNS ti a ṣe sinu ti o yan awọn orukọ DNS (fun apẹẹrẹ, helloserver.default.cluster.local) awọn iṣẹ. Ṣeun si eyi, awọn adarọ-ese laarin iṣupọ ṣe ibasọrọ pẹlu awọn adarọ-ese miiran ninu iṣupọ ni adirẹsi ayeraye. Orukọ DNS ko le ṣee lo ni ita iṣupọ, gẹgẹbi ninu Cloud Shell tabi lori kọnputa kan.
Kubernetes farahan
Nigbati o ba ṣiṣẹ ohun elo lati orisun, o lo aṣẹ pataki Python3
olupin.py
Imperative tumọ si ọrọ-ìse kan: “Ṣe eyi.”
Kubernetes nlo awoṣe declarative. Eyi tumọ si pe a ko sọ fun Kubernetes gangan kini lati ṣe, ṣugbọn kuku ṣe apejuwe ipo ti o fẹ. Fun apẹẹrẹ, Kubernetes bẹrẹ ati duro awọn adarọ-ese bi o ṣe nilo lati tọju ipo gangan ti eto naa ni ibamu pẹlu ipo ti o fẹ.
O tọkasi ipo ti o fẹ ninu awọn ifihan tabi awọn faili YAML. Faili YAML ni awọn pato ninu fun ọkan tabi diẹ ẹ sii awọn nkan Kubernetes.
Apẹẹrẹ ni faili YAML kan fun server и fifuye. Faili YAML kọọkan n ṣalaye ipo ti o fẹ ti ohun imuṣiṣẹ ati iṣẹ Kubernetes.
Abala spec.awoṣe asọye a podu awoṣe. Aaye kan wa ninu sipesifikesonu podu image, eyi ti o ṣe apejuwe orukọ aworan ti yoo fa jade lati Iforukọsilẹ Apoti.
LoadBalancer: Awọn onibara fi awọn ibeere ranṣẹ si adiresi IP ti olutọju fifuye, eyiti o ni adiresi IP ti o duro ati pe o wa lati ita iṣupọ.
afojusunPort: bi o ṣe ranti, ẹgbẹ naa EXPOSE 8080 в dockerfile ko pese awọn ibudo. O pese ibudo naa 8080ki o le kan si awọn eiyan server ita iṣupọ. Ninu ọran tiwa helosvc.default.cluster.agbegbe:80 (orukọ kukuru: helosvc) ni ibamu si ibudo 8080 Pod IP adirẹsi helloserver.
ibudo: Eyi ni nọmba ibudo nibiti awọn iṣẹ miiran ninu iṣupọ yoo fi awọn ibeere ranṣẹ.
fifuye.yaml
Ohun imuṣiṣẹ si fifuye.yaml o jo olupin.yaml. Iyatọ ni pe ohun imuṣiṣẹ ni apakan kan env. O ṣe asọye awọn oniyipada ayika ti o nilo fifuye ati eyiti o fi sii nigbati o nṣiṣẹ ohun elo lati orisun.
Aago fifuye ko gba awọn ibeere ti nwọle, fun aaye naa iru itọkasi Àkópọ̀ IP. Iru yii n pese adiresi IP itẹramọṣẹ ti awọn iṣẹ inu iṣupọ le lo, ṣugbọn adiresi IP yii ko farahan si awọn alabara ita.
Rọpo PROJECT_ID si ID iṣẹ akanṣe GCP rẹ.
9) Fipamọ ati sunmọ fifuye.yaml, pa olootu ọrọ.
10) Mu faili YAML lọ si Kubernetes:
kubectl apply -f loadgen.yaml
Ni ipari aṣeyọri, aṣẹ naa ṣe agbejade koodu atẹle:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Ṣayẹwo ipo ti awọn podu:
kubectl get pods
Ilana naa fihan ipo naa:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Jade awọn iwe ohun elo lati podu fifuye. Rọpo POD_ID si idamo lati idahun ti tẹlẹ.
kubectl logs loadgenerator-POD_ID
13) Gba awọn adiresi IP ita helosvc:
kubectl get service
Idahun aṣẹ naa dabi iru eyi:
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) Fi ibeere ranṣẹ si helosvc: ropo EXTERNAL_IP si ita IP adirẹsi helosvc.
curl http://EXTERNAL_IP
Jẹ ká ya lori Istio
O ti ni ohun elo kan ti a fi ranṣẹ si GKE. fifuye le lo Kubernetes DNS (helosvc:80) lati firanṣẹ awọn ibeere si serverati pe o le firanṣẹ awọn ibeere si server nipasẹ ita IP adirẹsi. Botilẹjẹpe Kubernetes ni awọn ẹya pupọ, alaye diẹ wa ti o padanu nipa awọn iṣẹ naa:
Bawo ni awọn iṣẹ ṣe nlo? Kini awọn ibatan laarin awọn iṣẹ? Bawo ni ijabọ ṣiṣan laarin awọn iṣẹ? Ṣe o mọ pe fifuye rán ibeere lati server, ṣugbọn fojuinu pe o ko mọ ohunkohun nipa ohun elo naa. Lati dahun ibeere wọnyi, jẹ ki a wo atokọ ti awọn adarọ-ese ti nṣiṣẹ ni GKE.
Awọn iwọn. Bawo lo se gun to server ṣe idahun si ibeere ti nwọle? Awọn ibeere melo ni iṣẹju-aaya ni olupin gba? Ṣe o fun awọn ifiranṣẹ aṣiṣe?
Aabo Alaye. Traffic laarin fifuye и server o kan kọja HTTP tabi nipasẹ mTLS?
Istio dahun gbogbo awọn ibeere wọnyi. Lati ṣe eyi, Istio gbe aṣoju ẹgbẹ ẹgbẹ kan envoy ninu kọọkan podu. Aṣoju aṣoju Aṣoju n ṣe idiwọ gbogbo awọn ijabọ ti nwọle ati ti njade si awọn apoti ohun elo. Iyẹn tumọ si server и fifuye gba nipasẹ sidecar aṣoju Envoy, ati gbogbo awọn ijabọ lati fifuye к server lọ nipasẹ awọn aṣoju aṣoju.
Awọn isopọ laarin awọn aṣoju Aṣoju ṣe agbekalẹ iṣẹ kan. Awọn faaji apapo iṣẹ pese Layer ti iṣakoso lori oke Kubernetes.
Niwọn igba ti awọn aṣoju aṣoju nṣiṣẹ ninu awọn apoti tiwọn, Istio le fi sori ẹrọ lori oke iṣupọ GKE pẹlu fere ko si awọn ayipada si koodu ohun elo. Ṣugbọn o ti ṣe diẹ ninu awọn iṣẹ lati jẹ ki ohun elo rẹ ṣetan lati ṣakoso nipasẹ Istio:
Awọn iṣẹ fun gbogbo awọn apoti. Si awọn imuṣiṣẹ server и fifuye ti so lati Kubernetes iṣẹ. Paapaa fifuye, ti ko gba awọn ibeere ti nwọle, iṣẹ kan wa.
Awọn ibudo ni awọn iṣẹ gbọdọ ni awọn orukọ. Botilẹjẹpe a le fi awọn ibudo iṣẹ silẹ laigba orukọ ni GKE, Istio nilo ki o pato ibudo orukọ ni ibamu pẹlu ilana rẹ. Ninu faili YAML ibudo fun server ti a npe ni httpnitori olupin nlo ilana naa HTTP... Ti iṣẹ lo gRPC, o yoo lorukọ ibudo grpc.
Awọn imuṣiṣẹ ti wa ni ifihan. Nitorinaa, o le lo awọn ẹya iṣakoso ijabọ Istio, gẹgẹbi pipin ijabọ laarin awọn ẹya ti iṣẹ kanna.
Fifi sori Istio
Awọn ọna meji lo wa lati fi sori ẹrọ Istio. Le jeki Istio on GKE itẹsiwaju tabi fi sori ẹrọ ẹya orisun ṣiṣi ti Istio lori iṣupọ. Pẹlu Istio lori GKE, o le ni rọọrun ṣakoso awọn fifi sori ẹrọ Istio ati awọn iṣagbega jakejado igbesi aye iṣupọ GKE. Ti o ba fẹ ẹya tuntun ti Istio tabi iṣakoso diẹ sii lori iṣeto iṣakoso Istio rẹ, fi ẹya orisun ṣiṣi sori ẹrọ dipo Istio lori itẹsiwaju GKE. Lati pinnu lori ọna, ka nkan naa Ṣe Mo nilo Istio lori GKE?.
Yan aṣayan kan, ṣayẹwo itọsọna ti o yẹ, ki o tẹle awọn ilana lati fi Istio sori iṣupọ rẹ. Ti o ba fẹ lo Istio pẹlu ohun elo tuntun ti a fi ranṣẹ, jeki sidecar imuse fun aaye orukọ aiyipada.
Ninu
Lati yago fun gbigba agbara si akọọlẹ Google Cloud Platform rẹ fun awọn orisun ti o lo ninu ikẹkọ yii, paarẹ iṣupọ eiyan ni kete ti o ti fi Istio sori ẹrọ ati ṣere pẹlu ohun elo apẹẹrẹ. Eyi yoo yọ gbogbo awọn orisun iṣupọ kuro, gẹgẹbi awọn iṣẹlẹ iṣiro, awọn disiki, ati awọn orisun nẹtiwọki.