Përgatitja e aplikacionit për Istio

Përgatitja e aplikacionit për Istio

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. Instalimi i Istio në Google Kubernetes Engine (GKE) apo instalimi i zgjerimit Istio on GKE.

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:

  1. Studimi i një aplikacioni të thjeshtë hello world me disa shërbime.
  2. Ekzekutimi i aplikacionit nga kodi burimor.
  3. Paketimi i aplikacionit në kontejnerë.
  4. Krijimi i një klasteri Kubernetes.
  5. Shpërndarja e kontejnerëve në klaster.

Para se të filloni

Pasoni udhëzimet për të aktivizuar API-në e Kubernetes Engine:

  1. Shkoni në faqen e Kubernetes Engine në konsolën Google Cloud Platform.
  2. Krijoni ose zgjidhni një projekt.
  3. Prisni derisa API-ja dhe shërbimet përkatëse të aktivizohen. Kjo mund të marrë disa minuta.
  4. Sigurohuni që llogaria e Google Cloud Platform të ketë konfigurimin e faturimit. Mësoni si të aktivizoni faturimin.

Në këtë udhëzues mund të përdorni Cloud Shell, i cili përgatit një makinë virtuale g1-small në Google Compute Engine 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 editorĂ« teksti:
    1. Editori i kodit, që hapet me ikonën e redaktimit në pjesën e sipërme të dritares së Cloud Shell.
    2. Emacs, Vim ose Nano, që hapen nga linja e komandës në Cloud Shell.

Për të përdorur Cloud Shell:

  1. Shkoni në konsolën GCP.
  2. Klikoni butonin Aktivizoni Cloud Shell (Aktivizoni Cloud Shell) në pjesën e sipërme të dritares së konsolës GCP.

Përgatitja e aplikacionit për Istio

Në fund të konsolës GCP në një dritare të re do të hapet një seancë Cloud Shell me komandën.

Përgatitja e aplikacionit për Istio

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:

  1. Konfiguroni mjedisin e zhvillimit Python 3 dhe Python 2.

  2. Instaloni Cloud SDK me mjetin e komandës gcloud.

  3. Instaloni kubectl — mjeti i komandĂ«s pĂ«r tĂ« punuar me Kubernetes.

    gcloud components install kubectl

  4. Instaloni Docker Community Edition (CE). Do ta përdorni mjetin e komandës docker, për të krijuar imazhe kontejnerësh për shembullin e aplikacionit.

  5. Instaloni mjetin e kontrollit të versioneve Git, për të marrë shembullin e aplikacionit nga GitHub.

Shkarkimi i shembullit të kodit

  1. Shkarkoni kodin burimor helloserver:

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

  2. Kalo 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 REST:

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

Përgatitja e aplikacionit për Istio

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

Kur 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:8080

serveri 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/loadgen

5) Krijoni variablat e mëposhtëm të mjedisit:

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

6) Ekzekutoni virtualenv:

virtualenv --python python3 env

7) Aktivizoni mjedisin virtual:

source env/bin/activate

8) Instaloni kërkesat për loadgen:

pip3 install -r requirements.txt

9) Ekzekutoni loadgen:

python3 loadgen.py

Kur 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:8080

Në 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:

deactivate

Paketa e aplikacionit në kontejnerë

PĂ«r tĂ« drejtuar aplikacionin nĂ« GKE, duhet tĂ« paketoni shembullin e aplikacionit — server dhe loadgen — nĂ« kontejnerĂ«t. 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Ă« imazhin Docker. Pasi tĂ« pĂ«rfundojĂ« ndĂ«rtimi, ngarkoni imazhin nĂ« regjistrin e kontejnerĂ«ve, p.sh., Docker Hub ose Container Registry.

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 Python 3 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 ofron portet. Ë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_ID

3) Caktoni zonën si të paracaktuar për mjetin e komandave gcloud.

gcloud config set compute/zone us-central1-b

4) Sigurohuni që shërbimi i Container Registry është aktivizuar për projektin GCP.

gcloud services enable containerregistry.googleapis.com

Kontejnerizimi i serverit

  1. Shkoni në katalogun ku ndodhet shembulli server:

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

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

  1. 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 ../loadgen

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

Shikoni 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-istio

Komanda jep emrat e imazheve që sapo janë dërguar:

EMRI
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

Krijimi 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. 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 4

Ekipa 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. n1-standard-2.

Komanda krijon klasterin për disa minuta. Kur klasteri të jetë gati, komanda jep një zakonshëm një mesazh.

2) Jepni kredencialet në instrumentin e komandës kubectl, për ta menaxhuar klasterin:

gcloud container clusters get-credentials istioready

3) 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 nodes

Komanda 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.13

Koncepte Kryesore të Kubernetes

Në diagram tregohet aplikacioni në GKE:

Përgatitja e aplikacionit për Istio

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 server proxy), 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Ă« pod’ët 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. ShĂ«rbimi Kubernetes ofron njĂ« pikĂ« pĂ«rfundimtare tĂ« qĂ«ndrueshme pĂ«r njĂ« grup pod’esh. Ka disa tipa shĂ«rbimesh. 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 modelin deklarativ. 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 YAML. 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: 512Mi

Një 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: 8080

Zhvillimi 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.1

Zë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.yaml

Pas përfundimit të suksesshëm, komandaja jep kodin e mëposhtëm:

deployment.apps/helloserver created
service/hellosvc created

6) Shkoni në katalogun ku ndodhet loadgen:

cd ../loadgen

7) 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.1

Zë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.yaml

Pas përfundimit të suksesshëm, komandaja jep kodin e mëposhtëm:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Kontrolloni statusin e pod-ëve:

kubectl get pods

Komanda tregon statusin:

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) 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_ID

13) Merrni adresat IP të jashtme hellosvc:

kubectl get service

Pë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         4m52s

14) Dërgoni një kërkesë në hellosvc: zëvendësoni EXTERNAL_IP me adresën IP të jashtme hellosvc.

curl http://EXTERNAL_IP

Po 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 mTLS?

Të gjitha këto pyetje përgjigjet Istio. Për këtë, Istio vendos një proxy sidecar Envoy 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.

Përgatitja e aplikacionit për Istio

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 emri i portit 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ë aktivizoni zgjerimin Istio on GKE ose instaloni versionin open-source të Istio 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 Më nevojitet Istio on GKE?.

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, aktivizoni mbushjen e sidecar 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?

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster