Istio үчүн арыз даярдоо

Istio үчүн арыз даярдоо

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

Бул кадам-кадам нускама, анда биз мисал аркылуу бул технологиялар жөнүндө негизги түшүнүк берүү үчүн баштапкы коддон GKE контейнерине чейинки бүт процессти басып өтөбүз. Сиз ошондой эле Istio бул технологиялардын күчүн кантип колдонорун көрөсүз. Бул сиз контейнерлер, Kubernetes, тейлөө торлору же 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 колдоно аласыз g1-кичинекей Google Compute Engine Debian негизделген Linux, же Linux же macOS компьютери менен.

А варианты: Cloud Shell колдонуу

Cloud Shell колдонуунун артыкчылыктары:

  • Python 2 жана Python 3 өнүктүрүү чөйрөлөрү (анын ичинде virtualenv) толугу менен конфигурацияланган.
  • Command Line Tools gcloud, ютуб, Мурунку и kubectl, биз колдоно турган мурунтан эле орнотулган.
  • Сиз тандоо үчүн бир нече бар текст редакторлору:
    1. Код редактору, Cloud Shell терезесинин жогору жагындагы түзөтүү сөлөкөтү менен ачылат.
    2. Cloud Shellдеги буйрук сабынан ачылган Emacs, Vim же Nano.

Колдонуу Cloud Shell:

  1. GCP консолуна өтүңүз.
  2. Баскычты чыкылдатыңыз Cloud Shell иштетиңиз GCP консолунун терезесинин жогору жагындагы (Cloud Shellди иштетүү).

Istio үчүн арыз даярдоо

Төмөнкү бөлүгүндө GCP консолу Буйрук сабы менен Cloud Shell сессиясы жаңы терезеде ачылат.

Istio үчүн арыз даярдоо

В варианты: Буйрук сабынын куралдарын жергиликтүү колдонуу

Эгер сиз Linux же macOS менен иштеген компьютерде иштей турган болсоңуз, анда төмөнкү компоненттерди конфигурациялап, орнотуу керек болот:

  1. Ыңгайлаштыруу Python 3 жана Python 2 иштеп чыгуу чөйрөсү.

  2. Cloud SDK орнотуңуз буйрук сабы куралы менен gcloud.

  3. орнотуу kubectl - менен иштөө үчүн буйрук сабы куралы Kubernetes.

    gcloud components install kubectl

  4. орнотуу Docker Community Edition (CE). Сиз буйрук сабынын куралын колдоносуз ютубүлгү колдонмо үчүн контейнер сүрөттөрдү түзүү.

  5. Куралды орнотуу Git версиясын башкарууGitHub үлгүсүндөгү тиркемени алуу үчүн.

Үлгү кодун жүктөп алыңыз

  1. Булак кодун жүктөп алыңыз helloserver:

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

  2. Мисал код каталогуна өтүңүз:

    cd istio-samples/sample-apps/helloserver

Бир нече кызматтары бар тиркемени изилдөө

Тиркеме үлгүсү Python тилинде жазылган жана колдонуу менен өз ара аракеттенген эки компоненттен турат REST:

  • Server: бир акыркы чекити менен жөнөкөй сервер GET, /, ал консолго "салам дүйнөнү" басып чыгарат.
  • loadgen: трафикти жөнөтүүчү скрипт Server, секундасына суроо-талаптардын конфигурациялануучу саны менен.

Istio үчүн арыз даярдоо

Булак кодунан колдонмону иштетүү

Үлгү тиркемени изилдөө үчүн аны Cloud Shellде же компьютериңизде иштетиңиз.
1) Каталогдо istio-samples/sample-apps/helloserver чуркоо Server:

python3 server/server.py

сен башта Server төмөнкүлөр көрсөтүлөт:

INFO:root:Starting server...

2) Сурамдарды жөнөтүү үчүн башка терминал терезесин ачыңыз Server. Эгер сиз Cloud Shell колдонуп жатсаңыз, башка сессияны ачуу үчүн кошуу сөлөкөтүн чыкылдатыңыз.
3) суроо-талап жөнөтүү Server:

curl http://localhost:8080

сервер жооптору:

Hello World!

