He mea hana maʻalahi ʻo Istio no ka hoʻopili ʻana, hoʻopaʻa ʻana a me ka nānā ʻana i nā noi i hāʻawi ʻia. Hoʻohana ʻo Istio i nā ʻenehana like ʻole e holo a hoʻokele i nā polokalamu ma ke ʻano nui, me nā ipu e hoʻopili ai i nā code noi a me nā hilinaʻi no ka hoʻolaha ʻana, a me nā Kubernetes e hoʻokele i kēlā mau ipu. No laila, e hana pū me Istio pono ʻoe e ʻike pehea e hana ai kahi noi me nā lawelawe lehulehu e pili ana i kēia mau ʻenehana me kaʻole Istio. Inā ʻike mua ʻoe i kēia mau mea hana a me nā manaʻo, e ʻoluʻolu e lele i kēia kumu aʻo a hele pololei i ka ʻāpana Ke hoʻokomo ʻana iā Istio ma Google Kubernetes Engine (GKE) a i ʻole ke kau ʻana i kahi hoʻonui Istio ma GKE.
He alakaʻi kēia i kēlā me kēia ʻanuʻu kahi e hele ai mākou i ke kaʻina holoʻokoʻa mai ka code kumu a i ka pahu GKE i loaʻa iā ʻoe ka ʻike kumu o kēia mau ʻenehana me kahi laʻana. E ʻike ʻoe pehea e hoʻohana ai ʻo Istio i ka mana o kēia mau ʻenehana. Manaʻo kēia ʻaʻole ʻoe ʻike i kekahi mea e pili ana i nā ipu, nā Kubernetes, nā meshes lawelawe, a i ʻole Istio.
hana
Ma kēia kumu aʻo, e hoʻopau ʻoe i kēia mau hana:
Ke aʻo nei i kahi noi honua hello maʻalahi me nā lawelawe he nui.
Holo i ka palapala noi mai ka code kumu.
Hoʻopili i ka noi i loko o nā pahu.
Ke hana ʻana i kahi pūʻulu Kubernetes.
Ka hoʻolele ʻana i nā ipu i loko o kahi hui.
Ma mua o kou hoʻomaka
E hahai i nā kuhikuhi e hiki ai ke Kubernetes Engine API:
Ma kēia kumu aʻo, hiki iā ʻoe ke hoʻohana iā Cloud Shell, nāna e hoʻomākaukau i ka mīkini virtual g1-liʻiliʻi ma Google Compute Engine me Linux e pili ana iā Debian, a i ʻole he kamepiula Linux a macOS paha.
Koho A: Ke hoʻohana nei i Cloud Shell
Nā pōmaikaʻi o ka hoʻohana ʻana i Cloud Shell:
ʻO Python 2 a me Python 3 nā kaiapuni hoʻomohala (me virtualenv) ua hoʻonohonoho piha ʻia.
Mea Hana Laina Kauoha gcloud, ka loea, hele и kubectl, a mākou e hoʻohana ai ua hoʻokomo ʻia.
Ua kākau ʻia ka palapala noi ma Python a loaʻa i ʻelua mau ʻāpana e launa pū me ka hoʻohana ʻana koena:
kikowaena: kikowaena maʻalahi me hoʻokahi hopena LOA, /, e paʻi ana i ka "hello world" i ka console.
loadgen: palapala e hoʻouna i ke kaʻa i kikowaena, me ka helu o nā noi i kēlā me kēia kekona.
Ke holo nei i kahi noi mai ke code kumu
No ka ʻimi ʻana i ka laʻana palapala noi, holo ia ma Cloud Shell a i ʻole ma kāu kamepiula.
1) Ma ka papa helu istio-samples/sample-apps/helloserver holo kikowaena:
python3 server/server.py
Hoʻomaka kikowaena ua hōʻike ʻia kēia mau mea:
INFO:root:Starting server...
2) E wehe i kekahi puka aniani hope e hoʻouna i nā noi kikowaena. Inā ʻoe e hoʻohana ana iā Cloud Shell, kaomi i ka ikona hoʻohui e wehe i kahi kau hou.
3) E hoʻouna i kahi noi iā kikowaena:
curl http://localhost:8080
pane ke kikowaena:
Hello World!
4) Mai ka papa kuhikuhi kahi āu i hoʻoiho ai i ka code sample, e hele i ka papa kuhikuhi i loaʻa loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Mai kahi hiʻohiʻona pūnaewele, holo ka noi holoʻokoʻa ma kahi hoʻokipa hoʻokahi (kamepiula kūloko a i ʻole Cloud Shell virtual machine). No laila hiki iā ʻoe ke hoʻohana localhoste hoʻouna i nā noi i kikowaena.
10) E hooki loadgen и kikowaena, komo Ctrl-c i kēlā me kēia puka makani hoʻopau.
11) Ma ka puka aniani loadgen hoʻopau i ke kaiapuni virtual:
deactivate
Hoʻopili i kahi noi i loko o nā pahu
No ka holo ʻana i ka palapala noi ma GKE, pono ʻoe e hoʻopili i ka palapala hoʻohālike − kikowaena и loadgen - ma mau pahu hopu. ʻO kahi pahu kahi ala e hoʻopili ai i kahi noi e hoʻokaʻawale iā ia mai kona kaiapuni.
No ka hoʻopili ʻana i kahi noi i loko o kahi pahu, pono ʻoe dockerfile. dockerfile he waihona kikokikona e wehewehe ana i nā kauoha no ke kūkulu ʻana i ka code kumu o ka noi a me kona mau hilinaʻi i loko Kiʻi Docker. Ke kūkulu ʻia, hoʻouka ʻoe i ke kiʻi i kahi waihona waihona e like me Docker Hub a i ʻole Kakau Kopa.
Ua loaʻa i ka laʻana dockerfile no ka mea, kikowaena и loadgen me nā kauoha pono a pau e hōʻiliʻili i nā kiʻi. Ma lalo - dockerfile no ka mea, kikowaena:
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" ]
hui MAI python:3-slim ma ke kumu haʻi iā Docker e hoʻohana i ka mea hou loa Kiʻi Python 3 ma ke ano he kumu.
hui KOPE. . kope i nā faila kumu i ka papa kuhikuhi hana o kēia manawa (i kā mākou hihia wale nō server.py) i ka waihona waihona o ka ipu.
KUMU KOMO wehewehe i ke kauoha i hoʻohana ʻia e hoʻomaka i ka ipu. I kā mākou hihia, ʻaneʻane like kēia kauoha me ka mea āu i holo ai server.py mai ke code kumu.
hui OLELO HOAKAKA hōʻike i kēlā kikowaena kali no ka ʻikepili ma o ke awa 8080. ʻAʻole kēia hui hāʻawi i nā awa. ʻO kēia kekahi ʻano palapala e pono ai e wehe i ke awa 8080 ke hoʻomaka i ka ipu.
Ke hoʻomākaukau nei e hoʻopaʻa i kāu noi
1) E hoʻonoho i nā mea hoʻololi kaiapuni. Hoʻololi PROJECT_ID i kāu ID pāhana GCP.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Ke hoʻohana nei i nā waiwai PROJECT_ID и GCR_REPO kau ʻoe i ke kiʻi Docker i ka wā e kūkulu ai ʻoe a hoʻolei iā ia i kahi Registry Container.
2) E hoʻonoho i ka papahana GCP paʻamau no ka mea hana laina kauoha gcloud.
gcloud config set project $PROJECT_ID
3) E hoʻonoho i ka ʻāpana paʻamau no ka mea hana laina kauoha gcloud.
gcloud config set compute/zone us-central1-b
4) E hōʻoia i ka hiki ʻana o ka lawelawe Container Registry ma ka papahana GCP.
E nānā i ka papa inoa o nā kiʻi i loko o ka waihona a hōʻoia ua hoʻouka ʻia nā kiʻi:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Hōʻike ke kauoha i nā inoa o nā kiʻi i hoʻouka hou ʻia:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Ke hana ʻana i kahi pūʻulu GKE.
Hiki ke holo ʻia kēia mau pahu ma kahi mīkini virtual Cloud Shell a i ʻole ma ke kamepiula me ke kauoha holo ka hana. Akā i loko o kahi ʻenehana hana, pono ʻoe i kahi ala e hoʻokaʻawale i nā ipu. No ka laʻana, pono ʻoe i kahi ʻōnaehana e hōʻoia i ka holo mau ʻana o nā ipu, a pono ʻoe i kahi ala e hoʻonui ai a wili i nā manawa pahu hou inā piʻi ke kaʻa.
No ka holo ʻana i nā noi containerized hiki iā ʻoe ke hoʻohana ʻO G.K.E.. ʻO GKE kahi paepae hoʻoheheʻe ipu e hōʻuluʻulu i nā mīkini virtual i loko o kahi pūʻulu. Kapa ʻia kēlā me kēia mīkini virtual he node. Hoʻokumu ʻia nā pūʻulu GKE ma ka ʻōnaehana hoʻokele kumu ʻo Kubernetes cluster. Hāʻawi ʻo Kubernetes i nā mīkini no ka launa pū ʻana me ka pūʻulu.
hui gcloud hana i kahi pūʻulu istioready ma ka papahana GCP a me ka ʻāpana paʻamau āu i kuhikuhi ai. No ka holo ʻana iā Istio, paipai mākou i ka loaʻa ʻana o 4 nodes a me kahi mīkini virtual n1-maʻamau-2.
Hoʻokumu ka hui i ka hui i loko o kekahi mau minuke. Ke mākaukau ka pūʻulu, hoʻopuka ke kauoha i kekahi mea e like me kēia ka leka.
2) Hāʻawi i nā hōʻoia i ka mea hana laina kauoha kubectle hoʻohana iā ia e mālama i ka pūʻulu:
3) I kēia manawa hiki iā ʻoe ke kamaʻilio me Kubernetes ma o kubectl. No ka laʻana, hiki i kēia kauoha ke ʻike i ke kūlana o nā nodes:
kubectl get nodes
Hoʻopuka ke kauoha i kahi papa inoa o nā nodes:
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
Nā Manaʻo Koʻikoʻi Kubernetes
Hōʻike ke kiʻikuhi i kahi noi ma GKE:
Ma mua o kou kau ʻana i nā ipu ma GKE, e aʻo i nā manaʻo nui o Kubernetes. Aia nā loulou ma ka hope loa inā makemake ʻoe e aʻo hou aku.
Nodes a me nā pūʻulu. I loko o GKE, ʻo kahi node he mīkini makamae. Ma nā kahua ʻē aʻe o Kubernetes, hiki i kahi node ke lilo i kamepiula a i ʻole mīkini uila. ʻO ka puʻupuʻu he hōʻiliʻili o nā nodes i hiki ke noʻonoʻo ʻia he ʻāpana hoʻokahi kahi āu e kau ai i kahi noi pahu.
Pods. Ma Kubernetes, holo nā ipu i loko o nā pahu. ʻO kahi Pod ma Kubernetes kahi ʻāpana ʻokoʻa. Paʻa ka Pod i hoʻokahi pahu a ʻoi aku paha. Hoʻolaha ʻoe i nā ipu kikowaena a loadgen ma nā ʻāpana ʻokoʻa. Ke nui nā pahu i loko o kahi pod (no ka laʻana, kahi kikowaena noi a kikowaena kikowaena), mālama ʻia nā ipu ma ke ʻano he hui hoʻokahi a kaʻana like i nā kumuwaiwai pod.
Nā hoʻolālā. Ma Kubernetes, ʻo kahi hoʻolaha kahi mea i hōʻiliʻili i nā pods like. Hoʻopuka ʻo Deployment i nā kope he nui o nā pods i puʻunaue ʻia ma nā node cluster. Hoʻololi ʻo Deployment i nā pods i hāʻule a pane ʻole paha.
lawelawe Kubernetes. Ke holo nei ka palapala noi ma GKE, ka pilina ma waena loadgen и kikowaena. I kou hoʻomaka ʻana i nā lawelawe ma kahi mīkini virtual Cloud Shell a i ʻole desktop, ua hoʻouna ʻoe i nā noi iā kikowaena ma localhost: 8080. Ke kau ʻia i GKE, hoʻokō ʻia nā pods ma nā nodes i loaʻa. Ma ka paʻamau, ʻaʻohe ou mana ma luna o ka node e holo ana ka pod, pēlā ʻoe nā ʻōpala ʻaʻohe helu IP mau.
No ka loaʻa ʻana o kahi helu IP no kikowaena, pono ʻoe e wehewehe i kahi abstraction pūnaewele ma luna o nā pods. ʻO ia ka mea lawelawe Kubernetes. Hāʻawi ka lawelawe Kubernetes i kahi hopena hoʻomau no kahi hoʻonohonoho o nā pods. He kakaikahi ʻano lawelawe. kikowaena hoʻohana LoadBalancer, ka mea e hāʻawi i kahi leka uila IP waho e hoʻopili ai kikowaena mai waho o ka pūpū.
Loaʻa iā Kubernetes kahi ʻōnaehana DNS i kūkulu ʻia e hāʻawi i nā inoa DNS (no ka laʻana, helloserver.default.cluster.local) lawelawe. Mahalo i kēia, kamaʻilio nā pods i loko o ka pūʻulu me nā pods ʻē aʻe i loko o ka pūʻulu ma kahi helu mau. ʻAʻole hiki ke hoʻohana ʻia ka inoa DNS ma waho o ka pūʻulu, e like me Cloud Shell a i ʻole ma ke kamepiula.
Hōʻike ʻo Kubernetes
Ke holo ʻoe i ka noi mai ke kumu, ua hoʻohana ʻoe i ke kauoha imperative python3
server.py
ʻO Imperative ka manaʻo i kahi huaʻōlelo: "hana i kēia."
Hoʻohana ʻo Kubernetes hoʻohālike hoʻolaha. ʻO ke ʻano kēia ʻaʻole mākou e haʻi pololei iā Kubernetes i ka mea e hana ai, akā e wehewehe ana i ke kūlana i makemake ʻia. No ka laʻana, hoʻomaka a hoʻopau ʻo Kubernetes i nā pods e like me ka mea e pono ai e hōʻoia i ke kūlana maoli o ka ʻōnaehana e like me ke kūlana i makemake ʻia.
Hōʻike ʻoe i ke kūlana i makemake ʻia ma nā hōʻike a i ʻole nā faila YAML. Aia ka waihona YAML i nā kikoʻī no hoʻokahi a ʻoi aku paha nā mea Kubernetes.
Aia ka laʻana i kahi faila YAML no kikowaena и loadgen. Hōʻike kēlā me kēia faila YAML i ke kūlana makemake o ka mea hoʻolālā a me ka lawelawe Kubernetes.
Kahua mua ʻike aia ka wehewehe ʻana i ke kūlana i makemake ʻia.
spec.replicas hōʻike i ka helu o nā pods i makemake ʻia.
Paukū spec.template wehewehe i kahi template pod. Aia kahi kahua ma ka kikoʻī pod kiʻi, e kuhikuhi ana i ka inoa o ke kiʻi e unuhi ʻia mai ka Container Registry.
LoadBalancer: Hoʻouna nā mea kūʻai aku i nā noi i ka IP address o ka load balancer, nona ka IP address mau loa a hiki ke loaʻa mai waho o ka hui.
targetPort: e like me kou hoomanao ana, ka hui HOIKE 8080 в dockerfile ʻaʻole i hāʻawi i nā awa. Hāʻawi ʻoe i ke awa 8080i hiki iā ʻoe ke hoʻopili i ka ipu kikowaena ma waho o ka pūpū. I ko mākou hihia hellosvc.default.cluster.local:80 (inoa pōkole: hellosvc) pili i ke awa 8080 Pod IP address helloserver.
ke awa: ʻO kēia ka helu awa kahi e hoʻouna ai nā lawelawe ʻē aʻe o ka hui i nā noi.
loadgen.yaml
Hoʻolaha mea i loadgen.yaml kohu like server.yaml. ʻO ka ʻokoʻa ʻo ia ka mea i hoʻolaha ʻia he ʻāpana ʻelele. Ho'ākāka ia i nā ʻano hoʻololi kaiapuni e pono ai loadgen a āu i hoʻokomo ai i ka wā e holo ai ka noi mai ke kumu.
Wā loadgen ʻaʻole ʻae i nā noi e komo mai ana, no ke kahua ʻAno kuhikuhi ClusterIP. Hāʻawi kēia ʻano i kahi leka uila IP mau e hiki ai i nā lawelawe i ka hui ke hoʻohana, akā ʻaʻole ʻike ʻia kēia IP IP i nā mea kūʻai aku o waho.
Hoʻololi PROJECT_ID i kāu ID pāhana GCP.
9) Mālama a pani loadgen.yaml, pani i ka mea hoʻoponopono kikokikona.
10) E hoʻolālā i ka faila YAML iā Kubernetes:
kubectl apply -f loadgen.yaml
Ma hope o ka hoʻokō ʻana, hoʻopuka ke kauoha i kēia code:
deployment.apps/loadgenerator created
service/loadgensvc created
11) E nānā i ke kūlana o nā pods:
kubectl get pods
Hōʻike ke kauoha i ke kūlana:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Wehe i nā palapala noi mai ka pod loadgen. Hoʻololi POD_ID i ka mea hōʻike mai ka pane mua.
kubectl logs loadgenerator-POD_ID
13) E kiʻi i nā helu IP waho hellosvc:
kubectl get service
ʻO ka pane kauoha e like me kēia:
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) E hoʻouna i kahi noi iā hellosvc: pani EXTERNAL_IP i ka helu IP waho hellosvc.
curl http://EXTERNAL_IP
E lawe kāua iā Istio
Loaʻa iā ʻoe kahi noi i kau ʻia iā GKE. loadgen hiki ke hoʻohana i ka Kubernetes DNS (alohavc:80) e hoʻouna i nā noi i kikowaenaa hiki iā ʻoe ke hoʻouna i nā noi i kikowaena e ka helu IP waho. ʻOiai he nui nā hiʻohiʻona o Kubernetes, aia kekahi mau ʻike i nalowale e pili ana i nā lawelawe:
Pehea e launa pū ai nā lawelawe? He aha nā pilina ma waena o nā lawelawe? Pehea ka holo ʻana o nā kaʻa ma waena o nā lawelawe? Maopopo anei iā ʻoe kēlā loadgen hoʻouna i nā noi i kikowaena, akā e noʻonoʻo ʻoe ʻaʻole ʻoe i ʻike i kekahi mea e pili ana i ka noi. No ka pane ʻana i kēia mau nīnau, e nānā kākou i ka papa inoa o nā pods holo ma GKE.
Nā ana. Pehea ka lōʻihi kikowaena pane i kahi noi e komo mai ana? ʻEhia mau noi i kekona i loaʻa i ke kikowaena? Hāʻawi ia i nā memo hewa?
ʻIke palekana. Kaʻahele ma waena loadgen и kikowaena maalo wale HTTP aiʻole e mTLS?
Pane ʻo Istio i kēia mau nīnau a pau. No ka hana ʻana i kēia, kau ʻo Istio i kahi mea koho sidecar ʻelele i loko o kēlā me kēia pahu. Hoʻopili ka Envoy proxy i nā kaʻa komo a i waho i nā pahu noi. ʻO ia hoʻi kikowaena и loadgen loaʻa ma o sidecar proxy Envoy, a me nā kaʻa a pau mai loadgen к kikowaena e hele ana ma o ka Envoy proxy.
Hoʻohui ʻia nā pilina ma waena o nā proxies Envoy i kahi mesh lawelawe. Hāʻawi ka ʻenehana mesh lawelawe i kahi papa o ka mana ma luna o nā Kubernetes.
Ma muli o ka holo ʻana o nā proxies Envoy i kā lākou mau pahu ponoʻī, hiki ke hoʻokomo ʻia ʻo Istio ma luna o kahi pūʻulu GKE me ka ʻaneʻane ʻaʻohe hoʻololi i ke code noi. Akā ua hana ʻoe i kahi hana e hoʻomākaukau ai i kāu noi e mālama ʻia e Istio:
Nā lawelawe no nā ipu a pau. I nā hoʻolaha kikowaena и loadgen pili i ka lawelawe Kubernetes. ʻOiai loadgen, ka mea i loaʻa ʻole i nā noi komo, aia kahi lawelawe.
Pono nā awa ma nā lawelawe e loaʻa nā inoa. ʻOiai hiki ke waiho inoa ʻole ʻia nā awa lawelawe ma GKE, koi ʻo Istio iā ʻoe e kuhikuhi inoa awa e like me kāna protocol. Ma ka waihona YAML ke awa no kikowaena kāheaʻia httpno ka mea, hoʻohana ke kikowaena i ka protocol HTTP. Ina hana hoʻohana ʻia gRPC, inoa ʻoe i ke awa grpc.
Hoʻopili ʻia nā hoʻolaha. No laila, hiki iā ʻoe ke hoʻohana i nā hiʻohiʻona hoʻokele kaʻa a Istio, e like me ka hoʻokaʻawale ʻana i ke kaʻa ma waena o nā mana o ka lawelawe like.
Hoʻokomo
ʻElua ala e hoʻokomo iā Istio. Hiki hiki iā Istio ma GKE hoʻonui ai ole ia, e hoʻokomo i ka mana open source o Istio ma ka pūʻulu. Me Istio ma GKE, hiki iā ʻoe ke hoʻokele maʻalahi i nā hoʻonohonoho ʻana a me nā hoʻomaikaʻi ʻana iā Istio i loko o ke ola holoʻokoʻa o ka pūʻulu GKE. Inā makemake ʻoe i ka mana hou loa o Istio a i ʻole ka mana ʻoi aku ma luna o kāu hoʻonohonoho hoʻonohonoho hoʻokele Istio, e hoʻokomo i ka mana open source ma kahi o ka Istio ma GKE hoʻonui. No ka hoʻoholo ʻana i ke ala, e heluhelu i ka ʻatikala Pono au iā Istio ma GKE?.
E koho i kahi koho, e nānā i ke alakaʻi kūpono, a e hahai i nā kuhikuhi e hoʻokomo iā Istio ma kāu hui. Inā makemake ʻoe e hoʻohana iā Istio me kāu noi hou i kau ʻia, hiki ke hoʻokō sidecar no ka papa inoa ka paʻamau.
Очистка
I mea e pale ʻole ʻia ai i kāu moʻokāki Google Cloud Platform no nā kumuwaiwai āu i hoʻohana ai i kēia kumu aʻoaʻo, e holoi i ka pūʻulu pahu i ka manawa āu i hoʻokomo ai iā Istio a pāʻani me ka noi laʻana. Hoʻopau kēia i nā kumuwaiwai cluster āpau, e like me nā helu helu, nā disks, a me nā kumuwaiwai pūnaewele.