使用 Fleet API 配置代管式 Anthos Service Mesh

本页面介绍如何使用舰队功能 API 来设置具有控制层面自动管理功能的代管式 Anthos Service Mesh

当您在 GKE 集群上启用控制层面自动管理功能时,Google 会根据您的集群的发布渠道应用代管式 Anthos Service Mesh 的推荐配置,并保持其处于最新状态。

请根据以下需要使用此预览版新手入门路径:

  • 需要使用 gcloud 通过 Google Cloud API 和 IAM 配置代管式 Anthos Service Mesh。
  • 需要使用与其他舰队功能相同的 API 配置 Anthos Service Mesh。
  • 需要为每个集群自动获取 Anthos Service Mesh 的推荐配置。

如需了解使用 asmcli 工具的正式版上手体验,请参阅配置代管式 Anthos Service Mesh

前提条件

首先,本指南假定您已完成以下操作:

要求

  • 一个或多个在受支持的 GKE 版本中具有受支持区域的集群。
  • 集群必须注册到舰队。此操作包含在说明中,也可以在安装之前单独完成。
  • 项目必须启用服务网格功能。此操作包含在说明中,也可以单独完成。
  • 所有 GKE 集群都必须位于单个网络的单个项目中。

限制

我们建议您查看代管式 Anthos Service Mesh 支持的功能和限制列表。请特别注意以下几点:

  • 不支持 IstioOperator API,因为它的主要目的是控制集群组件。

  • 舰队中运行 Anthos Service Mesh 的每个集群都必须使用 Mesh CA

  • 常规和快速发布渠道均支持代管式数据平面。

  • 代管式 Anthos Service Mesh 可用的实际功能取决于发布版本。如需了解详情,请参阅代管式 Anthos Service Mesh 支持的功能和限制的完整列表。

  • 在 Google 管理的控制平面的预配过程中,与所选渠道对应的 Istio CRD 将安装在指定集群中。如果集群中已有 Istio CRD,则它们将会被覆盖。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  6. 启用所需的 API:

      gcloud services enable mesh.googleapis.com \
          --project=PROJECT_ID
    

启用 mesh.googleapis.com 会启用以下 API:

API
meshconfig.googleapis.com
meshca.googleapis.com
container.googleapis.com
gkehub.googleapis.com
monitoring.googleapis.com
stackdriver.googleapis.com
opsconfigmonitoring.googleapis.com
iam.googleapis.com
iamcredentials.googleapis.com
bigquery.googleapis.com
bigquerystorage.googleapis.com
compute.googleapis.com
oslogin.googleapis.com
containerregistry.googleapis.com
pubsub.googleapis.com
storage-api.googleapis.com
gkeconnect.googleapis.com
multiclustermetering.googleapis.com
logging.googleapis.com
connectgateway.googleapis.com

配置 gcloud

即使您使用的是 Cloud Shell,仍请执行以下步骤。

  1. 使用 Google Cloud CLI 进行身份验证:

    gcloud auth login --project PROJECT_ID
    
  2. 更新组件:

    gcloud components update
    
  3. 如果您要在 GKE 集群上安装 Anthos Service Mesh,请将 kubectl 配置为指向该集群。

    gcloud container clusters get-credentials CLUSTER_NAME \
         --zone CLUSTER_LOCATION \
         --project PROJECT_ID
    

启用 Anthos Service Mesh

在舰队上启用 Anthos Service Mesh。请注意,如果您计划注册多个集群,则启用 Anthos Service Mesh 是在项目级层进行的,因此您只需运行一次此命令。

gcloud container fleet mesh enable --project PROJECT_ID

其中:

  • PROJECT_ID 是当前项目的 ID。

将集群注册到舰队

  1. 使用 Workload Identity 将 GKE 集群注册到舰队

    gcloud container fleet memberships register MEMBERSHIP_NAME \
         --gke-cluster=GKE_CLUSTER \
         --enable-workload-identity \
         --project PROJECT_ID
    

    其中:

    • MEMBERSHIP_NAME 是您选择用来唯一表示要注册到舰队的集群的成员资格名称。

    • GKE_CLUSTER 是当前项目中的 GKE 集群的 location/name。该位置可以是可用区或区域,例如 us-central1-a/my-gke-cluster

  2. 验证是否已注册集群:

    gcloud container fleet memberships list --project PROJECT_ID
    

配置每个集群

请按照以下步骤为网格中的每个集群配置代管式 Anthos Service Mesh。

应用 mesh_id 标签

为 GKE 集群应用 mesh_id 标签:

  gcloud container clusters update CLUSTER_NAME --zone ZONE\
      --update-labels mesh_id=proj-PROJECT_NUMBER

其中:

  • CLUSTER_NAME 是集群的名称。
  • ZONE 是集群的计算区域。
  • PROJECT_NUMBER 是项目的唯一标识符。

启用控制层面自动管理功能

运行以下命令以启用控制层面自动管理功能:

  gcloud container fleet mesh update \
     --control-plane automatic \
     --memberships MEMBERSHIP_NAME \
     --project PROJECT_ID

请注意,入站流量网关不会自动使用控制层面进行部署。通过分离入站流量网关和控制层面的部署,您可以更轻松地在生产环境中管理网关。如果集群需要入站流量网关或出站流量网关,请参阅部署网关。如需启用其他可选功能,请参阅在代管式 Anthos Service Mesh 上启用可选功能