4) Үлгү кодду жүктөп алган каталогдон камтылган каталогго өтүңүз loadgen:

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

5) Төмөнкү чөйрө өзгөрмөлөрүн түзүңүз:

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

6) чуркоо virtualenv:

virtualenv --python python3 env

7) Виртуалдык чөйрөнү активдештирүү:

source env/bin/activate

8) талаптарды коюу loadgen:

pip3 install -r requirements.txt

9) чуркоо loadgen:

python3 loadgen.py

сен башта loadgen төмөнкү билдирүү сыяктуу нерсени көрсөтөт:

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

Башка терминал терезесинде Server консолуна төмөнкү билдирүүлөрдү чыгарат:

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 виртуалдык машинасы). Ошондуктан колдоно аласыз көрүү .xrfсуроо-талаптарды жөнөтүү Server.
10) Токтотуу loadgen и Server, киргизиңиз Ctrl-c ар бир терминал терезесинде.
11) Терминал терезесинде loadgen виртуалдык чөйрөнү өчүрүү:

deactivate

Колдонмону контейнерлерге таңгактоо

Колдонмону GKEде иштетүү үчүн, колдонмонун үлгүсүн топтошуңуз керек - Server и loadgen - in контейнерлер. Контейнер - бул тиркемени чөйрөсүнөн бөлүп алуу үчүн пакеттөө жолу.

Колдонмону контейнерге пакеттөө үчүн сизге керек докер файлы. докер файлы бул колдонмонун баштапкы кодун жана анын көз карандылыгын түзүү үчүн буйруктарды аныктаган текст файлы Докер сүрөтү. Курулгандан кийин, сиз сүрөттү Docker Hub же сыяктуу контейнердик реестрге жүктөйсүз Контейнер реестри.

Мисал мурунтан эле бар докер файлы үчүн Server и loadgen сүрөттөрдү чогултуу үчүн бардык керектүү буйруктар менен. Төмөндө - докер файлы үчүн 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" ]

  • команда FROM python:3-slim база катары Докерге эң акыркысын колдонууну айтат Python 3 сүрөтү база катары.
  • команда КӨЧҮРҮҮ. . баштапкы файлдарды учурдагы иштөө каталогуна көчүрөт (биздин учурда гана server.py) контейнердин файл тутумуна.
  • КИРҮҮ ПУНКТ контейнерди баштоо үчүн колдонулган буйрукту аныктайт. Биздин учурда, бул буйрук сиз чуркап жүргөн буйрук менен дээрлик бирдей server.py баштапкы коддон.
  • команда АЧУУ экенин көрсөтүп турат Server порт аркылуу маалыматтарды күтөт 8080. Бул команда эмес портторун камсыз кылат. Бул портту ачуу үчүн зарыл болгон документтердин бир түрү 8080 контейнерди баштаганда.

Колдонмоңузду контейнерге салууга даярдалууда

1) Төмөнкү чөйрө өзгөрмөлөрүн орнотуңуз. алмаштыруу PROJECT_ID GCP долбоордун идентификаторуңузга.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Маанилерди колдонуу PROJECT_ID и GCR_REPO Докердин сүрөтүн курганыңызда белгилейсиз жана аны жеке Контейнер Реестрине түртүңүз.

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. Мисал жайгашкан каталогго өтүңүз Server:

    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) Мисал жайгашкан каталогго өтүңүз loadgen:

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 кластердик башкаруу системасына негизделген. 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) буйрук сабынын куралында эсептик дайындарды бериңиз kubectlкластерди башкаруу үчүн аны колдонуу үчүн:

gcloud container clusters get-credentials istioready

