Istio uchun ariza tayyorlash

Istio uchun ariza tayyorlash

Istio tarqatilgan ilovalarni ulash, himoyalash va monitoring qilish uchun qulay vositadir. Istio dasturiy ta'minotni keng miqyosda ishga tushirish va boshqarish uchun turli texnologiyalardan foydalanadi, jumladan, dastur kodini va joylashtirishga bog'liqliklarni paketlash uchun konteynerlar va ushbu konteynerlarni boshqarish uchun Kubernetes. Shuning uchun, Istio bilan ishlash uchun siz ushbu texnologiyalarga asoslangan bir nechta xizmatlarga ega ilova qanday ishlashini bilishingiz kerak holda Istio. Agar ushbu vositalar va tushunchalar sizga allaqachon tanish bo'lsa, ushbu qo'llanmani o'tkazib yuboring va to'g'ridan-to'g'ri bo'limga o'ting. Istio-ni Google Kubernetes Engine (GKE) da o'rnatish yoki kengaytmani o'rnatish GKE-da Istio.

Bu bosqichma-bosqich qo'llanma bo'lib, unda biz manba kodidan GKE konteynerigacha bo'lgan butun jarayonni bosib o'tamiz, shunda siz ushbu texnologiyalar haqida misol orqali asosiy tushunchaga ega bo'lasiz. Shuningdek, Istio ushbu texnologiyalarning kuchidan qanday foydalanishini ko'rasiz. Bu sizning konteynerlar, Kubernetes, xizmat ko'rsatish tarmoqlari yoki Istio haqida hech narsa bilmasligingizni anglatadi.

vazifalar

Ushbu qo'llanmada siz quyidagi vazifalarni bajarasiz:

  1. Bir nechta xizmatlarga ega oddiy salom dunyo ilovasini o'rganish.
  2. Ilovani manba kodidan ishga tushiring.
  3. Ilovani konteynerlarga qadoqlash.
  4. Kubernetes klasterini yaratish.
  5. Konteynerlarni klasterga joylashtirish.

Boshlashdan oldin

Kubernetes Engine API-ni yoqish uchun ko'rsatmalarga amal qiling:

  1. Ga boring Kubernetes Engine sahifasi Google Cloud Platform konsolida.
  2. Loyihani yarating yoki tanlang.
  3. API va tegishli xizmatlar yoqilguncha kuting. Bu bir necha daqiqa vaqt olishi mumkin.
  4. Google Cloud Platform loyihangiz uchun hisob-kitob sozlanganligiga ishonch hosil qiling. Hisob-kitobni qanday yoqishni bilib oling.

Ushbu qo'llanmada siz virtual mashinani tayyorlaydigan Cloud Shell dan foydalanishingiz mumkin Google Compute Engine-da g1-kichik Debian-ga asoslangan Linux yoki Linux yoki macOS kompyuteri bilan.

Variant A: Cloud Shell-dan foydalanish

Cloud Shell-dan foydalanishning afzalliklari:

  • Python 2 va Python 3 ishlab chiqish muhitlari (shu jumladan virtualenv) toʻliq sozlangan.
  • Buyruqlar qatori vositalari gcloud, docker, borish и kubectlBiz foydalanadigan , allaqachon o'rnatilgan.
  • Sizda tanlash uchun bir nechta narsa bor matn muharrirlari:
    1. Kod muharriri, Cloud Shell oynasining yuqori qismidagi tahrirlash belgisi bilan ochiladi.
    2. Cloud Shell-da buyruq satridan ochiladigan Emacs, Vim yoki Nano.

Foydalanish uchun Bulut qobig'i:

  1. GCP konsoliga o'ting.
  2. matbuot Cloud Shell-ni faollashtiring GCP konsoli oynasining yuqori qismidagi (Cloud Shell-ni faollashtirish).

Istio uchun ariza tayyorlash

Pastki qismida GCP konsoli Buyruqlar qatori bilan Cloud Shell seansi yangi oynada ochiladi.

Istio uchun ariza tayyorlash

Variant B: Buyruqlar qatori vositalaridan mahalliy foydalanish

