Встановлення Primary-Remote
Слідуйте цьому посібнику, щоб встановити панель управління Istio в cluster1
(primary кластер) та налаштувати cluster2
(remote кластер) для використання панелі управління в cluster1
. Обидва кластери знаходяться в мережі network1
, що означає пряму взаємодію між podʼами в обох кластерах.
Перед тим, як продовжити, обовʼязково виконайте кроки, наведені в розділі перш ніж почати.
У цій конфігурації кластер cluster1
буде спостерігати за API-серверами в обох кластерах для моніторингу точок доступу. Таким чином, панель управління зможе забезпечити виявлення сервісів для робочих навантажень в обох кластерах.
Сервісні навантаження спілкуються безпосередньо (pod-pod) через межі кластерів.
Сервіси у cluster2
отримають доступ до панелі управління в cluster1
через спеціальний шлюз для трафіку схід-захід.
Налаштування cluster1
як primary
Створіть конфігурацію Istio для cluster1
:
$ cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
externalIstiod: true
EOF
Застосуйте конфігурацію до cluster1
:
$ istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
Зверніть увагу, що values.global.externalIstiod
встановлено на true
. Це дозволяє панелі управління, встановленій у cluster1
, також виконувати роль зовнішньої панелі управління для інших віддалених кластерів. Коли цю функцію увімкнено, istiod
намагатиметься отримати блокування лідерства і, відповідно, керувати відповідно анотованими віддаленими кластерами, які будуть до нього приєднані (в цьому випадку, cluster2
).
Встановлення шлюзу схід-захід у cluster1
Встановіть шлюз в cluster1
, призначений для трафіку схід-захід. Стандартно цей шлюз буде публічним в Інтернеті. Операційні розгортання можуть вимагати додаткових обмежень доступу (наприклад, через правила брандмауера), щоб запобігти зовнішнім атакам. Зверніться до свого постачальника хмарних послуг, щоб дізнатися, які варіанти доступні.
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
--network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
Дочекайтеся призначення зовнішньої IP-адреси для шлюзу схід-захід:
$ kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.80.6.124 34.75.71.237 ... 51s
Експонування панелі управління в cluster1
Перед тим як встановлювати cluster2
, потрібно спочатку експонувати панель управління в cluster1
, щоб сервіси в cluster2
могли отримати доступ до виявлення сервісів:
$ kubectl apply --context="${CTX_CLUSTER1}" -n istio-system -f \
@samples/multicluster/expose-istiod.yaml@
Встановлення панелі управління для cluster2
Необхідно визначити кластер зовнішньої панелі управління, який буде керувати cluster2
, додавши анотацію до простору імен istio-system
:
$ kubectl --context="${CTX_CLUSTER2}" create namespace istio-system
$ kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system topology.istio.io/controlPlaneClusters=cluster1
Встановлення анотації простору імен topology.istio.io/controlPlaneClusters
в cluster1
інструктує istiod
, що працює в тому ж просторі імен (istio-system
в цьому випадку) у cluster1
, керувати cluster2
, коли він буде підключений як віддалений кластер.
Налаштування cluster2
як remote
Збережіть адресу шлюзу схід-захід у cluster1
:
$ export DISCOVERY_ADDRESS=$(kubectl \
--context="${CTX_CLUSTER1}" \
-n istio-system get svc istio-eastwestgateway \
-o jsonpath='{.status.loadBalancer.ingress[0].ip}')
Тепер створіть конфігурацію для віддаленого cluster2
:
$ cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: remote
values:
istiodRemote:
injectionPath: /inject/cluster/cluster2/net/network1
global:
remotePilotAddress: ${DISCOVERY_ADDRESS}
EOF
Застосуйте конфігурацію до cluster2
:
$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
Приєднання cluster2
як remote кластера до cluster1
Щоб приєднати віддалений кластер до його панелі управління, ми надаємо панелі управління в cluster1
доступ до API-сервера в cluster2
. Це забезпечить наступне:
Дозволяє панелі управління автентифікувати запити на підключення від робочих навантажень, що працюють у
cluster2
. Без доступу до API-сервера панель управління відхилить запити.Дозволяє виявлення точок доступу сервісів, що працюють у
cluster2
.
Оскільки це було включено в анотацію простору імен topology.istio.io/controlPlaneClusters
, панель управління в cluster1
також:
Застосує сертифікати до вебхуків в
cluster2
.Запустить контролер простору імен, який записує configmap у просторах імен в
cluster2
.
Щоб надати доступ до API-сервера в cluster2
, ми створюємо віддалений секрет і застосовуємо його до cluster1
:
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
Вітаємо! Ви успішно встановили сервісну мережу Istio на основний та віддалений кластери!
Наступні кроки
Тепер ви можете перевірити встановлення.
Очищення
Видалення Istio в
cluster1
:$ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
Видалення Istio в
cluster2
:$ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"