Встановлення Primary-Remote

Слідуйте цьому посібнику, щоб встановити панель управління Istio в cluster1 (primary кластер) та налаштувати cluster2 (remote кластер) для використання панелі управління в cluster1. Обидва кластери знаходяться в мережі network1, що означає пряму взаємодію між podʼами в обох кластерах.

Перед тим, як продовжити, обовʼязково виконайте кроки, наведені в розділі перш ніж почати.

У цій конфігурації кластер cluster1 буде спостерігати за API-серверами в обох кластерах для моніторингу точок доступу. Таким чином, панель управління зможе забезпечити виявлення сервісів для робочих навантажень в обох кластерах.

Сервісні навантаження спілкуються безпосередньо (pod-pod) через межі кластерів.

Сервіси у cluster2 отримають доступ до панелі управління в cluster1 через спеціальний шлюз для трафіку east-west.

Primary та remote кластери в одній мережі
Primary та remote кластери в одній мережі

Налаштування cluster1 як primary

Створіть конфігурацію istioctl для cluster1:

Встановіть Istio як primary у cluster1 за допомогою istioctl та API IstioOperator.

$ 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).

Встановлення шлюзу east-west у cluster1

Встановіть шлюз в cluster1, призначений для трафіку east-west. Стандартно цей шлюз буде публічним в Інтернеті. Операційні розгортання можуть вимагати додаткових обмежень доступу (наприклад, через правила брандмауера), щоб запобігти зовнішнім атакам. Зверніться до свого постачальника хмарних послуг, щоб дізнатися, які варіанти доступні.

Zip
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
    --network network1 | \
    istioctl --context="${CTX_CLUSTER1}" install -y -f -

Дочекайтеся призначення зовнішньої IP-адреси для шлюзу east-west:

$ 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 могли отримати доступ до виявлення сервісів:

Zip
$ 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

Збережіть адресу шлюзу east-west у 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 і cluster2 за допомогою того ж механізму, за допомогою якого ви встановлювали Istio (istioctl або Helm).

Видаліть 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}"
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!