3) Эми сиз Kubernetes менен байланыша аласыз kubectl. Мисалы, төмөнкү буйрук түйүндөрдүн абалын биле алат:

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 - бул бөлүнгүс бирдик. Под бир же бир нече контейнерди камтыйт. Сиз сервер контейнерлерин жана loadgen өзүнчө кабыктарда. Подгондо бир нече контейнер болгондо (мисалы, тиркеме сервери жана прокси сервер), контейнерлер бирдиктүү объект катары башкарылат жана подкаст ресурстарын бөлүшөт.
  • Жайгаштыруу. Kubernetesте жайгаштыруу - бул окшош поддондордун жыйындысы болгон объект. Жайгаштыруу кластердик түйүндөр боюнча бөлүштүрүлгөн бир нече репликаларды ишке киргизет. Жайгаштыруу иштебей калган же жооп бербеген подкасттарды автоматтык түрдө алмаштырат.
  • Kubernetes кызматы. GKEде колдонмо кодун иштетип жатканда, ортосундагы байланыш loadgen и Server. Cloud Shell виртуалдык машинасында же иш тактасында кызматтарды баштаганда, сурамдарды жөнөттүңүз Server адрес боюнча көрүү .xrf: 8080. GKEге орнотулгандан кийин, поддондор жеткиликтүү түйүндөрдө аткарылат. Демейки боюнча, сиз подколь кайсы түйүндө иштеп жатканын көзөмөлдөй албайсыз, андыктан сиз кабыктар туруктуу IP даректери жок.
    үчүн IP дарегин алуу үчүн Server, сиз подкасттардын үстүндө тармак абстракциясын аныкташыңыз керек. Мына ушундай Kubernetes кызматы. Kubernetes кызматы поддондордун топтому үчүн туруктуу акыркы чекит менен камсыз кылат. Бир нече бар кызматтардын түрлөрү. Server колдонуу LoadBalancer, бул байланыш үчүн тышкы IP дарегин камсыз кылат Server кластердин сыртынан.
    Kubernetes ошондой эле DNS аталыштарын дайындаган камтылган DNS тутумуна ээ (мисалы, helloserver.default.cluster.local) кызматтар. Ушунун аркасында кластердин ичиндеги поддондор туруктуу дарек боюнча кластердеги башка поддондор менен байланышат. DNS аталышын Cloud Shell же компьютер сыяктуу кластерден тышкары колдонууга болбойт.

Кубернетес көрсөтөт

Колдонмону булактан иштеткенде, сиз императивдик буйрукту колдондуңуз python3

server.py

Императив этишти билдирет: "мындай кыл".

Kubernetes колдонот декларативдик модель. Бул биз Кубернетеске эмне кылууну так айтпайбыз, тескерисинче, каалаган абалды сүрөттөп жатабыз дегенди билдирет. Мисалы, Кубернетес тутумдун иш жүзүндөгү абалы каалаган абалга дал келүүсүн камсыз кылуу үчүн керек болсо, поддондорду баштайт жана токтотот.

Сиз каалаган абалды манифесттерде же файлдарда көрсөтөсүз YAML. YAML файлы бир же бир нече Kubernetes объектисинин спецификацияларын камтыйт.

Мисал YAML файлын камтыйт Server и loadgen. Ар бир 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

  • түр объекттин түрүн көрсөтөт.
  • metadata.name жайгаштыруу атын аныктайт.
  • Биринчи талаа Спектор каалаган абалдын сүрөттөлүшүн камтыйт.
  • spec.replicas кашыктардын каалаган санын көрсөтөт.
  • бөлүм spec.template pod шаблонду аныктайт. Под спецификациясында талаа бар сүрөт, ал Контейнер реестринен алынышы керек болгон сүрөттүн атын аныктайт.

Кызмат төмөнкүдөй аныкталат:

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

  • LoadBalancer: Кардарлар туруктуу IP дареги бар жана кластердин сыртынан жеткиликтүү болгон жүк балансынын IP дарегине суроо-талаптарды жөнөтүшөт.
  • targetPort: эсиңизде болгондой, команда EXPOSE 8080 в докер файлы портторду берген эмес. Сиз портту бересиз 8080контейнер менен байланыша аласыз Server кластердин сыртында. Биздин учурда hellovc.default.cluster.local:80 (кыска аты: hellovc) портуна туура келет 8080 Pod IP даректери helloserver.
  • порт: Бул кластердеги башка кызматтар сурамдарды жөнөтө турган порт номери.

loadgen.yaml

Жайгаштыруу объектиси loadgen.yaml га окшош server.yaml. Айырмачылык жайгаштыруу объектисинде бөлүм бар жөнөтүү. Ал керектүү чөйрө өзгөрмөлөрүн аныктайт loadgen жана колдонмону булактан иштетип жатканда орнотконуңуз.

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