Agar siz Linux yoki macOS operatsion tizimida ishlaydigan kompyuterda ishlayotgan bo'lsangiz, quyidagi komponentlarni sozlashingiz va o'rnatishingiz kerak bo'ladi:

  1. Moslashtiring Python 3 va Python 2 ishlab chiqish muhiti.

  2. Cloud SDK ni o'rnating buyruq qatori vositasi bilan gcloud.

  3. O'rnatish kubectl - bilan ishlash uchun buyruq qatori vositasi Kubernetes.

    gcloud components install kubectl

  4. O'rnatish Docker Community Edition (CE). Siz buyruq qatori vositasidan foydalanasiz dockernamuna ilovasi uchun konteyner tasvirlarini yaratish.

  5. Asbobni o'rnating Git versiyasini boshqarishGitHub'dan namunaviy dasturni olish uchun.

Kod namunasini yuklab oling

  1. Manba kodini yuklab oling salom server:

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

  2. Misol kod katalogiga o'ting:

    cd istio-samples/sample-apps/helloserver

Bir nechta xizmatlarga ega ilovani o'rganish

Namuna ilova Python-da yozilgan va o'zaro ta'sir qiluvchi ikkita komponentdan iborat REST:

  • server: bitta so'nggi nuqtaga ega oddiy server GET, /, bu konsolga "salom dunyo" ni chop etadi.
  • yuklovchi: trafikni yuboradigan skript server, sekundiga sozlanishi mumkin bo'lgan so'rovlar soni bilan.

Istio uchun ariza tayyorlash

Ilovani manba kodidan ishga tushirish

Namunaviy ilovani oʻrganish uchun uni Cloud Shell yoki kompyuteringizda ishga tushiring.
1) Katalogda istio-samples/sample-apps/helloserver yugur server:

python3 server/server.py

Ishga tushirishda server quyidagilar ko'rsatiladi:

INFO:root:Starting server...

2) So'rov yuborish uchun boshqa terminal oynasini oching server. Agar siz Cloud Shell-dan foydalanayotgan bo'lsangiz, boshqa seansni ochish uchun qo'shish belgisini bosing.
3) So'rov yuboring server:

curl http://localhost:8080

server javob beradi:

Hello World!

4) Namuna kodini yuklab olgan katalogdan o'z ichiga olgan katalogga o'ting yuklovchi:

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

5) Quyidagi muhit o'zgaruvchilarini yarating:

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

6) Ishga tushirish virtualenv:

virtualenv --python python3 env

7) Virtual muhitni faollashtirish:

source env/bin/activate

8) uchun talablarni belgilang yuklovchi:

pip3 install -r requirements.txt

9) Ishga tushirish yuklovchi:

python3 loadgen.py

Ishga tushirishda yuklovchi quyidagi xabarga o'xshash narsani ko'rsatadi:

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

