Istio-д өргөдөл бэлтгэж байна

Istio-д өргөдөл бэлтгэж байна

Istio бол тархсан програмуудыг холбох, хамгаалах, хянах тохиромжтой хэрэгсэл юм. Istio нь программ хангамжийг өргөн цар хүрээтэй ажиллуулж, удирдахын тулд төрөл бүрийн технологиудыг ашигладаг бөгөөд үүнд програмын кодыг багцлах, байршуулах хамаарлыг багтаасан контейнерууд, тэдгээр контейнеруудыг удирдахад Kubernetes ашигладаг. Тиймээс, Istio-тэй ажиллахын тулд эдгээр технологид суурилсан олон үйлчилгээтэй програм хэрхэн ажилладагийг мэдэх ёстой ямар ч Istio. Хэрэв эдгээр хэрэгсэл, ойлголтууд танд аль хэдийн танил болсон бол энэ зааварчилгааг алгасаад шууд хэсэг рүү очоорой. Google Kubernetes Engine (GKE) дээр Istio суулгаж байна эсвэл өргөтгөл суулгах GKE дээр Istio.

Энэ бол алхам алхмаар зааварчилгаа бөгөөд бид эх кодоос эхлээд GKE контейнер хүртэлх бүх үйл явцыг авч үзэх бөгөөд ингэснээр та жишээн дээр эдгээр технологийн талаар үндсэн ойлголттой болно. Istio эдгээр технологийн хүчийг хэрхэн ашиглаж байгааг та бас харах болно. Энэ нь та контейнер, Кубернетес, үйлчилгээний тор, Istio-ийн талаар юу ч мэдэхгүй гэж үздэг.

үүрэг

Энэ зааварт та дараах ажлуудыг гүйцэтгэх болно.

  1. Олон үйлчилгээ бүхий энгийн сайн уу дэлхийн програмыг сурах.
  2. Програмыг эх кодоос ажиллуулна уу.
  3. Програмыг саванд хийх.
  4. Kubernetes кластер үүсгэх.
  5. Контейнерүүдийг кластерт байрлуулж байна.

Эхлэхээсээ өмнө

Kubernetes Engine API-г идэвхжүүлэхийн тулд зааврыг дагана уу:

  1. Явна уу Kubernetes Engine хуудас Google Cloud Platform консол дээр.
  2. Төсөл үүсгэх эсвэл сонгох.
  3. API болон холбогдох үйлчилгээг идэвхжүүлэх хүртэл хүлээнэ үү. Үүнд хэдэн минут зарцуулагдаж магадгүй.
  4. Таны Google Cloud Platform төсөлд төлбөр тооцоог тохируулсан эсэхийг шалгана уу. Төлбөр тооцоог хэрхэн идэвхжүүлэх талаар мэдэж аваарай.

Энэ зааварт та виртуал машиныг бэлтгэдэг Cloud Shell-г ашиглаж болно Google Compute Engine дээрх g1-жижиг Debian-д суурилсан Linux эсвэл Linux эсвэл macOS компьютертэй.

Сонголт А: Cloud Shell ашиглах

Cloud Shell ашиглахын давуу талууд:

  • Python 2 ба Python 3 хөгжүүлэлтийн орчин (үүнд виртуалв) бүрэн тохируулагдсан байна.
  • Тушаалын мөрийн хэрэгслүүд gcloud, боомт, Go и кубектлБидний ашиглах , аль хэдийн суулгасан байна.
  • Танд хэд хэдэн сонголт хийх боломжтой текст засварлагчид:
    1. Код засварлагч, Cloud Shell цонхны дээд хэсэгт байрлах засварлах дүрсээр нээгдэнэ.
    2. Cloud Shell дахь командын мөрөөс нээгддэг Emacs, Vim эсвэл Nano.

Хэрэглэх Үүлэн бүрхүүл:

  1. GCP консол руу очно уу.
  2. хэвлэл мэдээллийн Cloud Shell-ийг идэвхжүүлнэ үү (Үүлэн бүрхүүлийг идэвхжүүлэх) GCP консолын цонхны дээд талд.