убакыт loadgen келген суроо-талаптарды кабыл албайт, талаа үчүн түрү белгисиз 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) Мисал жайгашкан каталогго өтүңүз Server:

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 долбоордун идентификаторуңузга.
4) Сактоо жана жабуу server.yaml.
5) YAML файлын Kubernetesке жайгаштырыңыз:

kubectl apply -f server.yaml

Ийгиликтүү аяктагандан кийин, буйрук төмөнкү кодду чыгарат:

deployment.apps/helloserver created
service/hellosvc created

6) Каяктагы каталогго өтүңүз loadgen:

cd ../loadgen

7) Ачык loadgen.yaml текст редакторунда.
8) Талаадагы атын алмаштырыңыз сүрөт Docker сүрөтүңүздүн атына.

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

Алмаштыруу PROJECT_ID GCP долбоордун идентификаторуңузга.
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) Подгондон өтүнмө журналдарын чыгарып алыңыз loadgen. алмаштыруу 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: алмаштыруу EXTERNAL_IP тышкы IP дарекке hellovc.

curl http://EXTERNAL_IP

Келгиле, Истиоду кабыл алалы

GKEге мурунтан эле орнотулган колдонмоңуз бар. loadgen Kubernetes DNS колдоно алат (hellovc:80) суроо-талаптарды жөнөтүү Serverжана суроо-талаптарды жөнөтө аласыз Server тышкы IP дареги боюнча. Kubernetes көптөгөн өзгөчөлүктөргө ээ болсо да, кызматтар жөнүндө кээ бир маалыматтар жетишпейт:

  • Кызматтар кантип өз ара аракеттенишет? Кызматтардын ортосунда кандай байланыштар бар? Кызматтардын ортосундагы трафик кандайча жүрөт? Сиз ошону билесизби loadgen суроо-талаптарды жөнөтөт Server, бирок сиз колдонмо жөнүндө эч нерсе билбейсиз деп элестетиңиз. Бул суроолорго жооп берүү үчүн, келгиле, GKEде иштеп жаткан подкасттардын тизмесин карап көрөлү.
  • Метрикалар. Канча убакыт Server келген суроо-талапка жооп берет? Сервер секундасына канча сурам кабыл алат? Бул ката билдирүүлөрдү берет?
  • Коопсуздук маалыматы. ортосундагы жол кыймылы loadgen и Server жөн эле өтүп кетет HTTP же тарабынан mTLS?

Бул суроолордун баарына Istio жооп берет. Бул үчүн, Istio каптал проксисин жайгаштырат өкүлү ар бир уячада. Элчи прокси колдонмо контейнерлерине бардык кирүүчү жана чыгуучу трафикти кармайт. Бул дегенди билдирет Server и loadgen каптал прокси Элчиси аркылуу жана бардык трафикти алуу loadgen к Server Элчи прокси аркылуу өтөт.

Элчи проксилеринин ортосундагы байланыштар кызматтык торду түзөт. Кызматтын тор архитектурасы Kubernetes үстүнөн башкаруу катмарын камсыз кылат.

Istio үчүн арыз даярдоо

Envoy проксилери өз контейнерлеринде иштегендиктен, Istio GKE кластеринин үстүнө орнотулат, колдонмонун кодуна дээрлик эч кандай өзгөртүүлөр жок. Бирок сиз колдонмоңузду Istio тарабынан башкарууга даярдоо үчүн бир нече иштерди жасадыңыз:

  • Бардык контейнерлер үчүн кызматтар. Жайгаштырууларга Server и loadgen Kubernetes кызматына байланган. Ал тургай loadgen, келген суроо-талаптарды кабыл албаган, кызмат бар.
  • Кызматтардагы порттордун аталышы болушу керек. Кызмат порттору GKEде атын атабай калтырса да, Istio сизден көрсөтүүнү талап кылат порт аты анын протоколуна ылайык. YAML файлында порт Server Бул аталган 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 орнотуп, үлгү колдонмо менен ойногондон кийин контейнер кластерин жок кылыңыз. Бул эсептөө инстанциялары, дисктер жана тармак ресурстары сыяктуу кластердин бардык ресурстарын жок кылат.

Кийинкиси эмне?

Source: www.habr.com

Комментарий кошуу