Установка мультисетевой сетки с primary-remote топологией

Установите Istio в мультисетевой топологии primary-remote на двух кластерах.

NOTE

В этой процедуре CLUSTER1 — это Восточный кластер, а CLUSTER2Западный кластер. Восточный кластер является primary, а Западный — remote кластером.

Вы можете адаптировать эти инструкции для сетки, охватывающей более двух кластеров.

Топология

Сервисные рабочие нагрузки, расположенные в разных кластерах, взаимодействуют косвенно через выделенные шлюзы для трафика east-west. Шлюз в каждом кластере должен быть доступен из другого кластера.

Сервисы в cluster2 будут обращаться к контрольной плоскости в cluster1 через тот же шлюз east-west.

Топология Primary-Remote Multi-Network

Требования

Содержание

Процедура

Создайте переменную окружения ISTIO_VERSION, определяющую версию Istio для установки

export ISTIO_VERSION=1.26.3

Установите Istio в Восточном кластере

  1. Установите сеть по умолчанию для Восточного кластера, выполнив следующую команду:

    kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
  2. Создайте ресурс Istio в Восточном кластере, выполнив следующую команду:

    Сохраните следующий ресурс Istio в файл istio-external.yaml:

    istio-external.yaml
    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      version: v${ISTIO_VERSION}
      namespace: istio-system
      values:
        global:
          meshID: mesh1
          multiCluster:
            clusterName: cluster1
          network: network1
          externalIstiod: true
    1. Это позволяет контрольной плоскости, установленной в Восточном кластере, выступать в роли внешней контрольной плоскости для других удалённых кластеров.

    Примените ресурс Istio с помощью kubectl:

    envsubst < istio-external.yaml | kubectl --context "${CTX_CLUSTER1}" apply -f -
  3. Дождитесь, пока контрольная плоскость не вернёт состояние "Ready", выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER1}" wait --for condition=Ready istio/default --timeout=3m
  4. Создайте шлюз East-West в Восточном кластере, выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER1}" apply -f https://raw.githubusercontent.com/alauda-mesh/sail-operator/main/docs/deployment-models/resources/east-west-gateway-net1.yaml
  5. Откройте доступ к контрольной плоскости через шлюз, чтобы сервисы в Западном кластере могли получить к ней доступ, выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER1}" apply -n istio-system -f https://raw.githubusercontent.com/alauda-mesh/sail-operator/main/docs/deployment-models/resources/expose-istiod.yaml
  6. Откройте доступ к сервисам приложений через шлюз, выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER1}" apply -n istio-system -f https://raw.githubusercontent.com/alauda-mesh/sail-operator/main/docs/deployment-models/resources/expose-services.yaml

Установите Istio в Западном кластере

  1. Сохраните IP-адрес шлюза East-West, работающего в Восточном кластере, выполнив следующую команду:

    export DISCOVERY_ADDRESS=$(kubectl --context="${CTX_CLUSTER1}" \
       -n istio-system get svc istio-eastwestgateway \
       -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. Создайте ресурс Istio в Западном кластере, выполнив следующую команду:

    cat <<EOF | kubectl --context "${CTX_CLUSTER2}" apply -f -
    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      version: v${ISTIO_VERSION}
      namespace: istio-system
      profile: remote
      values:
        istiodRemote:
          injectionPath: /inject/cluster/cluster2/net/network2
        global:
          remotePilotAddress: ${DISCOVERY_ADDRESS}
    EOF
  3. Добавьте аннотацию к пространству имён istio-system в Западном кластере, чтобы оно управлялось контрольной плоскостью в Восточном кластере, выполнив следующую команду:

    kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system topology.istio.io/controlPlaneClusters=cluster1
  4. Установите сеть по умолчанию для Западного кластера, выполнив следующую команду:

    kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
  5. Установите remote secret в Восточном кластере, который предоставляет доступ к API серверу в Западном кластере, выполнив следующую команду:

    istioctl create-remote-secret \
      --context="${CTX_CLUSTER2}" \
      --name=cluster2 | \
      kubectl --context="${CTX_CLUSTER1}" apply -f -
  6. Дождитесь, пока ресурс Istio не вернёт состояние "Ready", выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER2}" wait --for condition=Ready istio/default --timeout=3m
  7. Создайте шлюз East-West в Западном кластере, выполнив следующую команду:

    kubectl --context "${CTX_CLUSTER2}" apply -f https://raw.githubusercontent.com/alauda-mesh/sail-operator/main/docs/deployment-models/resources/east-west-gateway-net2.yaml
    NOTE

    Поскольку Западный кластер установлен с профилем remote, открытие доступа к сервисам приложений в Восточном кластере открывает их на шлюзах East-West обоих кластеров.