Boshqa terminal oynasida server konsolga quyidagi xabarlarni chiqaradi:

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: */*

Tarmoq nuqtai nazaridan, butun dastur bitta xostda (mahalliy kompyuter yoki Cloud Shell virtual mashinasi) ishlaydi. Shuning uchun siz foydalanishingiz mumkin localhostso'rovlarini yuborish uchun server.
10) To'xtash yuklovchi и server, kiriting Ctrl-c har bir terminal oynasida.
11) Terminal oynasida yuklovchi virtual muhitni o'chirish:

deactivate

Ilovani konteynerlarga qadoqlash

Ilovani GKE-da ishga tushirish uchun siz namunaviy ilovani paketlashingiz kerak - server и yuklovchi - In konteynırlar. Konteyner - bu dasturni atrof-muhitdan ajratish uchun uni paketlash usuli.

Ilovani konteynerga joylashtirish uchun sizga kerak Docker fayli. Docker fayli ilovaning manba kodini va unga bog'liqliklarini yaratish buyruqlarini belgilaydigan matn faylidir Docker tasviri. O'rnatilgandan so'ng siz rasmni Docker Hub yoki kabi konteyner registriga yuklaysiz Konteyner registri.

Misol allaqachon mavjud Docker fayli uchun server и yuklovchi tasvirlarni yig'ish uchun barcha kerakli buyruqlar bilan. Quyida - Docker fayli uchun 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" ]

  • komanda FROM python: 3-slim asos sifatida Dockerga eng so'nggidan foydalanishni aytadi Python 3 rasm asos sifatida.
  • komanda NUSHASIYA QILISH. . manba fayllarini joriy ishchi katalogga ko'chiradi (faqat bizning holatlarimizda server.py) konteynerning fayl tizimiga.
  • KIRISH NOKTA konteynerni ishga tushirish uchun ishlatiladigan buyruqni belgilaydi. Bizning holatda, bu buyruq siz ishlatgan buyruq bilan deyarli bir xil server.py manba kodidan.
  • komanda FOSH QILISH ekanligini bildiradi server port orqali ma'lumotlarni kutadi 8080. Bu jamoa emas portlarni taqdim etadi. Bu portni ochish uchun zarur bo'lgan hujjatlarning bir turi 8080 konteynerni ishga tushirganda.

Ilovangizni konteynerga joylashtirishga tayyorlanmoqda

1) Quyidagi muhit o'zgaruvchilarini o'rnating. O'zgartiring PROJECT_ID GCP loyiha identifikatoringizga.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Qiymatlardan foydalanish PROJECT_ID и GCR_REPO Docker tasvirini yaratganingizda uni belgilaysiz va uni shaxsiy konteyner registriga surasiz.

2) Buyruqlar qatori vositasi uchun standart GCP loyihasini o'rnating gcloud.

gcloud config set project $PROJECT_ID

3) Buyruqlar qatori vositasi uchun standart zonani o'rnating gcloud.

gcloud config set compute/zone us-central1-b

4) GCP loyihasida Container Registry xizmati yoqilganligiga ishonch hosil qiling.

gcloud services enable containerregistry.googleapis.com

Konteynerlash serveri

  1. Misol joylashgan katalogga o'ting server:

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

  2. yordamida tasvirni yig'ing Docker fayli va siz ilgari aniqlagan muhit o'zgaruvchilari:

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

Parametr -t Docker tegini ifodalaydi. Bu konteynerni joylashtirishda foydalanadigan rasmning nomi.

  1. Tasvirni konteyner registriga yuklang:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Yuklarni konteynerlashtirish

1) Misol joylashgan katalogga o'ting yuklovchi:

cd ../loadgen

2) Rasmni yig'ing:

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

3) Tasvirni konteyner registriga yuklang:

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

Rasmlar ro'yxatini ko'rish

Ombordagi rasmlar ro'yxatini ko'rib chiqing va rasmlar yuklanganligini tekshiring:

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

Buyruq yangi yuklangan rasmlarning nomlarini ko'rsatadi:

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

GKE klasterini yaratish.

Ushbu konteynerlar Cloud Shell virtual mashinasida yoki buyruq bilan kompyuterda ishga tushirilishi mumkin docker ishlaydi. Ammo ishlab chiqarish muhitida konteynerlarni markazlashtirilgan tarzda tartibga solish usuli kerak. Misol uchun, sizga konteynerlar doimo ishlayotganiga ishonch hosil qiladigan tizim kerak va agar trafik ko'paysa, qo'shimcha konteyner misollarini kengaytirish va aylantirish usuli kerak.

Konteynerlashtirilgan ilovalarni ishga tushirish uchun siz foydalanishingiz mumkin G.K.E.. GKE - virtual mashinalarni klasterga jamlaydigan konteyner orkestrlash platformasi. Har bir virtual mashina tugun deb ataladi. GKE klasterlari ochiq manbali Kubernetes klasterlarni boshqarish tizimiga asoslangan. Kubernetes klaster bilan o'zaro ta'sir qilish mexanizmlarini taqdim etadi.

GKE klasterini yaratish:

1) Klaster yarating:

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

komanda gcloud GCP loyihasida va siz ko'rsatgan standart zonada istioready klasterini yaratadi. Istio-ni ishga tushirish uchun kamida 4 tugun va virtual mashinaga ega bo'lishni tavsiya qilamiz n1-standart-2.

Jamoa bir necha daqiqada klasterni yaratadi. Klaster tayyor bo'lgach, buyruq shunga o'xshash narsani chiqaradi xabar.

2) Buyruqlar qatori vositasida hisob ma'lumotlarini taqdim eting kubectlklasterni boshqarishda foydalanish uchun:

gcloud container clusters get-credentials istioready

3) Endi siz Kubernetes bilan orqali bog'lanishingiz mumkin kubectl. Masalan, quyidagi buyruq tugunlarning holatini bilib olishi mumkin:

kubectl get nodes

Buyruq tugunlar ro'yxatini ishlab chiqaradi:

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

Kubernetes asosiy tushunchalari

Diagrammada GKE-dagi dastur ko'rsatilgan:

Istio uchun ariza tayyorlash

GKE-da konteynerlarni joylashtirishdan oldin Kubernetes-ning asosiy tushunchalarini bilib oling. Agar siz ko'proq ma'lumot olishni istasangiz, eng oxirida havolalar mavjud.

  • Tugunlar va klasterlar. GKE-da tugun virtual mashinadir. Boshqa Kubernetes platformalarida tugun kompyuter yoki virtual mashina bo'lishi mumkin. Klaster - bu konteynerlashtirilgan dasturni joylashtirgan yagona birlik deb hisoblanishi mumkin bo'lgan tugunlar to'plami.
  • Podlar. Kubernetesda konteynerlar podalar shaklida ishlaydi. Kubernetesdagi pod - bu bo'linmas birlikdir. Pod bir yoki bir nechta konteynerni o'z ichiga oladi. Siz server konteynerlarini joylashtirasiz va yuklovchi alohida novdalarda. Podda bir nechta konteynerlar mavjud bo'lganda (masalan, dastur serveri va proksi-server), konteynerlar yagona ob'ekt sifatida boshqariladi va pod resurslarini ulashadi.
  • Joylashtirishlar. Kubernetesda joylashtirish - bu bir xil podalar to'plami bo'lgan ob'ekt. Joylashtirish klaster tugunlari bo'ylab taqsimlangan podslarning bir nechta nusxalarini ishga tushiradi. Joylashtirish avtomatik ravishda muvaffaqiyatsiz yoki javob bermayotgan podlarni almashtiradi.
  • Kubernetes xizmati. GKE-da dastur kodini ishga tushirganda, o'rtasidagi aloqa yuklovchi и server. Cloud Shell virtual mashinasi yoki ish stolida xizmatlarni ishga tushirganingizda, so'rovlar yuborgansiz server at localhost: 8080. GKE-ga o'rnatilgandan so'ng, podlar mavjud tugunlarda bajariladi. Odatiy bo'lib, siz podning qaysi tugunida ishlayotganini nazorat qila olmaysiz, shuning uchun siz podalar doimiy IP manzillari yo'q.
    IP manzilini olish uchun server, siz podkastlarning tepasida tarmoq abstraktsiyasini belgilashingiz kerak. Bu shunday Kubernetes xizmati. Kubernetes xizmati podalar to'plami uchun doimiy so'nggi nuqtani ta'minlaydi. Bir necha bor xizmatlar turlari. server ispolzet LoadBalancer, bu aloqa uchun tashqi IP-manzilni taqdim etadi server klaster tashqarisidan.
    Kubernetes shuningdek, DNS nomlarini tayinlaydigan o'rnatilgan DNS tizimiga ega (masalan, helloserver.default.cluster.local) xizmatlar. Buning yordamida klaster ichidagi podalar doimiy manzilda klasterdagi boshqa podalar bilan bog'lanadi. DNS nomi klasterdan tashqarida, masalan, Cloud Shell yoki kompyuterda ishlatilmaydi.

Kubernetes namoyon bo'ladi

Ilovani manbadan ishga tushirganingizda, siz imperativ buyruqdan foydalangansiz python3

server.py

Imperativ fe'lni bildiradi: "buni qil".

Kubernetes foydalanadi deklarativ model. Bu shuni anglatadiki, biz Kubernetesga aniq nima qilish kerakligini aytmayapmiz, balki kerakli holatni tasvirlaymiz. Masalan, Kubernetes tizimning haqiqiy holatini kerakli holatga moslashtirish uchun kerak bo'lganda podlarni ishga tushiradi va to'xtatadi.

Manifest yoki fayllarda kerakli holatni ko'rsatasiz YAML. YAML faylida bir yoki bir nechta Kubernetes obyektlari uchun spetsifikatsiyalar mavjud.

Misol uchun YAML fayli mavjud server и yuklovchi. Har bir YAML fayli joylashtirish obyekti va Kubernetes xizmatining kerakli holatini belgilaydi.

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

  • Mehribon ob'ekt turini ko'rsatadi.
  • metadata.name joylashtirish nomini belgilaydi.
  • Birinchi maydon spec kerakli holatning tavsifini o'z ichiga oladi.
  • spec.replicas podkastlarning kerakli sonini bildiradi.
  • Bo'lim spec.shablon pod shablonini belgilaydi. Pod spetsifikatsiyasida maydon mavjud surat, bu konteyner registridan olinishi kerak bo'lgan tasvir nomini belgilaydi.

Xizmat quyidagicha ta'riflanadi:

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

  • LoadBalancer: Mijozlar doimiy IP-manzilga ega bo'lgan va klasterdan tashqaridan kirish mumkin bo'lgan yuk balanslagichining IP-manziliga so'rov yuboradi.
  • targetPort: eslaganingizdek, jamoa EXPOSE 8080 в Docker fayli portlarni taqdim etmadi. Siz portni taqdim etasiz 8080konteyner bilan bog'lanishingiz uchun server klasterdan tashqarida. Bizning holatda hellovc.default.cluster.local:80 (qisqa ism: salomvc) portga mos keladi 8080 Pod IP manzillari salom server.
  • port: Bu klasterdagi boshqa xizmatlar so'rov yuboradigan port raqami.

loadgen.yaml

Joylashtirish ob'ekti loadgen.yaml o'xshaydi server.yaml. Farqi shundaki, joylashtirish ob'ektida bo'lim mavjud taxminan. U zarur bo'lgan muhit o'zgaruvchilarini belgilaydi yuklovchi va dasturni manbadan ishga tushirganda o'rnatganingiz.

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

Vaqt yuklovchi kiruvchi so'rovlarni qabul qilmaydi, maydon uchun shrift ko'rsatilgan ClusterIP. Ushbu tur klasterdagi xizmatlar foydalanishi mumkin bo'lgan doimiy IP manzilini ta'minlaydi, ammo bu IP manzil tashqi mijozlarga ta'sir qilmaydi.

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

GKE-da konteynerlarni joylashtirish

1) Misol joylashgan katalogga o'ting server:

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

2) Ochiq server.yaml matn muharririda.
3) Maydondagi nomni almashtiring surat Docker tasviringiz nomiga.

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

O'zgartiring PROJECT_ID GCP loyiha identifikatoringizga.
4) Saqlash va yopish server.yaml.
5) YAML faylini Kubernetes-ga joylashtiring:

kubectl apply -f server.yaml

Muvaffaqiyatli bajarilgandan so'ng, buyruq quyidagi kodni ishlab chiqaradi:

deployment.apps/helloserver created
service/hellosvc created

6) Qayerda joylashgan katalogga o'ting yuklovchi:

cd ../loadgen

7) Ochiq loadgen.yaml matn muharririda.
8) Maydondagi nomni almashtiring surat Docker tasviringiz nomiga.

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

O'zgartiring PROJECT_ID GCP loyiha identifikatoringizga.
9) Saqlash va yopish loadgen.yaml, matn muharririni yoping.
10) YAML faylini Kubernetes-ga joylashtiring:

kubectl apply -f loadgen.yaml

Muvaffaqiyatli bajarilgandan so'ng, buyruq quyidagi kodni ishlab chiqaradi:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Qopqoqlarning holatini tekshiring:

kubectl get pods

Buyruq holatni ko'rsatadi:

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

12) Ilova jurnallarini podkastdan chiqarib oling yuklovchi. O'zgartiring POD_ID oldingi javobdagi identifikatorga.

kubectl logs loadgenerator-POD_ID

13) Tashqi IP manzillarini oling salomvc:

kubectl get service

Buyruqning javobi quyidagicha ko'rinadi:

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) So'rov yuboring salomvc: almashtiring EXTERNAL_IP tashqi IP manziliga salomvc.

curl http://EXTERNAL_IP

Keling, Istio bilan shug'ullanamiz

Sizda allaqachon GKE-ga o'rnatilgan ilova mavjud. yuklovchi Kubernetes DNS dan foydalanishi mumkin (salom: 80) so'rovlarni yuborish uchun serverva so'rovlarni yuborishingiz mumkin server tashqi IP manzili bo'yicha. Kubernetes ko'plab xususiyatlarga ega bo'lsa-da, xizmatlar haqida ba'zi ma'lumotlar etishmayotgan:

  • Xizmatlar qanday o'zaro ta'sir qiladi? Xizmatlar o'rtasida qanday aloqalar mavjud? Xizmatlar orasidagi trafik qanday o'tadi? Bundan xabaringiz bormi yuklovchi ga so'rovlar yuboradi server, lekin dastur haqida hech narsa bilmasligingizni tasavvur qiling. Bu savollarga javob berish uchun keling, GKE-da ishlaydigan podlar ro'yxatini ko'rib chiqaylik.
  • Ko'rsatkichlar. Qancha muddatga; qancha vaqt server kiruvchi so'rovga javob beradimi? Server tomonidan soniyada qancha so'rovlar qabul qilinadi? Xato xabarlarini beradimi?
  • Xavfsizlik ma'lumotlari. O'rtasidagi tirbandlik yuklovchi и server shunchaki o'tadi HTTP yoki mTLS?

Istio barcha bu savollarga javob beradi. Buning uchun Istio proksi-serverni joylashtiradi elchisi har bir podada. Elchi proksi-server ilova konteynerlariga kiruvchi va chiquvchi barcha trafikni ushlab turadi. Bu shuni anglatadiki server и yuklovchi yordamchi proksi elchi orqali va barcha trafikni qabul qiling yuklovchi к server Elchi proksi orqali o'tadi.

Elchi proksi-serverlari o'rtasidagi ulanishlar xizmat ko'rsatish tarmog'ini tashkil qiladi. Xizmat mesh arxitekturasi Kubernetes tepasida boshqaruv qatlamini ta'minlaydi.

Istio uchun ariza tayyorlash

Envoy proksi-serverlari o'z konteynerlarida ishlaganligi sababli, Istio ilova kodiga deyarli o'zgartirishlarsiz GKE klasterining tepasiga o'rnatilishi mumkin. Ilovangizni Istio tomonidan boshqarishga tayyorlash uchun siz ba'zi ishlarni qildingiz:

  • Barcha konteynerlar uchun xizmatlar. Joylashtirishlar uchun server и yuklovchi Kubernetes xizmatiga ulangan. Hatto yuklovchi, kiruvchi so'rovlarni qabul qilmaydi, xizmat mavjud.
  • Xizmatlardagi portlarning nomlari bo'lishi kerak. Garchi xizmat portlari GKEda nomsiz qoldirilsa ham, Istio sizdan belgilashingizni talab qiladi port nomi uning protokoliga muvofiq. YAML faylida port server deyiladi Httpchunki server protokoldan foydalanadi HTTP. Agarda xizmat ishlatilgan gRPC, siz portni nomlaysiz grpc.
  • Joylashtirishlar belgilandi. Shuning uchun siz Istio-ning trafikni boshqarish xususiyatlaridan foydalanishingiz mumkin, masalan, trafikni bir xil xizmat versiyalari o'rtasida taqsimlash.

Istio o'rnatilmoqda

Istio-ni o'rnatishning ikki yo'li mavjud. mumkin GKE kengaytmasida Istio-ni yoqing yoki Istio-ning ochiq manba versiyasini o'rnating klasterda. GKE ustidagi Istio yordamida siz GKE klasterining butun hayoti davomida Istio oʻrnatish va yangilanishlarini osongina boshqarishingiz mumkin. Agar siz Istio-ning soʻnggi versiyasini yoki Istio boshqaruv paneli konfiguratsiyasi ustidan koʻproq nazoratni xohlasangiz, Istio on GKE kengaytmasi oʻrniga ochiq manba versiyasini oʻrnating. Yondashuv haqida qaror qabul qilish uchun maqolani o'qing Menga GKE da Istio kerakmi?.

Variantni tanlang, tegishli qo'llanmani ko'rib chiqing va Istio-ni klasteringizga o'rnatish uchun ko'rsatmalarga rioya qiling. Agar siz yangi o'rnatilgan ilovangiz bilan Istio-dan foydalanmoqchi bo'lsangiz, sidecarni amalga oshirish imkonini beradi nom maydoni uchun default.

tozalash

Ushbu qoʻllanmada foydalangan resurslaringiz uchun Google Cloud Platform hisobingizdan haq toʻlamaslik uchun Istioʼni oʻrnatib, namunaviy ilova bilan oʻynaganingizdan soʻng konteyner klasterini oʻchirib tashlang. Bu hisoblash misollari, disklar va tarmoq resurslari kabi barcha klaster resurslarini olib tashlaydi.

Keyin nima?

Manba: www.habr.com

a Izoh qo'shish