Istio-д өргөдөл бэлтгэж байна

Доод хэсэгт GCP консол Командын мөр бүхий Cloud Shell сесс шинэ цонхонд нээгдэнэ.

Istio-д өргөдөл бэлтгэж байна

Сонголт В: Орон нутгийн командын мөрийн хэрэгслийг ашиглах

Хэрэв та Linux эсвэл macOS үйлдлийн системтэй компьютер дээр ажиллах бол дараах бүрэлдэхүүн хэсгүүдийг тохируулж суулгах шаардлагатай.

  1. Тохируулах Python 3 ба Python 2 хөгжүүлэлтийн орчин.

  2. Cloud SDK суулгана уу тушаалын мөрийн хэрэгслээр gcloud.

  3. Тогто кубектл - ажиллах командын мөрийн хэрэгсэл Kubernetes.

    gcloud components install kubectl

  4. Тогто Docker Community Edition (CE). Та тушаалын мөрийн хэрэгслийг ашиглах болно боомтдээж програмд ​​зориулсан контейнер дүрсийг үүсгэх.

  5. Хэрэгслийг суулгана уу Git хувилбарын хяналтGitHub-аас жишээ програм авах.

Жишээ кодыг татаж авах

  1. Эх кодыг татаж авах сайн уу сервер:

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

  2. Жишээ кодын лавлах руу очно уу:

    cd istio-samples/sample-apps/helloserver

Олон үйлчилгээ бүхий програмыг судлах

Програмын жишээ нь Python хэл дээр бичигдсэн бөгөөд ашиглан харилцан үйлчилдэг хоёр бүрэлдэхүүн хэсгээс бүрдэнэ REST:

  • сервер: нэг төгсгөлтэй энгийн сервер GET, /, энэ нь "Сайн уу ертөнц" гэж консол дээр хэвлэдэг.
  • ачаалах: урсгалыг илгээдэг скрипт сервер, секундэд тохируулж болох тооны хүсэлттэй.

Istio-д өргөдөл бэлтгэж байна

Эх кодоос програм ажиллуулж байна

Жишээ програмыг судлахын тулд үүнийг Cloud Shell эсвэл компьютер дээрээ ажиллуулна уу.
1) Каталогт istio-samples/sample-apps/helloserver гүйх сервер:

python3 server/server.py

Эхэлж байхдаа сервер дараахыг харуулав:

INFO:root:Starting server...

2) Хүсэлт илгээхийн тулд өөр терминалын цонхыг нээнэ үү сервер. Хэрэв та Cloud Shell ашиглаж байгаа бол нэмэх дүрс дээр дарж өөр сесс нээнэ үү.
3) Хүсэлт илгээх сервер:

curl http://localhost:8080

серверийн хариулт:

Hello World!

4) Жишээ кодыг татаж авсан лавлахаас агуулагдсан лавлах руу очно уу ачаалах:

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

5) Дараах орчны хувьсагчдыг үүсгэ.

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

6) гүйх виртуалв:

virtualenv --python python3 env

7) Виртуал орчинг идэвхжүүлэх:

source env/bin/activate

8) Шаардлагуудыг тавих ачаалах:

pip3 install -r requirements.txt

9) гүйх ачаалах:

python3 loadgen.py

Эхэлж байхдаа ачаалах дараах мессежтэй төстэй зүйлийг харуулна:

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

Өөр терминалын цонхонд сервер консол руу дараах мессежүүдийг гаргана:

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

Сүлжээний үүднээс авч үзвэл програм бүхэлдээ нэг хост (локал компьютер эсвэл Cloud Shell виртуал машин) дээр ажилладаг. Тиймээс та ашиглаж болно тестлээрэйруу хүсэлт илгээх сервер.
10) Зогсоох ачаалах и сервер, оруулна уу Ctrl-c терминалын цонх бүрт.
11) Терминал цонхонд ачаалах виртуал орчныг идэвхгүй болгох:

