设置混合网格

本页介绍了如何为以下平台设置混合网格:

  • 混合:GKE on Google Cloud 和 Google Distributed Cloud(预览版)
  • 混合:GKE on Google Cloud 和 Google Distributed Cloud(预览版)

按照以下说明,您可以设置两个集群,但您可以扩展此过程,将任意数量的集群加入网格中。

前提条件

  • 所有集群都必须注册到同一舰队宿主项目
  • 所有 GKE 集群都必须位于同一网络上的共享 VPC 配置中。
  • 必须能够从网格中的每个集群访问集群的 Kubernetes 控制层面地址和网关地址。GKE 集群所在的 Google Cloud 项目应可以创建外部负载均衡类型。我们建议您使用授权网络VPC 防火墙规则来限制访问权限。
  • 不支持专用集群(包括 GKE 专用集群)。如果您使用本地集群(包括 Google Distributed Cloud 和 Google Distributed Cloud),则需要能够从 GKE 集群中的 Pod 访问 Kubernetes 控制平面地址和网关地址。我们建议您使用 CloudVPN 将 GKE 集群的子网连接到本地集群的网络。
  • 若您使用 Istio CA,请对所有集群使用相同的自定义根证书。

准备工作

您需要访问要在网格中设置的所有集群的 kubeconfig 文件。 对于 GKE 集群,如需为集群创建新的 kubeconfig 文件,您可以在终端中导出 KUBECONFIG 环境和完整文件路径作为值,并生成 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. 为网络名称创建环境变量。

    • GKE 集群默认使用集群网络名称:

      export NETWORK_1="PROJECT_ID-CLUSTER_NETWORK"

    • 其他集群使用 default

      export NETWORK_2="default"

    请注意,如果您在具有不同 --network_id 值的其他集群上安装了 Cloud Service Mesh,则应该将相同的值传递给 NETWORK_2。

安装东-西网关

  1. 在 CLUSTER_1(您的 GKE 集群)中安装一个网关,该网关专门用于 CLUSTER_2(您的本地集群)的东-西流量:

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_1}  \
        --revision asm-1226-2 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    

    请注意,默认情况下,此网关在互联网上是公开的。生产系统可能需要额外的访问限制(例如防火墙规则),以防止外部攻击。

  2. 在 CLUSTER_2 中安装专用于 CLUSTER_1 东-西流量的网关。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_2} \
        --revision asm-1226-2 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

公开服务

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

通过每个集群的东-西网关公开服务

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

启用端点发现

运行 asmcli create-mesh 命令以启用端点发现。此示例仅显示两个集群,但您可以运行此命令在更多集群上启用端点发现,但需遵循 GKE Hub 服务限制

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

验证多集群连接

请参阅注入边车代理