Istio banatutako aplikazioak konektatzeko, ziurtatzeko eta monitorizatzeko tresna erosoa da. Istio-k hainbat teknologia erabiltzen ditu softwarea eskalan exekutatu eta kudeatzeko, edukiontziak barne aplikazio-kodea eta inplementatzeko menpekotasunak paketatzeko, eta Kubernetes edukiontzi horiek kudeatzeko. Horregatik, Istio-rekin lan egiteko teknologia hauetan oinarritutako hainbat zerbitzu dituen aplikazio batek nola funtzionatzen duen jakin behar da gabe Istio. Tresna eta kontzeptu hauek dagoeneko ezagunak bazaizkizu, lasaitu tutorial hau saltatu eta joan zuzenean atalera Istio instalatzen Google Kubernetes Engine (GKE) edo luzapen bat instalatzea Istio GKEn.
Urratsez urratseko gida bat da, non iturburu-kodetik hasi eta GKE edukiontzira arte prozesu osoa zeharkatuko dugun, adibide baten bidez teknologia hauen oinarrizko ezagutza emateko. Istio teknologia hauen indarra nola aprobetxatzen duen ere ikusiko duzu. Honek suposatzen du ez dakizula edukiontziei, Kubernetes, zerbitzu-sareei edo Istio-ri buruz.
zereginak
Tutorial honetan, zeregin hauek beteko dituzu:
Hello world aplikazio sinple bat ikastea hainbat zerbitzurekin.
Exekutatu aplikazioa iturburu-kodetik.
Aplikazioa ontzietan ontziratzea.
Kubernetes kluster bat sortzea.
Edukiontziak kluster batean zabaltzea.
Hasi aurretik
Jarraitu argibideei Kubernetes Engine APIa gaitzeko:
Itxaron APIa eta erlazionatutako zerbitzuak gaituta dauden bitartean. Baliteke minutu batzuk behar izatea.
Ziurtatu Google Cloud Platform proiekturako fakturazioa konfiguratuta dagoela. Ikasi fakturazioa gaitzen.
Tutorial honetan, makina birtuala prestatzen duen Cloud Shell erabil dezakezu g1-small Google Compute Engine-n Debian oinarritutako Linux, edo Linux edo macOS ordenagailu batekin.
A aukera: Cloud Shell erabiltzea
Cloud Shell erabiltzearen abantailak:
Python 2 eta Python 3 garapen-inguruneak (barne birtualenv) guztiz konfiguratuta daude.
Aplikazio adibidea Python-en idatzita dago eta erabiliz elkarreragiten duten bi osagaiz osatuta dago REST:
zerbitzaria: zerbitzari sinplea amaiera puntu batekin LORTU, /, "kaixo mundua" inprimatzen duena kontsolan.
loadgen: trafikoa bidaltzen duen gidoia zerbitzaria, segundoko eskaera kopuru konfiguragarri batekin.
Aplikazio bat iturburu-kodetik exekutatzen
Lagin-aplikazioa arakatzeko, exekutatu Cloud Shell-en edo zure ordenagailuan.
1) Katalogoan istio-samples/sample-apps/helloserver Korrika egin zerbitzaria:
python3 server/server.py
Abiaraztean zerbitzaria honako hau bistaratzen da:
INFO:root:Starting server...
2) Ireki beste terminal-leiho bat eskaerak bidaltzeko zerbitzaria. Cloud Shell erabiltzen ari bazara, egin klik Gehitu ikonoan beste saio bat irekitzeko.
3) Bidali eskaera hona zerbitzaria:
curl http://localhost:8080
zerbitzariaren erantzunak:
Hello World!
4) Lagin-kodea deskargatu duzun direktoriotik, joan horrek duen direktoriora loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Sarearen ikuspegitik, aplikazio osoa ostalari bakar batean exekutatzen da (ordenagailu lokala edo Cloud Shell makina birtuala). Beraz, erabil dezakezu localhosteskaerak bidaltzeko zerbitzaria.
10) Gelditzeko loadgen ΠΈ zerbitzaria, sartu Ktrl-c terminaleko leiho guztietan.
11) Terminaleko leihoan loadgen desaktibatu ingurune birtuala:
deactivate
Aplikazio bat ontzietan ontziratzea
Aplikazioa GKE-n exekutatzeko, adibideko aplikazioa paketatu behar duzu - zerbitzaria ΠΈ loadgen - urtean edukiontzi. Edukiontzi bat aplikazio bat paketatzeko modu bat da, ingurunetik isolatzeko.
Aplikazio bat edukiontzi batean paketatzeko, behar duzu Dockerfile. Dockerfile Aplikazioaren iturburu-kodea eta haren menpekotasunak eraikitzeko komandoak definitzen dituen testu-fitxategi bat da Docker irudia. Eraiki ondoren, irudia kargatzen duzu edukiontzi-erregistro batera, hala nola Docker Hub edo Edukiontzien Erregistroa.
Adibideak dagoeneko badu Dockerfile egiteko zerbitzaria ΠΈ loadgen irudiak biltzeko beharrezko komando guztiekin. Behean - Dockerfile egiteko zerbitzaria:
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 FROM python: 3-slim oinarri gisa azkena erabiltzeko esaten dio Dockerri Python 3 irudia oinarri gisa.
Team KOPIA. . iturburu-fitxategiak uneko lan-direktoriora kopiatzen ditu (gure kasuan soilik zerbitzaria.py) edukiontziaren fitxategi-sistemara.
SARRERA edukiontzia abiarazteko erabiltzen den komandoa definitzen du. Gure kasuan, komando hau exekutatu zenuenaren ia berdina da zerbitzaria.py iturburu-kodetik.
Team ERAKUSI hori adierazten du zerbitzaria portuaren bidez datuak itxaroten ditu 8080. Talde hau ez da portuak eskaintzen ditu. Hau portua irekitzeko beharrezkoa den dokumentazio mota bat da 8080 edukiontzia abiaraztean.
Zure aplikazioa edukiontziratzeko prestatzen
1) Ezarri ondoko ingurune-aldagaiak. Ordezkatu PROJECT_ID zure GCP proiektuaren IDra.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Balioak erabiltzea PROJECT_ID ΠΈ GCR_REPO Docker irudia etiketatzen duzu eraikitzen duzunean eta edukiontzien erregistro pribatu batera bultzatzen duzu.
2) Ezarri GCP proiektu lehenetsia komando lerroko tresnarako gcloud.
gcloud config set project $PROJECT_ID
3) Ezarri lehenetsitako eremua komando lerroko tresnarako gcloud.
gcloud config set compute/zone us-central1-b
4) Ziurtatu Container Registry zerbitzua gaituta dagoela GCP proiektuan.
Berrikusi biltegiko irudien zerrenda eta egiaztatu irudiak igo direla:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Komandoak kargatu berri diren irudien izenak erakusten ditu:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
GKE kluster bat sortzea.
Edukiontzi hauek Cloud Shell makina birtual batean edo komandoa duen ordenagailu batean exekutatu daitezke docker run. Baina ekoizpen-ingurunean, edukiontziak zentralki orkestratzeko modu bat behar duzu. Adibidez, edukiontziak beti exekutatzen ari direla ziurtatzen duen sistema behar duzu eta trafikoa handitzen bada edukiontzi-instantzia gehigarriak eskalatzeko eta biratzeko modu bat behar duzu.
Erabili ditzakezu edukiontzidun aplikazioak exekutatzeko G.K.E.. GKE edukiontzi orkestratzeko plataforma bat da, makina birtualak kluster batean biltzen dituena. Makina birtual bakoitzari nodo deitzen zaio. GKE klusterrak Kubernetes kode irekiko kluster kudeaketa sisteman oinarritzen dira. Kubernetes-ek clusterrarekin elkarreragiteko mekanismoak eskaintzen ditu.
Team gcloud prest dagoen kluster bat sortzen du zehaztu duzun GCP proiektuan eta eremu lehenetsian. Istio exekutatzeko, gutxienez 4 nodo eta makina birtual bat izatea gomendatzen dugu n1-estandar-2.
Taldeak klusterra sortzen du minutu gutxitan. Klusterra prest dagoenean, komandoak honelako zerbait ateratzen du mezua.
2) Eman kredentzialak komando lerroko tresnan kubectlclusterra kudeatzeko erabiltzeko:
3) Orain Kubernetesekin komunika zaitezke kubectl. Adibidez, komando honek nodoen egoera aurki dezake:
kubectl get nodes
Komandoak nodoen zerrenda sortzen du:
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
Kubernetesen funtsezko kontzeptuak
Diagramak GKE-n aplikazio bat erakusten du:
GKE-n edukiontziak zabaldu aurretik, ikasi Kubernetes-en funtsezko kontzeptuak. Bukaeran estekak daude gehiago jakin nahi baduzu.
Nodoak eta klusterrak. GKEn, nodo bat makina birtual bat da. Beste Kubernetes plataformetan, nodo bat ordenagailu bat edo makina birtual bat izan daiteke. Kluster bat edukiontzidun aplikazio bat zabaltzen duzun unitate bakartzat har daitekeen nodoen bilduma da.
Lekak. Kubernetesen, edukiontziak ontzietan ibiltzen dira. Kubernetes-en Pod bat unitate zatiezina da. Pod batek ontzi bat edo gehiago ditu. Zerbitzariaren edukiontziak zabaltzen dituzu eta loadgen leka bereizietan. Pod batean hainbat edukiontzi daudenean (adibidez, aplikazioen zerbitzari bat eta proxy zerbitzaria), edukiontziak entitate bakar gisa kudeatzen dira eta pod baliabideak partekatzen dituzte.
Inplementazioak. Kubernetes-en, inplementazioa ontzi berdinen bilduma den objektu bat da. Inplementazioak kluster-nodoetan banatutako poden erreplika anitz abiarazten ditu. Inplementazioak automatikoki ordezkatzen ditu huts egin duten edo erantzuten ez duten podak.
Kubernetes zerbitzua. GKE-n aplikazio-kodea exekutatzen denean, arteko konexioa loadgen ΠΈ zerbitzaria. Cloud Shell makina birtual edo mahaigainean zerbitzuak abiarazi dituzunean, eskaerak bidali zenizkion zerbitzaria helbidearen arabera localhost: 8080. GKEn inplementatu ondoren, pod-ak erabilgarri dauden nodoetan exekutatzen dira. Lehenespenez, ez duzu poda zein nodotan exekutatzen ari den kontrolatzen, beraz, zuk lekak IP helbide iraunkorrik ez.
IP helbidea lortzeko zerbitzaria, sare-abstrakzio bat definitu behar duzu leken gainean. Horixe da Kubernetes zerbitzua. Kubernetes zerbitzuak amaiera-puntu iraunkor bat eskaintzen du pod multzo baterako. Gutxi daude zerbitzu motak. zerbitzaria erabilerak LoadBalancer, harremanetarako kanpoko IP helbidea eskaintzen duena zerbitzaria kluster kanpotik.
Kubernetes-ek DNS izenak esleitzen dituen DNS sistema bat ere badu (adibidez, kaixozerbitzaria.lehenetsia.kluster.local) zerbitzuak. Horri esker, klusterreko podak klusterreko beste podekin komunikatzen dira helbide iraunkor batean. DNS izena ezin da erabili klusteretik kanpo, adibidez, Cloud Shell-en edo ordenagailu batean.
Kubernetes manifestuak
Aplikazioa iturburutik exekutatu duzunean, ezinbesteko komandoa erabili duzu python3
zerbitzaria.py
Inperatiboak aditz bat dakar: "egin hau".
Kubernetes-en erabilerak eredu deklaratiboa. Horrek esan nahi du ez diogula Kubernetesi zehazki zer egin behar duen esaten, nahi den egoera deskribatzen baizik. Adibidez, Kubernetes-ek lekak abiarazten eta gelditzen ditu behar den moduan, sistemaren benetako egoera nahi duzun egoerarekin bat datorrela ziurtatzeko.
Manifestuetan edo fitxategietan nahi duzun egoera adierazten duzu YAML. YAML fitxategi batek Kubernetes objektu baten edo gehiagoren zehaztapenak ditu.
Adibideak YAML fitxategi bat dauka zerbitzaria ΠΈ loadgen. YAML fitxategi bakoitzak inplementazio objektuaren eta Kubernetes zerbitzuaren nahi den egoera zehazten du.
metadatuak.izena inplementazioaren izena zehazten du.
Lehenengo eremua zehaztapenak nahi den egoeraren deskribapena dauka.
espez.erreplikak nahi den lek kopurua adierazten du.
atala zehaztapen.txantiloia pod txantiloia definitzen du. Pod zehaztapenean eremu bat dago irudia, edukiontzien erregistrotik atera behar den irudiaren izena zehazten duena.
LoadBalancer: Bezeroek eskaerak karga-orekatzeko IP helbidera bidaltzen dituzte, IP helbide iraunkorra duena eta kluster kanpotik eskura daitekeena.
targetPort: gogoratzen duzunez, taldea 8080 ERAKUSKERA Π² Dockerfile ez zuen porturik eman. Zuk ematen duzu portua 8080edukiontziarekin harremanetan jartzeko zerbitzaria multzotik kanpo. Gure kasuan hellosvc.default.cluster.local:80 (izen laburra: kaixovc) portuari dagokio 8080 Pod IP helbideak kaixo zerbitzaria.
portu: Klusterreko beste zerbitzu batzuek eskaerak bidaliko dituzten ataka-zenbakia da.
loadgen.yaml
Hedapen-objektua loadgen.yaml dirudi zerbitzari.yaml. Ezberdintasuna inplementazio-objektuak atal bat duela da env. Behar diren ingurune-aldagaiak definitzen ditu loadgen eta aplikazioa iturburutik exekutatzen duzunean instalatu duzuna.
Behin loadgen ez ditu sarrerako eskaerak onartzen, eremurako mota ezezaguna KlusterIP. Mota honek klusterreko zerbitzuek erabil dezaketen IP helbide iraunkor bat eskaintzen du, baina IP helbide hau ez dago kanpoko bezeroen aurrean.
Ordezkatu PROJECT_ID zure GCP proiektuaren IDra.
9) Gorde eta itxi loadgen.yaml, itxi testu-editorea.
10) Inplementatu YAML fitxategia Kubernetes-en:
kubectl apply -f loadgen.yaml
Arrakastaz amaitzean, komandoak kode hau sortzen du:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Egiaztatu poden egoera:
kubectl get pods
Komandoak egoera erakusten du:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Atera aplikazioen erregistroak podtik loadgen. Ordezkatu POD_ID aurreko erantzunaren identifikatzaileari.
kubectl logs loadgenerator-POD_ID
13) Lortu kanpoko IP helbideak kaixovc:
kubectl get service
Komandoaren erantzunak honelako itxura du:
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) Bidali eskaera hona kaixovc: ordezkatu KANPO_IP kanpoko IP helbidera kaixovc.
curl http://EXTERNAL_IP
Har dezagun Istio
Dagoeneko aplikazio bat duzu GKEn zabalduta. loadgen Kubernetes DNS erabil dezake (kaixovc:80) eskaerak bidaltzeko zerbitzariaeta eskaerak helbide honetara bidali ditzakezu zerbitzaria kanpoko IP helbidearen bidez. Kubernetes-ek ezaugarri asko dituen arren, zerbitzuei buruzko informazio batzuk falta dira:
Nola elkarreragiten dute zerbitzuak? Zeintzuk dira zerbitzuen arteko harremanak? Nola gertatzen da trafikoa zerbitzuen artean? Badakizu horretaz loadgen eskaerak bidaltzen ditu zerbitzaria, baina imajinatu aplikazioari buruz ezer ez dakizula. Galdera hauei erantzuteko, ikus diezaiogun GKE-n martxan dauden poden zerrenda.
Metrikak. Zenbat zerbitzaria jasotzen duen eskaera bati erantzuten dio? Zenbat eskaera jasotzen ditu segundoko zerbitzariak? Errore mezuak ematen al ditu?
Segurtasun informazioa. arteko trafikoa loadgen ΠΈ zerbitzaria besterik pasatzen da HTTP edo mTLS?
Istiok galdera horiei guztiei erantzuten die. Horretarako, Istiok sidecar proxy bat jartzen du Jesukristo leka bakoitzean. Envoy proxy-ak sarrerako eta irteerako trafiko guztia atzematen du aplikazio-edukiontzietara. Horrek esan nahi du zerbitzaria ΠΈ loadgen jaso sidecar proxy Envoy bidez, eta trafiko guztia loadgen ΠΊ zerbitzaria Envoy proxytik doa.
Envoy proxyen arteko konexioek zerbitzu sare bat osatzen dute. Zerbitzu-sarearen arkitekturak kontrol-geruza bat eskaintzen du Kubernetesen gainean.
Envoy proxyak bere edukiontzietan exekutatzen direnez, Istio GKE kluster baten gainean instala daiteke aplikazioaren kodean ia aldaketarik gabe. Baina lan batzuk egin dituzu zure aplikazioa Istio-k kudeatzeko prest izateko:
Edukiontzi guztientzako zerbitzuak. Inplementazioetara zerbitzaria ΠΈ loadgen Kubernetes zerbitzuari lotuta. Baita loadgen, sarrerako eskaerak jasotzen ez dituena, zerbitzu bat dago.
Zerbitzuetako portuek izenak izan behar dituzte. Zerbitzu-atak GKEn izenik gabe utz daitezkeen arren, Istio-k zehaztea eskatzen dizu atakaren izena bere protokoloaren arabera. YAML fitxategian for zerbitzaria izeneko httpzerbitzariak protokoloa erabiltzen duelako HTTP. Bada zerbitzua erabiltzen gRPC, portuari izena emango zenioke grpc.
Inplementazioak markatuta daude. Hori dela eta, Istio-ren trafikoa kudeatzeko eginbideak erabil ditzakezu, hala nola trafikoa zerbitzu beraren bertsioen artean banatzea.
Instalazioa
Istio instalatzeko bi modu daude. Ahal gaitu Istio GKE luzapenean edo instalatu Istio-ren kode irekiko bertsioa klusterrean. Istio GKE-n, Istio-ren instalazioak eta bertsio-berritzeak erraz kudea ditzakezu GKE klusterraren bizi-ziklo osoan. Istio-ren azken bertsioa edo Istio-ren kontrol-panelaren konfigurazioaren gaineko kontrol gehiago nahi baduzu, instalatu kode irekiko bertsioa Istio-n GKE luzapenaren ordez. Planteamendua erabakitzeko, irakurri artikulua Istio behar al dut GKEn?.
Hautatu aukera bat, berrikusi gida egokia eta jarraitu Istio zure klusterrean instalatzeko argibideak. Istio erabili nahi baduzu zabaldu berri duzun aplikazioarekin, gaitu sidecar ezarpena izen-espaziorako lehenetsi.
garbiketa
Tutorial honetan erabili dituzun baliabideengatik zure Google Cloud Platform kontuan kobratzea saihesteko, ezabatu edukiontzien multzoa Istio instalatu eta lagin-aplikazioarekin jolastu ondoren. Horrek kluster-baliabide guztiak kenduko ditu, hala nola konputazio-instantziak, diskoak eta sareko baliabideak.