deactivate

Програмыг саванд хийх

Програмыг GKE дээр ажиллуулахын тулд та жишээ програмыг багцлах хэрэгтэй − сервер и ачаалах - үед савнууд. Контейнер нь програмыг орчноос нь тусгаарлахын тулд багцлах арга юм.

Програмыг контейнерт багцлахын тулд танд хэрэгтэй Докер файл. Докер файл нь програмын эх код болон түүний хамаарлыг бий болгох командуудыг тодорхойлдог текст файл юм Докерын зураг. Барьсны дараа та зургийг Docker Hub эсвэл гэх мэт контейнерийн бүртгэлд байршуулна Контейнерийн бүртгэл.

Жишээ нь аль хэдийн байна Докер файл нь сервер и ачаалах зураг цуглуулахад шаардлагатай бүх командуудтай. Доор - Докер файл нь сервер:

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" ]

  • баг FROM python:3-slim as base Docker-д хамгийн сүүлийн үеийн хувилбарыг ашиглахыг хэлдэг Python 3 зураг суурь болгон.
  • баг ХУУЛАХ. . эх файлуудыг одоогийн ажиллаж байгаа лавлах руу хуулдаг (зөвхөн манай тохиолдолд server.py) контейнерийн файлын систем рүү.
  • ОРОХ ЦЭГ савыг эхлүүлэх командыг тодорхойлно. Манай тохиолдолд энэ команд нь таны ажиллуулдаг байсантай бараг ижил байна server.py эх кодоос.
  • баг НЭМЭХ гэдгийг харуулж байна сервер портоор дамжуулан өгөгдөл хүлээж байна 8080. Энэ баг биш портуудыг хангадаг. Энэ нь портыг нээхэд шаардлагатай зарим төрлийн баримт бичиг юм 8080 савыг эхлүүлэх үед.

Өргөдлийг тань хадгалахаар бэлдэж байна

1) Дараах орчны хувьсагчдыг тохируулна уу. Солих PROJECT_ID таны GCP төслийн ID руу.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Утга ашиглах PROJECT_ID и GCR_REPO Та үүнийг бүтээхдээ Docker дүрсийг шошгож, хувийн Контейнер Бүртгэл рүү түлхэж өгнө үү.

2) Тушаалын мөрийн хэрэгсэлд зориулсан өгөгдмөл GCP төслийг тохируулна уу gcloud.

gcloud config set project $PROJECT_ID

3) Тушаалын мөрийн хэрэгслийн анхдагч бүсийг тохируулна уу gcloud.

gcloud config set compute/zone us-central1-b

4) GCP төсөл дээр Контейнер бүртгэлийн үйлчилгээг идэвхжүүлсэн эсэхийг шалгана уу.

gcloud services enable containerregistry.googleapis.com

Контейнержуулах сервер

  1. Жишээ байрладаг лавлах руу очно уу сервер:

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

  2. Зургийг ашиглан угсарна Докер файл болон таны өмнө тодорхойлсон орчны хувьсагч:

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

Үзүүлэлт -t Docker тагийг төлөөлдөг. Энэ бол савыг байрлуулахдаа ашигладаг зургийн нэр юм.

  1. Контейнерийн бүртгэлд зургийг байршуулна уу:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Ачаалагчийг савлах

1) Жишээ байрладаг лавлах руу оч ачаалах:

cd ../loadgen

2) Зургийг цуглуул:

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

3) Контейнерийн бүртгэлд зургийг байршуулна уу:

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

Зургийн жагсаалтыг харах

Хадгалах газарт байгаа зургийн жагсаалтыг шалгаж, зургуудыг байршуулсан эсэхийг шалгана уу:

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

Энэ тушаал нь шинээр байршуулсан зургуудын нэрийг харуулна:

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

GKE кластер үүсгэж байна.

