安装主-远程多网络网格

在两个集群上以主-远程多网络拓扑安装 Istio。

NOTE

在本操作步骤中,CLUSTER1East 集群,CLUSTER2West 集群。East 集群为主集群,West 集群为远程集群。

您可以根据需要调整这些说明,以适用于跨越两个以上集群的网格。

拓扑

跨集群边界的服务工作负载通过专用的东西向网关间接通信。 每个集群中的网关必须能够被另一个集群访问。

cluster2 中的服务将通过相同的东西向网关访问 cluster1 中的控制平面。

主-远程多网络拓扑

先决条件

  • 您已在组成网格的所有集群上安装了 Alauda Container Platform Networking for Multus 插件。
  • 您已在组成网格的所有集群上安装了 Alauda Service Mesh v2 Operator。
  • 您已完成为多集群网格创建证书
  • 您已完成将证书应用于多网络多集群拓扑
  • 您已在本地安装了 istioctl,以便运行这些操作步骤。

目录

操作步骤

创建定义要安装的 Istio 版本的 ISTIO_VERSION 环境变量

export ISTIO_VERSION=1.26.3

East 集群上安装 Istio

  1. 通过运行以下命令设置 East 集群的默认网络:

    kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
  2. 通过运行以下命令在 East 集群上创建一个 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. 这使得安装在 East 集群上的控制平面可以作为其他远程集群的外部控制平面。

    使用 kubectl 应用该 Istio 资源:

    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 集群上创建东西向网关:

    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. 通过网关暴露控制平面,使 West 集群中的服务能够访问控制平面,运行以下命令:

    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

West 集群上安装 Istio

  1. 通过运行以下命令保存运行在 East 集群的东西向网关的 IP 地址:

    export DISCOVERY_ADDRESS=$(kubectl --context="${CTX_CLUSTER1}" \
       -n istio-system get svc istio-eastwestgateway \
       -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. 通过运行以下命令在 West 集群上创建一个 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. 通过运行以下命令为 West 集群中的 istio-system 命名空间添加注解,使其由 East 集群的控制平面管理:

    kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system topology.istio.io/controlPlaneClusters=cluster1
  4. 通过运行以下命令设置 West 集群的默认网络:

    kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
  5. 通过运行以下命令在 East 集群上安装一个远程 secret,以便访问 West 集群的 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. 通过运行以下命令在 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

    由于 West 集群安装的是远程配置文件,在 East 集群上暴露应用服务会使其在两个集群的东西向网关上均被暴露。