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

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

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

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

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

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

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

Налаштування 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, призначений для трафіку схід-захід. Стандартно цей шлюз буде публічним в Інтернеті. Операційні розгортання можуть вимагати додаткових обмежень доступу (наприклад, через правила брандмауера), щоб запобігти зовнішнім атакам. Зверніться до свого постачальника хмарних послуг, щоб дізнатися, які варіанти доступні.

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

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

Збережіть адресу шлюзу схід-захід у 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 на основний та віддалений кластери!

Наступні кроки

Тепер ви можете перевірити встановлення.

Очищення

  1. Видалення Istio в cluster1:

    $ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge
    $ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
  2. Видалення Istio в cluster2:

    $ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge
    $ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

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