Эдгээр контейнеруудыг Cloud Shell виртуал машин эсвэл командын тусламжтайгаар компьютер дээр ажиллуулж болно боомтын гүйгч. Гэхдээ үйлдвэрлэлийн орчинд контейнеруудыг төвлөрсөн байдлаар зохион байгуулах арга зам хэрэгтэй. Жишээлбэл, танд чингэлэг байнга ажиллаж байгаа эсэхийг шалгадаг систем хэрэгтэй бөгөөд хэрэв ачаалал ихсэх тохиолдолд нэмэлт контейнерийн жишээг өргөжүүлэх, эргүүлэх арга зам хэрэгтэй.

Контейнержүүлсэн програмуудыг ажиллуулахын тулд та ашиглаж болно Г.К.Э.. GKE бол виртуал машинуудыг кластер болгон нэгтгэдэг контейнер зохион байгуулах платформ юм. Виртуал машин бүрийг зангилаа гэж нэрлэдэг. GKE кластерууд нь нээлттэй эхийн Kubernetes кластерын удирдлагын систем дээр суурилдаг. Кубернетес нь кластертай харилцах механизмуудыг өгдөг.

GKE кластер үүсгэх:

1) Кластер үүсгэх:

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

баг gcloud GCP төсөл болон таны заасан өгөгдмөл бүсэд istioready кластер үүсгэдэг. Istio-г ажиллуулахын тулд бид дор хаяж 4 зангилаа болон виртуал машинтай байхыг зөвлөж байна n1-стандарт-2.

Баг хэдхэн минутын дотор кластер үүсгэдэг. Кластер бэлэн болсон үед тушаал нь иймэрхүү зүйлийг гаргана сообщение.

2) Командын мөрийн хэрэглүүрт итгэмжлэлүүдийг оруулна уу кубектлкластерыг удирдахад ашиглахын тулд:

gcloud container clusters get-credentials istioready

3) Одоо та Kubernetes-тэй холбогдож болно кубектл. Жишээлбэл, дараах тушаал нь зангилааны статусыг олж мэдэх боломжтой.

kubectl get nodes

Энэ тушаал нь зангилааны жагсаалтыг гаргадаг:

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-ийн үндсэн ойлголтууд

Диаграмм нь GKE дээрх програмыг харуулж байна:

Istio-д өргөдөл бэлтгэж байна

GKE-д контейнер байрлуулахаасаа өмнө Kubernetes-ийн үндсэн ойлголтуудыг мэдэж аваарай. Хэрэв та илүү ихийг мэдэхийг хүсвэл төгсгөлд нь холбоосууд байгаа.

  • Зангилаа ба кластерууд. GKE-д зангилаа нь виртуал машин юм. Бусад Kubernetes платформ дээр зангилаа нь компьютер эсвэл виртуал машин байж болно. Кластер нь контейнержүүлсэн програмыг байршуулах нэг нэгж гэж үзэж болох зангилааны цуглуулга юм.
  • Pods. Кубернетес хотод савнууд нь хонхорцог хэлбэрээр ажилладаг. Kubernetes дахь Pod нь хуваагдашгүй нэгж юм. Pod нь нэг буюу хэд хэдэн савыг агуулна. Та серверийн контейнеруудыг байрлуулж, ачаалах тусдаа саванд. Дотор нь хэд хэдэн контейнер байгаа үед (жишээлбэл, програмын сервер болон прокси сервер), чингэлэгүүдийг нэг аж ахуйн нэгж байдлаар удирдаж, pod нөөцийг хуваалцдаг.
  • Байрлуулалт. Kubernetes-д deployment нь ижил подволуудын цуглуулга болох объект юм. Байршлуулалт нь кластерийн зангилаануудаар тархсан подын олон хуулбарыг эхлүүлдэг. Байрлуулалт нь бүтэлгүйтсэн эсвэл хариу өгөхгүй байгаа pod-уудыг автоматаар сольдог.
  • Kubernetes үйлчилгээ. GKE-д програмын кодыг ажиллуулах үед хоорондын холболт ачаалах и сервер. Та Cloud Shell виртуал машин эсвэл ширээний компьютер дээр үйлчилгээгээ эхлүүлэхдээ хүсэлт илгээсэн сервер хаягаар localhost: 8080. GKE-д байршуулсны дараа pods боломжтой зангилаанууд дээр ажиллана. Өгөгдмөл байдлаар, та аль зангилаа дээр подвол дээр ажиллаж байгааг хянах боломжгүй тул та хонхорцог байнгын IP хаяг байхгүй.
    IP хаяг авахын тулд сервер, та pods дээр сүлжээний хийсвэрлэлийг тодорхойлох хэрэгтэй. Ийм л байна Kubernetes үйлчилгээ. Kubernetes үйлчилгээ нь багцын багцад байнгын төгсгөлийн цэгээр хангадаг. Цөөн хэдэн байна үйлчилгээний төрөл. сервер ашигладаг LoadBalancer, энэ нь холбоо барих гадаад IP хаягийг өгдөг сервер кластерын гаднаас.
    Kubernetes нь DNS нэрийг хуваарилдаг суурилуулсан DNS системтэй (жишээлбэл, helloserver.default.cluster.local) үйлчилгээ. Үүний ачаар кластер доторх pods нь кластерын бусад pods-той тогтмол хаягаар холбогддог. DNS нэрийг Cloud Shell эсвэл компьютер гэх мэт кластераас гадуур ашиглах боломжгүй.

