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:
Bir nechta xizmatlarga ega oddiy salom dunyo ilovasini o'rganish.
Ilovani manba kodidan ishga tushiring.
Ilovani konteynerlarga qadoqlash.
Kubernetes klasterini yaratish.
Konteynerlarni klasterga joylashtirish.
Boshlashdan oldin
Kubernetes Engine API-ni yoqish uchun ko'rsatmalarga amal qiling:
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.
matbuot Cloud Shell-ni faollashtiring GCP konsoli oynasining yuqori qismidagi (Cloud Shell-ni faollashtirish).
Pastki qismida GCP konsoli Buyruqlar qatori bilan Cloud Shell seansi yangi oynada ochiladi.
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:
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.
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
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.
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.
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:
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:
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.
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.
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.
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.
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.
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.