Pag-andam sa aplikasyon alang sa Istio

Pag-andam sa aplikasyon alang sa Istio

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:

  1. Pagkat-on sa usa ka yano nga aplikasyon sa hello sa kalibutan nga adunay daghang mga serbisyo.
  2. Pagdalagan ang aplikasyon gikan sa source code.
  3. Pagputos sa aplikasyon sa mga sudlanan.
  4. Paghimo ug Kubernetes cluster.
  5. 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:

  1. Pag-adto sa Panid sa Kubernetes Engine sa Google Cloud Platform console.
  2. Paghimo o pagpili og proyekto.
  3. Paghulat hangtud nga ang API ug ang may kalabutan nga mga serbisyo mapalihok. Mahimo kini nga pipila ka minuto.
  4. Siguruha nga ang pagsingil na-set up para sa imong proyekto sa Google Cloud Platform. Pagkat-on unsaon pagpagana ang pagsingil.

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.
  • Daghan ka nga mapilian mga text editor:
    1. Editor sa code, nga magbukas gamit ang icon sa pag-edit sa ibabaw sa bintana sa Cloud Shell.
    2. Emacs, Vim o Nano, nga nagbukas gikan sa command line sa Cloud Shell.

Aron magamit Cloud Shell:

  1. Adto sa GCP console.
  2. press I-aktibo ang Cloud Shell (Activate Cloud Shell) sa ibabaw sa GCP console window.

Pag-andam sa aplikasyon alang sa Istio

Sa ubos nga bahin GCP console Ang usa ka sesyon sa Cloud Shell nga adunay usa ka command line maablihan sa usa ka bag-ong bintana.

Pag-andam sa aplikasyon alang sa Istio

Opsyon B: Paggamit sa Command Line Tools sa Lokal

Kung nagtrabaho ka sa usa ka kompyuter nga nagdagan sa Linux o macOS, kinahanglan nimo nga i-configure ug i-install ang mga musunud nga sangkap:

  1. Ipasadya Python 3 ug Python 2 development environment.

  2. I-install ang Cloud SDK gamit ang command line tool gcloud.

  3. Pagpahimutang kubectl - himan sa command line alang sa pagtrabaho uban sa Kubernetes.

    gcloud components install kubectl

  4. Pagpahimutang Docker Community Edition (CE). Gamiton nimo ang command line tool dockersa paghimo og mga hulagway sa sudlanan alang sa sample nga aplikasyon.

  5. I-install ang himan Git version controlaron makuha ang sample nga aplikasyon gikan sa GitHub.

Pag-download sa sample code

  1. I-download ang source code helloserver:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. 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.

Pag-andam sa aplikasyon alang sa Istio

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:

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) Paglusad virtualenv:

virtualenv --python python3 env

7) I-aktibo ang virtual nga palibot:

source env/bin/activate

8) Paghimo og mga kinahanglanon alang sa loadgen:

pip3 install -r requirements.txt

9) Paglusad loadgen:

python3 loadgen.py

Sa pagsugod loadgen nagpakita sa usa ka butang sama sa mosunod nga mensahe:

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

Sa laing terminal nga bintana server nagpagawas sa mosunod nga mga mensahe ngadto sa console:

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

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.

gcloud services enable containerregistry.googleapis.com

Server sa containerization

  1. Lakaw ngadto sa direktoryo diin nahimutang ang pananglitan server:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. I-assemble ang imahe gamit ang Dockerfile ug ang mga variable sa palibot nga imong gipasabut sa sayo pa:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

Parameter -t nagrepresentar sa Docker tag. Kini ang ngalan sa imahe nga imong gigamit sa pag-deploy sa sudlanan.

  1. I-upload ang hulagway sa Container Registry:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Containerization sa loadgen

1) Adto sa direktoryo diin nahimutang ang pananglitan loadgen:

cd ../loadgen

2) Kolektaha ang imahe:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) I-upload ang imahe sa Container Registry:

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

Tan-awa ang listahan sa mga hulagway

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.

Paghimo ug GKE cluster:

1) Paghimo usa ka cluster:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

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:

gcloud container clusters get-credentials istioready

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:

Pag-andam sa aplikasyon alang sa Istio

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.

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

  • matang nagpakita sa matang sa butang.
  • metadata.ngalan nagtino sa ngalan sa deployment.
  • 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.

Ang serbisyo gihubit ingon sa mosunod:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • 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.

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: 512Mi

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.

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

Pag-deploy sa mga Container sa GKE

1) Adto sa direktoryo diin nahimutang ang pananglitan server:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) Bukas server.yaml sa usa ka text editor.
3) Ilisan ang ngalan sa field larawan sa ngalan sa imong Docker nga imahe.

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

Ilisan PROJECT_ID sa imong GCP project ID.
4) I-save ug isara server.yaml.
5) I-deploy ang YAML file sa Kubernetes:

kubectl apply -f server.yaml

Sa malampuson nga pagkompleto, ang command naghimo sa mosunod nga code:

deployment.apps/helloserver created
service/hellosvc created

6) Lakaw ngadto sa direktoryo diin loadgen:

cd ../loadgen

7) Bukas loadgen.yaml sa usa ka text editor.
8) Ilisan ang ngalan sa field larawan sa ngalan sa imong Docker nga imahe.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

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.

Pag-andam sa aplikasyon alang sa Istio

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.

Unsay sunod?

Source: www.habr.com

Idugang sa usa ka comment