Ang Istio usa ka sayon ββββnga himan alang sa pagkonektar, pagsiguro ug pag-monitor sa gipang-apod-apod nga mga aplikasyon. Gigamit ni Istio ang lain-laing mga teknolohiya sa pagpadagan ug pagdumala sa software sa sukdanan, lakip na ang mga sudlanan nga mag-package sa code sa aplikasyon ug mga dependency para sa pag-deploy, ug ang Kubernetes sa pagdumala sa maong mga sudlanan. Busa, aron magtrabaho kauban si Istio kinahanglan nimo mahibal-an kung giunsa ang usa ka aplikasyon nga adunay daghang mga serbisyo nga gibase sa kini nga mga teknolohiya nga walay Istio. Kung kini nga mga himan ug mga konsepto pamilyar na kanimo, ayaw pagduhaduha sa paglaktaw niini nga panudlo ug diretso sa seksyon Pag-instalar sa Istio sa Google Kubernetes Engine (GKE) o pag-instalar og extension Istio sa GKE.
Kini usa ka lakang-sa-lakang nga giya diin kita maglakaw sa tibuok proseso gikan sa source code ngadto sa GKE nga sudlanan aron mahatagan ka og sukaranan nga pagsabot niini nga mga teknolohiya pinaagi sa usa ka pananglitan. Makita usab nimo kung giunsa paggamit ni Istio ang gahum sa kini nga mga teknolohiya. Nagtuo kini nga wala ka'y ββnahibal-an bahin sa mga sudlanan, Kubernetes, service meshes, o Istio.
buluhaton
Niini nga panudlo, imong makompleto ang mosunod nga mga buluhaton:
Pagkat-on sa usa ka yano nga aplikasyon sa hello sa kalibutan nga adunay daghang mga serbisyo.
Pagdalagan ang aplikasyon gikan sa source code.
Pagputos sa aplikasyon sa mga sudlanan.
Paghimo ug Kubernetes cluster.
Pag-deploy sa mga sudlanan ngadto sa usa ka cluster.
Sa wala ka pa magsugod
Sunda ang mga panudlo aron mahimo ang Kubernetes Engine API:
Niini nga panudlo, mahimo nimong gamiton ang Cloud Shell, nga nag-andam sa virtual nga makina g1-gamay sa Google Compute Engine uban sa Linux nga nakabase sa Debian, o usa ka Linux o macOS nga kompyuter.
Opsyon A: Paggamit sa Cloud Shell
Mga kaayohan sa paggamit sa Cloud Shell:
Python 2 ug Python 3 development environment (lakip ang virtualenv) bug-os nga na-configure.
Mga Tool sa Command Line gcloud, docker, git ΠΈ kubectl, nga among gamiton kay na-install na.
Pagpahimutang kubectl - himan sa command line alang sa pagtrabaho uban sa Kubernetes.
gcloud components install kubectl
Pagpahimutang Docker Community Edition (CE). Gamiton nimo ang command line tool dockersa paghimo og mga hulagway sa sudlanan alang sa sample nga aplikasyon.
I-install ang himan Git version controlaron makuha ang sample nga aplikasyon gikan sa GitHub.
Lakaw ngadto sa direktoryo sa pananglitan nga code:
cd istio-samples/sample-apps/helloserver
Pag-usisa sa usa ka aplikasyon nga adunay daghang mga serbisyo
Ang sample nga aplikasyon gisulat sa Python ug naglangkob sa duha ka mga sangkap nga nakig-interact gamit PAHULAY:
server: simple nga server nga adunay usa ka endpoint GET, /, nga nag-imprinta sa "hello world" sa console.
loadgen: script nga nagpadala sa trapiko sa server, nga adunay ma-configure nga gidaghanon sa mga hangyo matag segundo.
Pagpadagan sa usa ka aplikasyon gikan sa source code
Aron masusi ang sample nga aplikasyon, padagana kini sa Cloud Shell o sa imong computer.
1) Sa katalogo istio-samples/sample-apps/helloserver dagan server:
python3 server/server.py
Sa pagsugod server ang mosunod gipakita:
INFO:root:Starting server...
2) Ablihi ang laing terminal window aron ipadala ang mga hangyo server. Kung naggamit ka sa Cloud Shell, i-klik ang add icon aron maablihan ang laing sesyon.
3) Ipadala ang usa ka hangyo sa server:
curl http://localhost:8080
tubag sa server:
Hello World!
4) Gikan sa direktoryo diin imong gi-download ang sample code, adto sa direktoryo nga adunay sulod loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
5) Paghimo sa mosunod nga mga variable sa palibot:
Gikan sa panan-aw sa networking, ang tibuok aplikasyon nagdagan sa usa ka host (lokal nga kompyuter o Cloud Shell virtual machine). Busa mahimo nimong gamiton localhostsa pagpadala sa mga hangyo sa server.
10) Paghunong loadgen ΠΈ server, pagsulod Ctrl-c sa matag terminal nga bintana.
11) Sa terminal nga bintana loadgen i-deactivate ang virtual nga palibot:
deactivate
Pagputos sa usa ka aplikasyon sa mga sudlanan
Aron mapadagan ang aplikasyon sa GKE, kinahanglan nimo nga i-package ang sample nga aplikasyon β server ΠΈ loadgen - sa mga sudlanan. Ang usa ka sudlanan usa ka paagi sa pagputos sa usa ka aplikasyon aron mahimulag kini sa palibot niini.
Aron maputos ang usa ka aplikasyon sa usa ka sudlanan, kinahanglan nimo Dockerfile. Dockerfile usa ka text file nga naghubit sa mga sugo alang sa pagtukod sa source code sa aplikasyon ug sa mga dependency niini Imahe sa Docker. Sa higayon nga matukod, imong i-upload ang imahe sa usa ka container registry sama sa Docker Hub o Container Registry.
Ang pananglitan aduna na Dockerfile alang sa server ΠΈ loadgen uban sa tanan nga gikinahanglan nga mga sugo sa pagkolekta sa mga larawan. Ubos - Dockerfile alang sa 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" ]
team GIKAN sa python:3-slim isip base nagsulti sa Docker nga gamiton ang pinakabag-o Imahe sa Python 3 isip base.
team KOPYA. . gikopya ang gigikanan nga mga file sa kasamtangan nga direktoryo sa pagtrabaho (sa among kaso lamang server.py) ngadto sa file system sa sudlanan.
ENTRYPOINT naghubit sa sugo nga gigamit sa pagsugod sa sudlanan. Sa among kaso, kini nga sugo halos pareho sa imong gigamit kaniadto server.py gikan sa source code.
team PAHAYAG nagpaila niana server naghulat alang sa datos pinaagi sa pantalan 8080. Kini nga team dili naghatag ug mga pantalan. Kini usa ka matang sa dokumentasyon nga gikinahanglan aron maablihan ang pantalan 8080 sa pagsugod sa sudlanan.
Pag-andam sa containerize sa imong aplikasyon
1) Ibutang ang mosunod nga mga variable sa palibot. Ilisan PROJECT_ID sa imong GCP project ID.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Paggamit sa mga mithi PROJECT_ID ΠΈ GCR_REPO imong gi-tag ang Docker nga imahe kung imong gitukod kini ug iduso kini sa usa ka pribado nga Container Registry.
2) Itakda ang default nga proyekto sa GCP para sa tool sa command line gcloud.
gcloud config set project $PROJECT_ID
3) Ibutang ang default zone alang sa command line tool gcloud.
gcloud config set compute/zone us-central1-b
4) Siguruha nga ang serbisyo sa Container Registry gipagana sa proyekto sa GCP.
Ribyuha ang listahan sa mga hulagway sa repository ug pamatud-i nga ang mga hulagway na-upload na:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Ang sugo nagpakita sa mga ngalan sa bag-ong gi-upload nga mga hulagway:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Paghimo ug GKE cluster.
Kini nga mga sudlanan mahimong ipadagan sa usa ka Cloud Shell virtual machine o sa usa ka computer nga adunay command docker run. Apan sa usa ka palibot sa produksiyon, kinahanglan nimo ang usa ka paagi sa pag-orchestrate sa mga sulud sa sentro. Pananglitan, kinahanglan nimo ang usa ka sistema nga nagsiguro nga ang mga sudlanan kanunay nga nagdagan, ug kinahanglan nimo ang usa ka paagi aron madugangan ug ma-spin up ang dugang nga mga higayon sa sudlanan kung modaghan ang trapiko.
Aron makadagan ang mga containerized nga aplikasyon mahimo nimong gamiton G.K.E.. Ang GKE usa ka container orchestration platform nga nag-aggregate sa mga virtual machine ngadto sa usa ka cluster. Ang matag virtual machine gitawag nga node. Ang mga cluster sa GKE gibase sa open source nga Kubernetes cluster management system. Naghatag ang Kubernetes og mga mekanismo sa pagpakig-uban sa cluster.
team gcloud naghimo ug istioready cluster sa GCP project ug default zone nga imong gipiho. Aron makadagan ang Istio, among girekomenda nga adunay labing menos 4 nga mga node ug usa ka virtual nga makina n1-standard-2.
Ang team naghimo sa cluster sa pipila ka minuto. Kung andam na ang cluster, ang command nagpagawas sa usa ka butang nga sama niini ang mensahe.
2) Paghatag mga kredensyal sa tool sa command line kubectlsa paggamit niini sa pagdumala sa cluster:
3) Karon mahimo ka makigkomunikar sa Kubernetes pinaagi sa kubectl. Pananglitan, ang mosunod nga sugo makahibalo sa kahimtang sa mga node:
kubectl get nodes
Ang mando naghimo usa ka lista sa mga node:
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
Mga Pangunang Konsepto sa Kubernetes
Ang diagram nagpakita og aplikasyon sa GKE:
Sa dili pa nimo i-deploy ang mga sudlanan sa GKE, tun-i ang mga importanteng konsepto sa Kubernetes. Adunay mga link sa katapusan kung gusto nimo mahibal-an ang dugang.
Mga node ug cluster. Sa GKE, ang usa ka node usa ka virtual nga makina. Sa ubang mga plataporma sa Kubernetes, ang usa ka node mahimong usa ka kompyuter o usa ka virtual nga makina. Ang cluster kay usa ka koleksyon sa mga node nga maisip nga usa ka unit diin ikaw mag-deploy ug containerized nga aplikasyon.
Mga pod. Sa Kubernetes, ang mga sudlanan nagdagan sa mga pod. Ang usa ka Pod sa Kubernetes usa ka dili mabahin nga yunit. Ang usa ka Pod adunay usa o daghang mga sudlanan. Nag-deploy ka og mga sudlanan sa server ug loadgen sa bulag nga mga pod. Kung adunay daghang mga sudlanan sa usa ka pod (pananglitan, usa ka server sa aplikasyon ug proxy server), ang mga sudlanan gidumala isip usa ka entidad ug nagbahin pod og mga kahinguhaan.
Mga deployment. Sa Kubernetes, ang deployment usa ka butang nga usa ka koleksyon sa parehas nga pods. Naglunsad ang Deployment og daghang mga replika sa mga pod nga gipang-apod-apod sa mga cluster node. Awtomatikong gipulihan sa deployment ang mga pod nga napakyas o dili mosanong.
Serbisyo sa Kubernetes. Kung nagdagan ang code sa aplikasyon sa GKE, ang koneksyon tali sa loadgen ΠΈ server. Sa dihang nagsugod ka sa mga serbisyo sa Cloud Shell virtual machine o desktop, nagpadala ka og mga hangyo sa server sa localhost: 8080. Sa higayon nga ma-deploy sa GKE, ang mga pod ipatuman sa anaa nga mga node. Sa kasagaran, wala kay kontrol kung asa nga node ang pod nagdagan, mao nga ikaw mga pod walay permanenteng IP address.
Para makakuha ug IP address para sa server, kinahanglan nimo nga ipasabut ang usa ka abstraction sa network sa ibabaw sa mga pod. Mao na Serbisyo sa Kubernetes. Ang serbisyo sa Kubernetes naghatag usa ka makanunayon nga endpoint alang sa usa ka set sa mga pod. Adunay pipila matang sa mga serbisyo. server naggamit LoadBalancer, nga naghatag ug eksternal nga IP address aron makontak server gikan sa gawas sa cluster.
Ang Kubernetes usab adunay built-in nga DNS system nga nag-assign sa mga ngalan sa DNS (pananglitan, helloserver.default.cluster.local) mga serbisyo. Salamat niini, ang mga pod sulod sa cluster nakigkomunikar sa ubang mga pod sa cluster sa kanunay nga adres. Ang DNS nga ngalan dili magamit sa gawas sa cluster, sama sa Cloud Shell o sa usa ka computer.
Nagpakita ang mga Kubernetes
Kung gipadagan nimo ang aplikasyon gikan sa gigikanan, gigamit nimo ang imperative command python3
server.py
Ang imperative nagpasabot sa usa ka berbo: "buhata kini."
Gigamit sa Kubernetes deklaratibo nga modelo. Nagpasabot kini nga wala namo isulti sa Kubernetes ang eksakto nga buhaton, apan gihubit ang gusto nga kahimtang. Pananglitan, ang Kubernetes magsugod ug mohunong sa mga pod kung gikinahanglan aron mapadayon ang aktuwal nga kahimtang sa sistema nga nahiuyon sa gusto nga kahimtang.
Gipakita nimo ang gusto nga estado sa mga manifest o mga file YAML. Ang usa ka YAML file adunay mga detalye alang sa usa o daghang mga butang sa Kubernetes.
Ang pananglitan adunay usa ka YAML file alang sa server ΠΈ loadgen. Ang matag YAML file nagtino sa gusto nga kahimtang sa deployment object ug serbisyo sa Kubernetes.
Unang field detalye naglangkob sa usa ka paghulagway sa gitinguha nga kahimtang.
spec.replicas nagpakita sa gitinguha nga gidaghanon sa mga pods.
Seksyon spec.template naghubit sa usa ka pod template. Adunay usa ka natad sa detalye sa pod larawan, nga nagtino sa ngalan sa hulagway nga kinahanglang makuha gikan sa Container Registry.
LoadBalancer: Ang mga kliyente nagpadala og mga hangyo ngadto sa IP address sa load balancer, nga adunay padayon nga IP address ug ma-access gikan sa gawas sa cluster.
targetPort: sa imong nahinumduman, ang team EXPOSE 8080 Π² Dockerfile wala naghatag ug mga pantalan. Gihatag nimo ang pantalan 8080para makontak nimo ang sudlanan server gawas sa cluster. Sa among kaso hellosvc.default.cluster.local:80 (mubo nga ngalan: hellosvc) katumbas sa pantalan 8080 Mga IP address sa pod helloserver.
Dunggoanan: Kini ang numero sa pantalan diin ang ubang mga serbisyo sa cluster magpadala mga hangyo.
loadgen.yaml
Deployment object sa loadgen.yaml murag server.yaml. Ang kalainan mao nga ang butang sa pag-deploy adunay usa ka seksyon env. Gihubit niini ang mga variable sa palibot nga gikinahanglan loadgen ug nga imong gi-install kung gipadagan ang aplikasyon gikan sa gigikanan.
Kausa loadgen dili modawat sa umaabot nga mga hangyo, alang sa uma matang gipaila ClusterIP. Kini nga tipo naghatag ug usa ka padayon nga IP address nga magamit sa mga serbisyo sa cluster, apan kini nga IP address wala ma-expose sa mga eksternal nga kliyente.
Ilisan PROJECT_ID sa imong GCP project ID.
9) I-save ug isara loadgen.yaml, isira ang text editor.
10) I-deploy ang YAML file sa Kubernetes:
kubectl apply -f loadgen.yaml
Sa malampuson nga pagkompleto, ang command naghimo sa mosunod nga code:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Susihon ang kahimtang sa mga pods:
kubectl get pods
Ang sugo nagpakita sa kahimtang:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Kuhaa ang mga log sa aplikasyon gikan sa pod loadgen. Ilisan POD_ID sa identifier gikan sa miaging tubag.
kubectl logs loadgenerator-POD_ID
13) Pagkuha sa gawas nga mga adres sa IP hellosvc:
kubectl get service
Ang tubag sa command ingon niini:
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) Ipadala ang usa ka hangyo sa hellosvc: ilisan EXTERNAL_IP ngadto sa external IP address hellosvc.
curl http://EXTERNAL_IP
Atong kuhaon si Istio
Aduna ka nay aplikasyon nga gipakatap sa GKE. loadgen makagamit sa Kubernetes DNS (hellosvc:80) aron ipadala ang mga hangyo sa serverug mahimo ka magpadala mga hangyo sa server pinaagi sa external IP address. Bisan kung ang Kubernetes adunay daghang mga bahin, adunay pipila ka impormasyon nga nawala bahin sa mga serbisyo:
Giunsa ang interaksyon sa mga serbisyo? Unsa ang mga relasyon tali sa mga serbisyo? Giunsa ang dagan sa trapiko tali sa mga serbisyo? Aware ka ana loadgen nagpadala mga hangyo sa server, apan hunahunaa nga wala ka'y ββnahibal-an bahin sa aplikasyon. Aron matubag kini nga mga pangutana, atong tan-awon ang lista sa mga running pod sa GKE.
Mga sukatan. Unsa kadugay server pagtubag sa umaabot nga hangyo? Pila ka hangyo matag segundo ang madawat sa server? Naghatag ba kini mga mensahe sa sayup?
Impormasyon sa Seguridad. Traffic sa taliwala loadgen ΠΈ server moagi lang http o ni mTLS?
Gitubag ni Istio kining tanan nga mga pangutana. Aron mahimo kini, nagbutang si Istio og sidecar proxy sinugo sa matag pod. Ang Envoy proxy nagpugong sa tanan nga umaabot ug paggawas nga trapiko sa mga sudlanan sa aplikasyon. Nagpasabot kana server ΠΈ loadgen makadawat pinaagi sa sidecar proxy Envoy, ug ang tanan nga trapiko gikan sa loadgen ΠΊ server moagi sa Envoy proxy.
Ang mga koneksyon tali sa mga proxies sa Envoy nahimong usa ka service mesh. Ang arkitektura nga mesh sa serbisyo naghatag usa ka layer sa kontrol sa ibabaw sa Kubernetes.
Tungod kay ang mga proxy sa Envoy nagdagan sa ilang kaugalingon nga mga sudlanan, ang Istio mahimong ma-install sa ibabaw sa usa ka cluster sa GKE nga halos walaβy mga pagbag-o sa code sa aplikasyon. Apan nakahimo ka og trabaho aron maandam ang imong aplikasyon nga madumala ni Istio:
Mga serbisyo alang sa tanan nga mga sudlanan. Sa mga deployment server ΠΈ loadgen nahigot sa serbisyo sa Kubernetes. Bisan loadgen, nga dili makadawat sa umaabot nga mga hangyo, adunay serbisyo.
Ang mga pantalan sa mga serbisyo kinahanglan adunay mga ngalan. Bisan kung ang mga pantalan sa serbisyo mahimong biyaan nga wala hinganli sa GKE, gihangyo ka ni Istio nga ipiho ngalan sa pantalan subay sa iyang protocol. Sa YAML file ang port alang sa server gitawag Httptungod kay ang server naggamit sa protocol http. Kung nga pag-alagad gigamit gRPC, imong nganlan ang pantalan grpc.
Gi-flag ang mga deployment. Busa, mahimo nimong gamiton ang mga bahin sa pagdumala sa trapiko sa Istio, sama sa pagbahin sa trapiko tali sa mga bersyon sa parehas nga serbisyo.
Pag-instalar
Adunay duha ka paagi sa pag-instalar sa Istio. Mahimo i-enable ang Istio sa GKE extension o i-install ang open source nga bersyon sa Istio sa cluster. Uban sa Istio sa GKE, dali nimong madumala ang mga pag-install ug pag-upgrade sa Istio sa tibuuk nga siklo sa kinabuhi sa cluster sa GKE. Kung gusto nimo ang pinakabag-o nga bersyon sa Istio o labaw pa nga kontrol sa imong Istio control panel configuration, i-install ang open source nga bersyon imbes ang Istio sa GKE extension. Aron makadesisyon sa pamaagi, basaha ang artikulo Kinahanglan ba nako ang Istio sa GKE?.
Pagpili usa ka kapilian, ribyuha ang angay nga giya, ug sunda ang mga panudlo aron ma-install ang Istio sa imong cluster. Kung gusto nimong gamiton ang Istio sa imong bag-ong gi-deploy nga aplikasyon, makahimo sa pagpatuman sa sidecar alang sa namespace Default.
ΠΡΠΈΡΡΠΊΠ°
Aron malikayan nga masingil sa imong Google Cloud Platform nga account alang sa mga kapanguhaan nga imong gigamit sa kini nga panudlo, i-delete ang container cluster kung na-install na nimo ang Istio ug gidula ang sample nga aplikasyon. Kini magtangtang sa tanang cluster resources, sama sa compute instance, disks, ug network resources.