Кубернетес илэрдэг

Та програмыг эх сурвалжаас ажиллуулахдаа зайлшгүй тушаалыг ашигласан python3

server.py

Захиалга нь "үүнийг хий" гэсэн үйл үгийг илэрхийлдэг.

Kubernetes ашигладаг тунхаглалын загвар. Энэ нь бид Kubernetes-д яг юу хийхийг хэлэхгүй, харин хүссэн төлөвийг дүрсэлсэн гэсэн үг юм. Жишээлбэл, Кубернетес нь системийн бодит төлөвийг хүссэн төлөвтэй нийцүүлэхийн тулд шаардлагатай бол pod-уудыг эхлүүлж, зогсоодог.

Та манифест эсвэл файлд хүссэн төлөвийг зааж өгнө ЯМЛ. YAML файл нь нэг буюу хэд хэдэн Kubernetes объектын үзүүлэлтүүдийг агуулдаг.

Жишээ нь YAML файлыг агуулж байна сервер и ачаалах. YAML файл бүр нь байршуулах объект болон 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

  • төрөл объектын төрлийг заана.
  • мета өгөгдөл.нэр байршуулах нэрийг зааж өгдөг.
  • Эхний талбар SPEC хүссэн төлөвийн тайлбарыг агуулна.
  • spec.replicas Хүссэн тооны хонхорцог заана.
  • Хэсэг spec.загвар pod загварыг тодорхойлдог. Pod-ийн тодорхойлолтод талбар бий зураг, энэ нь Контейнерийн бүртгэлээс гаргаж авах шаардлагатай зургийн нэрийг зааж өгдөг.

Үйлчилгээг дараахь байдлаар тодорхойлно.

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

  • LoadBalancer: Үйлчлүүлэгчид ачаалал тэнцвэржүүлэгчийн байнгын IP хаягтай, кластерын гаднаас хандах боломжтой IP хаяг руу хүсэлт илгээдэг.
  • зорилтот порт: Таны санаж байгаагаар баг EXPOSE 8080 в Докер файл портуудыг өгөөгүй. Та портыг өгнө үү 8080Ингэснээр та савтай холбоо барьж болно сервер кластераас гадуур. Манай тохиолдолд hellovc.default.cluster.local:80 (богино нэр: hellovc) порттой тохирч байна 8080 Pod IP хаягууд сайн уу сервер.
  • порт: Энэ нь кластер дахь бусад үйлчилгээнүүдийн хүсэлт илгээх портын дугаар юм.

loadgen.yaml

