Перевірка встановлення ambient
Дотримуйтесь цього посібника, щоб переконатися, що ваша мультикластерна установка Istio працює належним чином.
Перед продовженням обовʼязково виконайте кроки в розділі Як розпочати, а також виберіть і дотримуйтесь одного з посібників з установки мультикластерів.
У цьому посібнику ми перевіримо, чи функціонує мультикластерна установка, розгорнувши застосунок HelloWorld
v1
у cluster1
і v2
у cluster2
. Після отримання запиту HelloWorld
включить свою версію у відповідь, коли ми викликаємо шлях /hello
.
Ми також розгорнемо контейнер curl
у обох кластерах. Ми будемо використовувати ці поди як джерело запитів до сервісу HelloWorld
, імітуючи трафік у межах мережі. Нарешті, після генерації трафіку ми спостерігатимемо, який кластер отримав запити.
Перевірка мультикластера
Щоб підтвердити, що Istiod тепер може спілкуватися з панеллю управління Kubernetes віддаленого кластера.
$ istioctl remote-clusters --context="${CTX_CLUSTER1}"
NAME SECRET STATUS ISTIOD
cluster1 synced istiod-7b74b769db-kb4kj
cluster2 istio-system/istio-remote-secret-cluster2 synced istiod-7b74b769db-kb4kj
Усі кластери повинні вказувати свій статус як synced
. Якщо кластер показується зі статусом timeout
, це означає, що Istiod у основному кластері не може звʼязатися з віддаленим кластером. Дивіться журнали Istiod для отримання детальних повідомлень про помилки.
Примітка: якщо ви бачите проблеми з timeout
і між Istiod у основному кластері та панеллю управління Kubernetes у віддаленому кластері є проміжний хост (такий як Rancher auth proxy), можливо, вам потрібно буде оновити поле certificate-authority-data
конфігурації kubeconfig, яку генерує istioctl create-remote-secret
, щоб відповідати сертифікату, що використовується проміжним хостом.
Розгортання HelloWorld
Service
Щоб зробити сервіс HelloWorld
доступним для виклику з будь-якого кластера, пошук DNS повинен бути успішним у кожному кластері (детальніше див. моделі розгортання). Ми вирішимо цю проблему, розгорнувши сервіс HelloWorld
у кожному кластері мережі.
Щоб почати, створіть простір імен sample
у кожному кластері:
$ kubectl create --context="${CTX_CLUSTER1}" namespace sample
$ kubectl create --context="${CTX_CLUSTER2}" namespace sample
Створіть простір імен sample
у сервісній мережі:
$ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
istio.io/dataplane-mode=ambient
$ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
istio.io/dataplane-mode=ambient
Створіть сервіс HelloWorld
в обох кластерах:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
Розгортання HelloWorld
V1
Розгорніть застосунок helloworld-v1
у cluster1
:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v1 -n sample
Підтвердіть статус пода helloworld-v1
:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v1-86f77cd7bd-cpxhv 1/1 Running 0 40s
Дочекайтеся, поки статус helloworld-v1
стане Running
.
Тепер позначте сервіс helloworld у cluster1
як глобальний, щоб до нього можна було отримати доступ з інших кластерів у мережі:
$ kubectl label --context="${CTX_CLUSTER1}" svc helloworld -n sample \
istio.io/global="true"
Розгортання HelloWorld
V2
Розгорніть застосунок helloworld-v2
у cluster2
:
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v2 -n sample
Підтвердіть статус пода helloworld-v2
:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v2-758dd55874-6x4t8 1/1 Running 0 40s
Дочекайтеся, поки статус helloworld-v2
стане Running
.
Тепер позначте сервіс helloworld у cluster2
як глобальний, щоб до нього можна було отримати доступ з інших кластерів у мережі:
$ kubectl label --context="${CTX_CLUSTER2}" svc helloworld -n sample \
istio.io/global="true"
Розгортання curl
Розгорніть застосунок curl
у обох кластерах:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/curl/curl.yaml@ -n sample
Підтвердіть статус пода curl
у cluster1
:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-n6bzf 1/1 Running 0 5s
Дочекайтеся, поки статус пода curl
стане Running
.
Підтвердіть статус пода curl
у cluster2
:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-dzl9j 1/1 Running 0 5s
Дочекайтеся, поки статус пода curl
стане Running
.
Перевірка міжкластерного трафіку
Щоб перевірити, чи працює балансування навантаження між кластерами, кілька разів викликайте сервіс HelloWorld
, використовуючи под curl
. Щоб забезпечити навантаження балансування, викликайте сервіс HelloWorld
з усіх кластерів у вашому розгортанні.
Надішліть один запит з пода curl
на cluster1
до сервісу HelloWorld
:
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
Повторіть запит кілька разів та перевірте, що версія HelloWorld
повинна змінюватися між v1
і v2
, що свідчить про те, що використовуються точки доступу в обох кластерах:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
Тепер повторіть цей процес з подом curl
у cluster2
:
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
Повторіть цей запит кілька разів та перевірте, що версія HelloWorld
повинна змінюватися між v1
і v2
:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
Вітаємо! Ви успішно встановили та перевірили Istio на кількох кластерах!