验证已预配控制平面

  1. 几分钟后,验证控制层面状态是否为 ACTIVE

    gcloud container fleet mesh describe --project PROJECT_ID
    

    输出类似于以下内容:

    ...
    membershipSpecs:
      projects/746296320118/locations/global/memberships/demo-cluster-1:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/746296320118/locations/global/memberships/demo-cluster-1:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
    ...
    

    记下 description: 字段中的修订版本标签,例如提供的输出中的 asm-managed。您需要先设置此标签,然后才能部署应用

应用 Google 管理的数据层面(可选)

如果您希望 Google 管理代理的升级,请启用 Google 管理的数据平面。如果启用,边车代理和注入的网关将与代管式控制层面一起自动升级。

请注意,Google 管理的数据层面需要 Istio 容器网络接口 (CNI) 插件,该插件现在在您部署 Google 管理的控制层面时默认启用。

在功能预览中,托管式数据平面通过逐出运行旧版代理的 Pod 来升级代理。系统会按照 Pod 中断预算并控制更改速率按顺序执行逐出。

此托管数据平面预览版不管理以下内容:

  • 未注入的 pod。
  • 使用 istioctl kube-inject 手动注入的 pod。
  • 作业
  • 有状态集
  • DaemonSet

快速数据和常规发布渠道均支持代管式数据平面。

如需启用 Google 管理的数据层面,请执行以下操作:

  1. 启用数据平面管理:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

    或者,您可以为特定 Pod 启用 Google 管理的数据平面,只需使用相同的注释为其添加注释即可。当您为特定 Pod 添加注释时,该 Pod 使用 Google 管理的边车代理,而其余工作负载使用非代管式边车代理。

  2. 对您希望代管数据平面的每个命名空间重复上一步骤。

    数据平面控制器最多可能需要十分钟才能准备好管理集群中的代理。运行以下命令来检查状态:

    if kubectl get dataplanecontrols -o custom-columns=REV:.spec.revision,STATUS:.status.state | grep rapid | grep -v none > /dev/null; then echo "Managed Data Plane is ready."; else echo "Managed Data Plane is NOT ready."; fi
    

    当数据层面控制器准备就绪后,该命令将输出:Managed Data Plane is ready.

如果数据层面控制器在等待超过 10 分钟后仍未变为就绪状态,请参阅代管式数据层面状态中的问题排查提示。

如果您希望停用 Google 管理的数据层面,并还原为自行管理边车代理,请更改注释:

kubectl annotate --overwrite namespace NAMESPACE \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

配置端点发现(仅适用于多集群安装)

在继续操作之前,您应该已经按照上述步骤中的说明在每个集群上配置代管式 Anthos Service Mesh。不需要指明集群是主要集群,这是默认行为。您必须先完成设置项目和集群变量以及创建防火墙规则部分,然后才能配置端点发现。

公共集群

在公共集群之间配置端点发现

如果您在公共集群(非专用集群)上执行操作,则可以在公共集群之间配置端点发现或者只是在公共集群之间启用端点发现

专用集群

在专用集群之间配置端点发现

使用 GKE 专用集群时,必须将集群控制平面端点配置为公共端点,而不是专用端点。请参阅在专用集群之间配置端点发现

如需查看包含两个集群的示例应用,请参阅 HelloWorld 服务示例

部署应用

如需部署应用,请使用您在安装期间配置的渠道对应的标签;如果您使用的是默认注入标签,请使用 istio-injection=enabled

默认注入标签

kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev- --overwrite

修订版本标签

在部署应用之前,请从相应命名空间中移除任何以前的 istio-injection 标签,然后改为设置 istio.io/rev=asm-managed-rapid 标签。

这是您在验证控制平面时识别的修订版本标签。如果您使用的是其他修订版本标签,请点击 asm-managed-rapid 并将其替换为适用标签:asm-managed(用于普通)或 asm-managed-stable(用于稳定版)。

修订版本标签对应于发布渠道

修订版本标签 渠道
asm-managed 普通
asm-managed-rapid 快速
asm-managed-stable 稳定版
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite

此时,您已成功配置 Anthos Service Mesh 代管式控制层面。如果您还应用代管式数据层面,请重启工作负载。如果没有,请执行滚动更新。现在,您可以部署应用,或者部署 Bookinfo 示例应用

如果您在多集群设置中部署应用,请在所有集群中复制 Kubernetes 和控制层面配置,除非您计划将特定配置限制为部分集群。应用于特定集群的配置是该集群的真实来源。此外,如果集群还在其他命名空间中通过 Mesh CA 运行 Anthos Service Mesh 或 Certificate Authority Service,请验证应用可以与集群内控制层面控制的其他应用进行通信。

停用控制层面自动管理功能

停用控制层面自动管理功能不会取消配置任何资源。所有资源都保留在集群中,供您手动管理或移除。如需完全移除,请参阅卸载 Anthos Service Mesh

  1. 运行以下命令以停用控制层面自动管理功能:

    gcloud container fleet mesh update \
       --control-plane manual \
       --memberships MEMBERSHIP_NAME \
       --project PROJECT_ID
    
  2. 几分钟后,验证控制层面自动管理的状态是否为 DISABLED

    gcloud container fleet mesh describe --project PROJECT_ID
    

    输出类似于以下内容:

    ...
    membershipSpecs:
      projects/projectid/locations/global/memberships/cluster-name:
        mesh:
          controlPlane: MANUAL
    membershipStates:
      projects/projectid/locations/global/memberships/cluster-name:
        servicemesh:
          controlPlaneManagement:
            state: DISABLED
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
    ...
    

    如需完全卸载 Anthos Service Mesh,请参阅卸载 Anthos Service Mesh

后续步骤