在 Google Cloud 外部设置多集群网格

本指南介绍如何为以下平台设置多集群网格:

  • GKE on VMware
  • Google Distributed Cloud Virtual for Bare Metal
  • GKE on AWS
  • Amazon EKS

本指南介绍如何设置两个集群,但您可以扩展此过程,将任意数量的集群加入网格中。

准备工作

本指南假设您使用 asmcli install 安装了 Anthos Service Mesh。您需要 asmcliasmcli 下载到您运行 asmcli install 时在 --output_dir 中指定的目录的配置软件包。如果需要设置,请按照使用入门中的步骤完成以下任务:

您需要访问要在网格中设置的所有集群的 kubeconfig 文件。

设置环境变量和占位符

安装东-西网关时,您需要以下环境变量。

  1. 为项目编号创建环境变量。在以下命令中,将 FLEET_PROJECT_ID 替换为舰队宿主项目的项目 ID。

    export PROJECT_NUMBER=$(gcloud projects describe FLEET_PROJECT_ID --format="value(projectNumber)")
    
  2. 为网格标识符创建环境变量。

    export MESH_ID="proj-${PROJECT_NUMBER}"
    
  3. 按照 asmcli 要求的格式,为集群名称创建环境变量:

    export CLUSTER_1="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_1"
    export CLUSTER_2="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_2"
    

安装东-西网关

在以下命令中:

  • CLUSTER_NAME_1CLUSTER_NAME_2 替换为您集群的名称。

  • PATH_TO_KUBECONFIG_1PATH_TO_KUBECONFIG_2 替换为您集群的 kubeconfig 文件。

Mesh CA

  1. 在 cluster1 中安装专用于到 $CLUSTER_2东-西流量的网关。默认情况下,此网关在互联网上为公开。生产系统可能需要额外的访问限制(例如防火墙规则),以防止外部攻击。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    
  2. $CLUSTER_2 中安装专用于 $CLUSTER_1 的东-西流量的网关。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl install --kubeconfig=PATH_TO_KUBECONFIG_2 -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    

Istio CA

  1. 在 cluster1 中安装专用于到 $CLUSTER_2东-西流量的网关。默认情况下,此网关在互联网上为公开。生产系统可能需要额外的访问限制(例如防火墙规则),以防止外部攻击。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    
  2. $CLUSTER_2 中安装专用于 $CLUSTER_1 的东-西流量的网关。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

公开服务

由于集群位于不同的网络中,因此您需要在这两个集群中的东-西网关上公开所有服务 (*.local)。虽然此网关在互联网上为公开,但只有具有可信 mTLS 证书和工作负载 ID 的服务才能访问其背后的服务,就像它们位于同一网络上一样。

  1. 通过 CLUSTER_NAME_1 的东-西网关公开服务。

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    
  2. 通过 CLUSTER_NAME_2 的东-西网关公开服务。

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    

启用端点发现

运行 asmcli create-mesh 命令以启用端点发现。此示例仅显示两个集群,但您可以运行命令以在其他集群上启用端点发现,具体取决于您可以添加到舰队的最大允许集群数

  ./asmcli create-mesh \
      FLEET_PROJECT_ID \
      PATH_TO_KUBECONFIG_1 \
      PATH_TO_KUBECONFIG_2