Байршуулах объект loadgen.yaml шиг харагдаж байна server.yaml. Ялгаа нь байршуулах объект нь хэсэг агуулдаг энхтайван. Энэ нь шаардлагатай орчны хувьсагчдыг тодорхойлдог ачаалах програмыг эх сурвалжаас ажиллуулах үед суулгасан.

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

Цаг хугацаа ачаалах талбарын хувьд ирж буй хүсэлтийг хүлээн авахгүй төрөл заасан ClusterIP. Энэ төрөл нь кластер дахь үйлчилгээнүүдэд ашиглах боломжтой байнгын IP хаягийг өгдөг боловч энэ IP хаяг нь гадны үйлчлүүлэгчдэд нээлттэй байдаггүй.

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

GKE-д контейнер байрлуулж байна

1) Жишээ байрладаг лавлах руу оч сервер:

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

2) Нээлттэй server.yaml текст засварлагч дээр.
3) Талбар дахь нэрийг солино зураг өөрийн Docker зургийн нэр рүү.

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

Солих PROJECT_ID таны GCP төслийн ID руу.
4) Хадгалаад хаа server.yaml.
5) YAML файлыг Kubernetes-д байршуулна уу:

kubectl apply -f server.yaml

Амжилттай дууссаны дараа тушаал дараах кодыг гаргадаг.

deployment.apps/helloserver created
service/hellosvc created

6) Хаана байгаа лавлах руу очно уу ачаалах:

cd ../loadgen

7) Нээлттэй loadgen.yaml текст засварлагч дээр.
8) Талбар дахь нэрийг солино зураг өөрийн Docker зургийн нэр рүү.

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

Солих PROJECT_ID таны GCP төслийн ID руу.
9) Хадгалаад хаа loadgen.yaml, текст засварлагчийг хаа.
10) YAML файлыг Kubernetes-д байршуулна уу:

kubectl apply -f loadgen.yaml

Амжилттай дууссаны дараа тушаал дараах кодыг гаргадаг.

deployment.apps/loadgenerator created
service/loadgensvc created

11) Хонхны статусыг шалгана уу:

kubectl get pods

Тушаал нь статусыг харуулна:

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

12) Програмын бүртгэлийг подноос гаргаж авах ачаалах. Солих POD_ID өмнөх хариултаас танигч руу.

kubectl logs loadgenerator-POD_ID

13) Гадаад IP хаягийг авах hellovc:

kubectl get service

Тушаалын хариу иймэрхүү харагдаж байна:

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) Хүсэлт илгээх hellovc: солих ГАДААД_IP гадаад IP хаяг руу hellovc.

curl http://EXTERNAL_IP

Istio-г авч үзье

Танд GKE-д байршуулсан програм байна. ачаалах Kubernetes DNS ашиглаж болно (Hellovc: 80) хүсэлт илгээх серверхаягаар хүсэлт илгээх боломжтой сервер гадаад IP хаягаар. Хэдийгээр Kubernetes олон функцтэй боловч үйлчилгээний талаар зарим мэдээлэл дутуу байна:

  • Үйлчилгээнүүд хэрхэн харилцан үйлчилдэг вэ? Үйлчилгээний хооронд ямар харилцаа холбоо байдаг вэ? Үйлчилгээ хоорондын замын хөдөлгөөний урсгал хэрхэн явагддаг вэ? Та үүнийг мэдэж байна уу ачаалах руу хүсэлт илгээдэг сервер, гэхдээ та програмын талаар юу ч мэдэхгүй байна гэж төсөөлөөд үз дээ. Эдгээр асуултад хариулахын тулд GKE-д ажиллаж байгаа pods-ийн жагсаалтыг харцгаая.
  • Хэмжигдэхүүн. Хэр удаан сервер ирж буй хүсэлтэд хариу өгөх үү? Сервер секундэд хэдэн хүсэлт хүлээн авдаг вэ? Энэ нь алдааны мессеж өгдөг үү?
  • Аюулгүй байдлын мэдээлэл. Замын хөдөлгөөн ачаалах и сервер зүгээр л дамждаг HTTP эсвэл өөр mTLS?

