
Istio është një mjet i lehtë për tu përdorur për lidhjen, mbrojtjen dhe monitorimin e aplikacioneve të shpërndara. Në Istio përdoren teknologji të ndryshme për ekzekutimin masiv të softuerit dhe menaxhimin e tij, duke përfshirë kontejnerë për paketimin e kodit të aplikacionit dhe varësive për shpërndarje dhe Kubernetes - për menaxhimin e këtyre kontejnerëve. Prandaj, për të punuar me Istio, duhet të dini si funksionon një aplikacion me shërbime të shumta të bazuara në këto teknologji. pa Istio. Nëse këto mjete dhe konceptet ju janë të njohura tashmë, kaloni pa frikë këtë udhëzues dhe kaloni direkt në seksionin. apo instalimi i zgjerimit .
Ky është një udhëzues hap pas hapi, ku do të shqyrtojmë gjithë procesin nga kodi burimor deri në kontejner në GKE, në mënyrë që të merrni një kuptim themelor të këtyre teknologjive përmes një shembulli. Gjithashtu do të shihni sesi Istio shfrytëzon mundësitë e këtyre teknologjive. Supozohet që nuk dini asgjë rreth kontejnerëve, Kubernetes, service mesh ose Istio.
Detyrat
Në këtë udhëzues do të kryeni detyrat e mëposhtme:
- Studimi i një aplikacioni të thjeshtë hello world me disa shërbime.
- Ekzekutimi i aplikacionit nga kodi burimor.
- Paketimi i aplikacionit në kontejnerë.
- Krijimi i një klasteri Kubernetes.
- Shpërndarja e kontejnerëve në klaster.
Para se të filloni
Pasoni udhëzimet për të aktivizuar API-në e Kubernetes Engine:
- Shkoni në në konsolën Google Cloud Platform.
- Krijoni ose zgjidhni një projekt.
- Prisni derisa API-ja dhe shërbimet përkatëse të aktivizohen. Kjo mund të marrë disa minuta.
- Sigurohuni që llogaria e Google Cloud Platform të ketë konfigurimin e faturimit. .
Në këtë udhëzues mund të përdorni Cloud Shell, i cili përgatit një makinë virtuale me Linux të bazuar në Debian, ose një kompjuter me Linux ose macOS.
Opcioni A: përdorimi i Cloud Shell
Përparësitë e përdorimit të Cloud Shell:
- Mjediset e zhvillimit Python 2 dhe Python 3 (duke përfshirë virtualenv) janë plotësisht të konfiguruara.
- Mjetet e komandës gcloud, docker, git dhe kubectl, të cilat do të përdorim, janë tashmë të instaluara.
- Keni disa :
- , që hapet me ikonën e redaktimit në pjesën e sipërme të dritares së Cloud Shell.
- Emacs, Vim ose Nano, që hapen nga linja e komandës në Cloud Shell.
Për të përdorur :
- Shkoni në konsolën GCP.
- Klikoni butonin Aktivizoni Cloud Shell (Aktivizoni Cloud Shell) në pjesën e sipërme të dritares së konsolës GCP.
![]()
Në fund të në një dritare të re do të hapet një seancë Cloud Shell me komandën.

Mënyra B: përdorimi i mjeteve të komandës lokalish
Nëse do të punoni në një kompjuter me Linux ose macOS, duhet të konfiguroni dhe instaloni komponentët e mëposhtëm:
Konfiguroni .
me mjetin e komandës gcloud.
Instaloni kubectl â mjeti i komandĂ«s pĂ«r tĂ« punuar me .
gcloud components install kubectlInstaloni . Do ta përdorni mjetin e komandës docker, për të krijuar imazhe kontejnerësh për shembullin e aplikacionit.
Instaloni mjetin , për të marrë shembullin e aplikacionit nga GitHub.
Shkarkimi i shembullit të kodit
Shkarkoni kodin burimor helloserver:
git clone https://github.com/GoogleCloudPlatform/istio-samplesKalo në katalogun e shembullit të kodit:
cd istio-samples/sample-apps/helloserver
Studimi i aplikacionit me shumë shërbime
Shembulli i aplikacionit është shkruar në Python dhe përbëhet nga dy komponente që bashkëveprojnë përmes :
- server: një server i thjeshtë me një pikë përfundimtare GET, /, i cili shfaq "hello world" në konsolë.
- loadgen: një skenar që dërgon trafik në server, me një numër të konfigurueshëm kërkesash në sekondë.

Ekzekutimi i aplikacionit nga kodi burimor
Për të studiuar shembullin e aplikacionit, ekzekutoni atë në Cloud Shell ose në kompjuterin tuaj.
1) NĂ« katalogun istio-samples/sample-apps/helloserver ekzekutoni server:
python3 server/server.pyKur aktivizohet server shfaqet si më poshtë:
INFO:root:Fillimi i serverit...2) Hapni një dritare tjetër terminali për të dërguar kërkesa në server. Nëse po përdorni Cloud Shell, klikoni ikonën e shtimit për të hapur një seancë tjetër.
3) Dërgoni një kërkesë në server:
curl http://localhost:8080serveri përgjigjet:
Hello World!4) Nga katalogu ku shkarkuat shembujt e kodit, kaloni në katalogun që përmban loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen5) Krijoni variablat e mëposhtëm të mjedisit:
export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=56) Ekzekutoni virtualenv:
virtualenv --python python3 env7) Aktivizoni mjedisin virtual:
source env/bin/activate8) Instaloni kërkesat për loadgen:
pip3 install -r requirements.txt9) Ekzekutoni loadgen:
python3 loadgen.pyKur aktivizohet loadgen shfaq të paktën këtë mesazh:
Duke filluar loadgen: 2019-05-20 10:44:12.448415
5 kërkesë(ve) të përfunduara në http://localhost:8080Në një dritare tjetër terminali server shfaqin në konsolë përafërsisht këto mesazhe:
127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:Kërkesa GET,
Rruga: /
Kreu:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*Nga pikëpamja e rrjetit, e gjithë aplikacioni funksionon në një host të vetëm (në kompjuterin lokal ose në makinën virtuale Cloud Shell). Prandaj, mund të përdorni localhost, për të dërguar kërkesa në server.
10) Për të ndaluar loadgen dhe server, shkruani Ctrl-c në çdo dritare terminali.
11) Në dritaren terminali loadgen çaktivizoni ambientin virtual:
deactivatePaketa e aplikacionit në kontejnerë
PĂ«r tĂ« drejtuar aplikacionin nĂ« GKE, duhet tĂ« paketoni shembullin e aplikacionit â server dhe loadgen â nĂ« . Kontejneri Ă«shtĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« paketuar aplikacionin, qĂ« ta izolojĂ« atĂ« nga mjedisi.
PĂ«r tĂ« paketuar aplikacionin nĂ« njĂ« kontejner, nevojitet njĂ« Dockerfile. Dockerfile â Ă«shtĂ« njĂ« skedar tekstual qĂ« pĂ«rcakton komandat pĂ«r ndĂ«rtimin e kodit burimor tĂ« aplikacionit dhe varĂ«sive tĂ« tij nĂ« Pasi tĂ« pĂ«rfundojĂ« ndĂ«rtimi, ngarkoni imazhin nĂ« regjistrin e kontejnerĂ«ve, p.sh., Docker Hub ose .
Shembulli tashmĂ« pĂ«rmban Dockerfile pĂ«r server dhe loadgen me tĂ« gjitha komandat e nevojshme pĂ«r tĂ« ndĂ«rtuar imazhet. MĂ« poshtĂ« â Dockerfile pĂ«r 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/*
# Aktivizoni regjistrimin pa buffer
FROM base as final
ENV PYTHONUNBUFFERED=1
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
wget
WORKDIR /helloserver
# Marrja e pakove nga ndihmës
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/
# Shtoni aplikacionin
COPY . .
EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]- Ekipa FROM python:3-slim as base i lejon Docker të përdorë imazhin më të fundit si bazë.
- Ekipa COPY . . kopjon skedhat burimore në katalogun aktual të punës (në rastin tonë vetëm server.py) në sistemin e skedarit të kontejnerit.
- ENTRYPOINT përcakton komandën që përdoret për të nisur kontejnerin. Në rastin tonë, kjo komandë është pothuajse identike me atë që përdorët për të nisur server.py nga kodi burimor.
- Ekipa EXPOSE tregon se server pret tĂ« dhĂ«na pĂ«rmes portit 8080. Kjo komandĂ« nuk . ĂshtĂ« diçka si dokumentimi qĂ« Ă«shtĂ« e nevojshme pĂ«r tĂ« hapur portin 8080 kur nisni kontejnerin.
Përgatitja për kontejnerizimin e aplikacionit
1) Caktoni këto variabla mjedisi. Zëvendësoni PROJECT_ID me identifikuesin e projektit tuaj GCP.
export PROJECT_ID="PROJECT_ID"export GCR_REPO="preparing-istio"Nëpërmjet vlerave PROJECT_ID dhe GCR_REPO ju etiketoni imazhin Docker kur e ndërtoni dhe e dërgoni në një Container Registry privat.
2) Caktoni projektin GCP si të paracaktuar për mjetin e komandave gcloud.
gcloud config set project $PROJECT_ID3) Caktoni zonën si të paracaktuar për mjetin e komandave gcloud.
gcloud config set compute/zone us-central1-b4) Sigurohuni që shërbimi i Container Registry është aktivizuar për projektin GCP.
gcloud services enable containerregistry.googleapis.comKontejnerizimi i serverit
Shkoni në katalogun ku ndodhet shembulli server:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/Ndërtoni imazhin duke përdorur Dockerfile dhe variablat e mjedisit që keni përcaktuar më parë:
docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .
Parametri -t përfaqëson etiketën e Docker. Ky është emri i imazhit që përdorni kur shpërndani kontejnerin.
- Dërgoni imazhin në Container Registry:
docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1
Kontejnerizimi i loadgen
1) Shkoni në katalogun ku ndodhet shembulli loadgen:
cd ../loadgen2) Ndërtoni imazhin:
docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .3) Dërgoni imazhin në Container Registry:
docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1Shikoni listën e imazheve
Shihni listën e imazheve në depo dhe sigurohuni që imazhet janë dërguar:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istioKomanda jep emrat e imazheve që sapo janë dërguar:
EMRI
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgenKrijimi i klasterit GKE.
Këto kontejnerë mund të ekzekutohen në një makinë virtuale Cloud Shell ose në kompjuterin me komandën docker run. Por në një mjedis prodhimi nevojitet një mënyrë për të orkestruar kontejnerët në mënyrë qendrore. Për shembull, nevojitet një sistem që siguron që kontejnerët të funksionojnë gjithmonë dhe një mënyrë për të rritur kapacitetin dhe nisur kopje shtesë të kontejnerëve nëse rritet trafiku.
PĂ«r tĂ« ekzekutuar aplikacione kontejneri, mund tĂ« pĂ«rdorni . GKE Ă«shtĂ« njĂ« platformĂ« pĂ«r orkestrimin e kontejnerĂ«ve qĂ« bashkon makina virtuale nĂ« njĂ« klaster. Ădo makinĂ« virtuale quhet nyje. Klasteret GKE bazohen nĂ« sistemin e menaxhimit tĂ« klasterĂ«ve me burim tĂ« hapur Kubernetes. Kubernetes ofron mekanizma pĂ«r tĂ« komunikuar me klasterin.
Krijimi i klasterit GKE:
1) Krijoni një klaster:
gcloud container clusters create istioready
--cluster-version latest
--machine-type=n1-standard-2
--num-nodes 4Ekipa gcloud krijon klasterin istioready në projektin GCP dhe zonën e paracaktuar që keni caktuar. Për të nisur Istio, rekomandohet të keni të paktën 4 nyje dhe një makinë virtuale. .
Komanda krijon klasterin për disa minuta. Kur klasteri të jetë gati, komanda jep një zakonshëm .
2) Jepni kredencialet në instrumentin e komandës , për ta menaxhuar klasterin:
gcloud container clusters get-credentials istioready3) Tani mund të komunikoni me Kubernetes përmes kubectl. Për shembull, me komandën e mëposhtme mund të kontrolloni statusin e nyjeve:
kubectl get nodesKomanda jep një listë nyjesh:
EMRI STATUS ROLES MOSHA VERSI
gke-istoready-default-pool-dbeb23dc-1vg0 Gatshëm <asnjë> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5 Gatshëm <asnjë> 100s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s Gatshëm <asnjë> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw Gatshëm <asnjë> 99s v1.13.6-gke.13Koncepte Kryesore të Kubernetes
Në diagram tregohet aplikacioni në GKE:

Para se të deploy-oni kontejnerët në GKE, studioni konceptet kryesore të Kubernetes. Në fund ka lidhje, nëse dëshironi të mësoni më shumë.
- Nodet dhe klasteret. Në GKE një nod është një makinë virtuale. Në platforma të tjera Kubernetes, një nod mund të jetë një kompjuter ose një makinë virtuale. Një klaster është një grup nodesh që mund të konsiderohet si një tërë dhe ku ju deploy-oni aplikacionin e kontenjerizuar.
- PodâĂ«. NĂ« Kubernetes, kontejnerĂ«t ekzekutohen nĂ« podâĂ«. NjĂ« pod nĂ« Kubernetes Ă«shtĂ« njĂ« njĂ«si e pandashme. Pod pĂ«rmban njĂ« ose mĂ« shumĂ« kontejnerĂ«. Ju deploy-oni kontejnerĂ«t server dhe loadgen nĂ« podâĂ« tĂ« veçanta. Kur nĂ« njĂ« pod ka disa kontejnerĂ« (pĂ«r shembull, serveri i aplikacionit dhe ), kontejnerĂ«t menaxhohen si njĂ« objekt i vetĂ«m dhe ndajnĂ« burimet e podâit.
- Deploy-imet. NĂ« Kubernetes, njĂ« deploy-im Ă«shtĂ« njĂ« objekt qĂ« pĂ«rfaqĂ«son njĂ« grup podâesh identike. Deploy-im mundĂ«son disa replika tĂ« podâĂ«ve, tĂ« shpĂ«rndara mbi nodet e klasterit. Deploy-imi zĂ«vendĂ«son automatikisht podâĂ«t qĂ« dĂ«shtojnĂ« ose nuk pĂ«rgjigjen.
- ShĂ«rbimi Kubernetes. Kur ekzekutoni kodin e aplikacionit nĂ« GKE, ndryshon lidhja midis loadgen dhe server. Kur keni ekzekutuar shĂ«rbimet nĂ« makinĂ« virtuale Cloud Shell ose nĂ« kompjuter, keni dĂ«rguar kĂ«rkesa nĂ« server nĂ« adresĂ«n localhost:8080. Pas deploy-imit nĂ« GKE, podâĂ«t ekzekutohen nĂ« nodet e disponueshme. NĂ« mĂ«nyrĂ« tĂ« parazgjedhur, nuk keni ndonjĂ« kontroll mbi atĂ« se nĂ« cilin nod po ekzekutohet pod-i, kĂ«shtu qĂ« nuk ka adresa IP tĂ« qĂ«ndrueshme.
PĂ«r tĂ« marrĂ« njĂ« adresĂ« IP pĂ«r server, duhet tĂ« pĂ«rcaktoni njĂ« abstraksion rrjeti mbi podâĂ«t. Ky Ă«shtĂ« . ShĂ«rbimi Kubernetes ofron njĂ« pikĂ« pĂ«rfundimtare tĂ« qĂ«ndrueshme pĂ«r njĂ« grup podâesh. Ka disa . server pĂ«rdor LoadBalancer, qĂ« ofrojnĂ« njĂ« adresĂ« IP tĂ« jashtme, pĂ«r tâu lidhur me server nga jashtĂ« klasterit.
PĂ«rsĂ«ri, nĂ« Kubernetes ka njĂ« sistem tĂ« ndĂ«rtuar DNS, i cili pĂ«rcakton emrat DNS (pĂ«r shembull, helloserver.default.cluster.local) shĂ«rbimeve. FalĂ« kĂ«saj, podâĂ«t brenda grumbullit lidhĂ«n me podâĂ«t e tjerĂ« nĂ« grumbull me njĂ« adresĂ« tĂ« qĂ«ndrueshme. Emri DNS nuk mund tĂ« pĂ«rdoret jashtĂ« grumbullit, pĂ«r shembull nĂ« Cloud Shell ose nĂ« kompjuterin tuaj.
Manifestet e Kubernetes
Kur keni nisur aplikacionin nga kodi burimor, keni përdorur komandën imperativ python3
server.py
Imperativiteti nënkupton një folje: «bëj këtë».
Kubernetes pĂ«rdor . Kjo do tĂ« thotĂ« se ne nuk i themi Kubernetes se çfarĂ« tĂ« bĂ«jĂ«, por pĂ«rshkruajmĂ« gjendjen e dĂ«shiruar. PĂ«r shembull, Kubernetes nis dhe ndalon podâĂ«t sipas nevojĂ«s qĂ« gjendja reale e sistemit tĂ« pĂ«rputhet me atĂ« tĂ« dĂ«shiruar.
Gjetja e dëshiruar e shtohet në manifestet, ose skedarët . Skedari YAML përmban specifikimet për një ose më shumë objekte Kubernetes.
NĂ« shembullin ka skedarin YAML pĂ«r server dhe loadgen. Ădo skedar YAML pĂ«rcakton gjendjen e dĂ«shiruar tĂ« objektit tĂ« pĂ«rhapjes dhe shĂ«rbimit tĂ« Kubernetes.
server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloserver
spec:
selector:
matchLabels:
app: helloserver
replicas: 1
template:
metadata:
labels:
app: helloserver
spec:
terminationGracePeriodSeconds: 5
restartPolicy: Always
containers:
- name: main
image: gcr.io/google-samples/istio/helloserver:v0.0.1
imagePullPolicy: Always- kind përcakton llojin e objektit.
- . Kjo sepse emri i podit përcaktohet në fushën fëminë name të fushës përcakton emrin e përhapjes.
- Fusha e parë spec përmban përshkrimin e gjendjes së dëshiruar.
- spec.replicas pĂ«rcakton numrin e dĂ«shiruar tĂ« podâĂ«ve.
- Seksioni spec.template pĂ«rcakton modelin e podâĂ«ve. NĂ« specifikimin e podâĂ«ve ka njĂ« fushĂ« image, ku pĂ«rcaktohet emri i imazhit qĂ« duhet tĂ« tĂ«rhiqet nga Container Registry.
Shërbimi përcaktohet si vijon:
apiVersion: v1
kind: Service
metadata:
name: hellosvc
spec:
type: LoadBalancer
selector:
app: helloserver
ports:
- name: http
port: 80
targetPort: 8080- LoadBalancer: klientët dërgojnë kërkesa në adresën IP të balancuesit të ngarkesës, i cili ka një adresë IP të qëndrueshme dhe është i aksesueshëm nga jashtë grumbullit.
- targetPort: siç e mbani mend, komanda EXPOSE 8080 nĂ« Dockerfile nuk ka ofruar porta. Ju jepni portin 8080, pĂ«r tĂ« mundĂ«suar lidhjen me kontejnerin server nga jashtĂ« grumbullit. NĂ« rastin tonĂ« hellosvc.default.cluster.local:80 (emri i shkurtĂ«r: hellosvc) pĂ«rkon me portin 8080 Adresa IP e podâit helloserver.
- port: ky është numri i portit, në të cilin shërbimet e tjera në grumbull do të dërgojnë kërkesa.
loadgen.yaml
Objekti i përhapjes në loadgen.yaml është i ngjashëm me server.yaml. Diferenca është se objekti i përhapjes përmban seksionin env. Ai përcakton variablat e mjedisit që nevojiten loadgen dhe që keni vendosur gjatë nisjes së aplikacionit nga kodi burimor.
apiVersion: apps/v1
kind: Deployment
metadata:
name: loadgenerator
spec:
selector:
matchLabels:
app: loadgenerator
replicas: 1
template:
metadata:
labels:
app: loadgenerator
spec:
terminationGracePeriodSeconds: 5
restartPolicy: Always
containers:
- name: main
image: gcr.io/google-samples/istio/loadgen:v0.0.1
imagePullPolicy: Always
env:
- name: SERVER_ADDR
value: "http://hellosvc:80/"
- name: REQUESTS_PER_SECOND
value: "10"
resources:
requests:
cpu: 300m
memory: 256Mi
limits:
cpu: 500m
memory: 512MiNjë loadgen nuk po pranon kërkesa hyrëse, për fushën lloji e specifikuar ClusterIP. Ky tip ofron një adresë IP të përhershme, e cila mund të përdoret nga shërbimet në klaster, por kjo adresë IP nuk u ofrohet klientëve të jashtëm.
apiVersion: v1
kind: Service
metadata:
name: loadgensvc
spec:
type: ClusterIP
selector:
app: loadgenerator
ports:
- name: http
port: 80
targetPort: 8080Zhvillimi i kontejnerëve në GKE
1) Shkoni në katalogun ku ndodhet shembulli server:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/2) Hapni server.yaml në një redaktues teksti.
3) Zëvendësoni emrin në fushën image me emrin e imazhit tuaj Docker.
image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1Zëvendësoni PROJECT_ID me identifikuesin e projektit tuaj GCP.
4) Ruajeni dhe mbylleni server.yaml.
5) Zhvilloni skedarin YAML në Kubernetes:
kubectl apply -f server.yamlPas përfundimit të suksesshëm, komandaja jep kodin e mëposhtëm:
deployment.apps/helloserver created
service/hellosvc created6) Shkoni në katalogun ku ndodhet loadgen:
cd ../loadgen7) Hapni loadgen.yaml në një redaktues teksti.
8) Zëvendësoni emrin në fushën image me emrin e imazhit tuaj Docker.
image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1Zëvendësoni PROJECT_ID me identifikuesin e projektit tuaj GCP.
9) Ruajeni dhe mbylleni loadgen.yaml, mbyllni redaktuesin e tekstit.
10) Zhvilloni skedarin YAML në Kubernetes:
kubectl apply -f loadgen.yamlPas përfundimit të suksesshëm, komandaja jep kodin e mëposhtëm:
deployment.apps/loadgenerator created
service/loadgensvc created11) Kontrolloni statusin e pod-ëve:
kubectl get podsKomanda tregon statusin:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s12) Nxirrni logët e aplikacionit nga pod-i loadgen. Zëvendësoni POD_ID me identifikuesin nga përgjigja e mëparshme.
kubectl logs loadgenerator-POD_ID13) Merrni adresat IP të jashtme hellosvc:
kubectl get servicePërgjigjja e komandës duket më pak si kjo:
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 443/TCP 93m
loadgensvc ClusterIP 10.81.15.155 80/TCP 4m52s14) Dërgoni një kërkesë në hellosvc: zëvendësoni EXTERNAL_IP me adresën IP të jashtme hellosvc.
curl http://EXTERNAL_IPPo merremi me Istio
Keni tashmë një aplikacion të implementuar në GKE. loadgen mund të përdorë DNS-in e Kubernetes (hellosvc:80), për të dërguar kërkesa në server, dhe mund të dërgoni kërkesa në server me adresën IP të jashtme. Edhe pse Kubernetes ka shumë mundësi, duket se disa informacione për shëndetësinë e shërbimeve mungojnë:
- Si ndërveprojnë shërbimet? Cilat janë marrëdhëniet midis shërbimeve? Si kalon trafik midis shërbimeve? A jeni në dijeni se loadgen dërgon kërkesa te server, por imagjinoni se nuk dini asgjë për aplikacionin. Për t'u përgjigjur këtyre pyetjeve, shikoni listën e pod-ve të aktivizuara në GKE.
- Metrikat. Sa gjatë server përgjigjet në një kërkesë të ardhshme? Sa kërkesa në sekondë marrin në server? A jep mesazhe gabimi?
- Informacione për sigurinë. Trafiku midis loadgen dhe server kalon thjesht përmes HTTP apo përmes ?
Të gjitha këto pyetje përgjigjet Istio. Për këtë, Istio vendos një proxy sidecar në çdo pod. Proxy Envoy kap të gjithë trafik të ardhshëm dhe të dalë për kontejnerët e aplikacionit. Kjo do të thotë se server dhe loadgen marrin përmes proxy-sidecar Envoy, dhe tërë trafiku nga loadgen në server kalon përmes proxy Envoy.
Lidhjet midis proxy-ve Envoy formojnë mesh shërbimesh. Arkitektura e mesh-it të shërbimit ofron një nivel kontrolli mbi Kubernetes.

Pasi proxy Envoy funksionojnë në kontejnerët e tyre, Istio mund të instalohet mbi grupin e GKE, duke ndryshuar pothuajse asnjë kod aplikacioni. Por ju keni bërë disa punë për të përgatitur aplikacionin për menaxhim me Istio:
- ShĂ«rbimet pĂ«r tĂ« gjithĂ« kontejnerĂ«t. Ădo grupim server dhe loadgen ka njĂ« shĂ«rbim Kubernetes tĂ« lidhur. Edhe ai loadgen, i cili nuk merr kĂ«rkesa tĂ« ardhshme, ka njĂ« shĂ«rbim.
- Portet në shërbime duhet të kenë emra. Edhe pse në GKE portet e shërbimeve mund të lihen pa emër, Istio kërkon që të specifikohet përkatësisht sipas protokollit të tij. Në skedarin YAML, porta për server quhet http, sepse serveri përdor protokollin HTTP. Nëse shërbim do të përdorte gRPC, do ta quani portën grpc..
- Grupimet janë të etiketuar. Prandaj ju mund të përdorni funksionet e menaxhimit të trafikëve të Istio, për shembull, për të ndarë trafikun midis versioneve të një shërbimi.
Instalimi i Istio
Istio mund të instalohet në dy mënyra. Mund të ose në grup. Me Istio on GKE, është e lehtë të menaxhosh instalimin dhe përmirësimin e Istio në ciklin e jetës së grupit GKE. Nëse ju nevojitet versioni më i ri i Istio ose më shumë kontroll mbi konfigurimin e panelit të kontrollit të Istio, instalo versionin open-source në vend të zgjerimit Istio on GKE. Për të vendosur për qasjen, lexoni artikullin .
Zgjidhni opsionin, shqyrtoni udhëzuesin përkatës dhe ndiqni udhëzimet për të instaluar Istio në grup. Nëse dëshironi të përdorni Istio me aplikacionin e sapo-grupuar, për hapësirën e emrave default.
Pastrimi
Për të shmangur pagesat për burimet që keni përdorur në këtë udhëzues nga llogaria e Google Cloud Platform, fshini klastrin e kontejnerëve pasi të keni instaluar Istio dhe të keni luajtur me shembullin e aplikacionit. Kështu do të fshihen të gjitha burimet e klastri, siç janë instancat e llogaritjes, disqet dhe burimet rrjet.
ĂfarĂ« ndodh mĂ« tej?
Shkoni përmes teknologjive të mëposhtme:
Shkoni përmes mjeteve të mëposhtme:
Shkoni përmes koncepteve të Kubernetes:
Burimi: habr.com