Истио эдгээр бүх асуултад хариулдаг. Үүнийг хийхийн тулд Istio нь хажуугийн прокси байрлуулдаг элч хонхорцог бүрт. Envoy прокси нь програмын контейнер руу орж ирж буй бүх урсгалыг саатуулдаг. Энэ нь тийм гэсэн үг сервер и ачаалах хажуугийн машины прокси элчээр дамжуулан хүлээн авах ба бүх урсгалыг ачаалах к сервер Элч төлөөлөгчөөр дамждаг.

Envoy прокси хоорондын холболтууд нь үйлчилгээний сүлжээг бүрдүүлдэг. Үйлчилгээний торон архитектур нь Kubernetes дээр хяналтын давхаргыг хангадаг.

Istio-д өргөдөл бэлтгэж байна

Envoy прокси нь өөрийн саванд ажилладаг тул Istio-г GKE кластер дээр суулгаж, програмын кодыг бараг өөрчлөхгүйгээр суулгаж болно. Гэхдээ та програмаа Istio удирдахад бэлэн болгохын тулд зарим ажил хийсэн:

  • Бүх чингэлэгт зориулсан үйлчилгээ. Байрлуулалт руу сервер и ачаалах Kubernetes үйлчилгээтэй холбоотой. Тэр ч байтугай ачаалах, ирж буй хүсэлтийг хүлээн авдаггүй, үйлчилгээ байдаг.
  • Үйлчилгээний портууд заавал нэртэй байх ёстой. Хэдийгээр үйлчилгээний портуудыг GKE-д нэргүй үлдээж болох ч Istio танаас зааж өгөхийг шаарддаг портын нэр түүний протоколын дагуу. YAML файлд портыг оруулна уу сервер дуудаж байна HTTPУчир нь сервер протокол ашигладаг HTTP... Хэрэв үйлчилгээ ашигласан gRPC, та портыг нэрлэх болно grpc.
  • Байрлуулалтыг дарцагласан байна. Тиймээс, та нэг үйлчилгээний хувилбаруудын хооронд урсгалыг хуваах гэх мэт Istio-ийн замын хөдөлгөөний удирдлагын функцуудыг ашиглаж болно.

Istio суулгаж байна

Istio-г суулгах хоёр арга бий. Чадах GKE өргөтгөл дээр Isio-г идэвхжүүл буюу Istio-ийн нээлттэй эхийн хувилбарыг суулгана уу кластер дээр. GKE дээрх Istio-ийн тусламжтайгаар та GKE кластерын амьдралын мөчлөгийн туршид Istio суулгац, шинэчлэлтийг хялбархан удирдах боломжтой. Хэрэв та Istio-ийн хамгийн сүүлийн хувилбар эсвэл Istio хяналтын самбарын тохиргоог илүү хянахыг хүсвэл Istio on GKE өргөтгөлийн оронд нээлттэй эхийн хувилбарыг суулгана уу. Арга барилаа шийдэхийн тулд нийтлэлийг уншина уу Надад GKE дээр Istio хэрэгтэй юу?.

Сонголтыг сонгоод, тохирох гарын авлагыг уншаад, кластер дээрээ Istio суулгах зааврыг дагана уу. Хэрэв та шинээр байршуулсан программдаа Istio-г ашиглахыг хүсвэл, хажуугийн машины хэрэгжилтийг идэвхжүүлэх нэрийн орон зайд зориулагдсан Анхдагч байна.

Цэвэрлэгээ

Энэ зааварт ашигласан нөөцийн төлбөрийг өөрийн Google Cloud Platform акаунтаас авахгүйн тулд Istio-г суулгаж, жишээ программ дээр тоглуулсны дараа контейнер кластерыг устгана уу. Энэ нь тооцоолох тохиолдлууд, дискүүд болон сүлжээний нөөцүүд гэх мэт кластерийн бүх нөөцийг устгах болно.

Дараа нь юу юм бэ?

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх