自行设置项目和 GKE 集群

使用 asmcli 安装 Anthos Service Mesh 时,如果您添加 --enable_all 标志或更精细的启用标志,它可以为您配置项目和 GKE on Google Cloud 集群。如果您希望自行设置,而不是让 asmcli 进行更改,请按照本页面中的步骤操作。

如果您安装了旧版 Anthos Service Mesh,那么在使用 asmcli 升级 至最新 Anthos Service Mesh 版本之前,无需对项目或集群进行任何更改。

默认情况下,asmcli 不会安装 istio-ingressgateway。我们建议您单独部署和管理控制平面和网关。Anthos Service Mesh 支持网关部署的自动注入,这使得 Anthos Service Mesh 升级更容易。升级 Anthos Service Mesh 后,您可以像您的服务一样重启网关以获取新的控制平面配置。如需了解详情,请参阅安装和升级网关

准备工作

设置项目

  1. 获取在其中创建集群的项目的 ID 和编号。

    gcloud

    运行以下命令:

    gcloud projects list
    

    控制台

    1. 前往 Google Cloud 控制台中的信息中心页面

      前往“信息中心”页面

    2. 点击页面顶部的下拉列表。在随即显示的请选择:窗口中,选择您的项目。

      项目 ID 和项目编号显示在项目信息中心的项目信息卡片上。

  2. 创建以下环境变量:

    • 使用项目 ID 设置工作负载池:

      export WORKLOAD_POOL=PROJECT_ID.svc.id.goog
      
    • 使用项目编号设置网格 ID:

      export MESH_ID="proj-PROJECT_NUMBER"
      
  3. 设置所需的 Identity and Access Management (IAM) 角色。如果您是 Project Owner,则拥有完成安装所需的全部权限。如果您不是 Project Owner,则需要有人授予您以下特定 IAM 角色。在以下命令中,将 PROJECT_ID 替换为上一步中的项目 ID,并将 GCP_EMAIL_ADDRESS 替换为您用于登录 Google Cloud 的账号。

    ROLES=(
    'roles/servicemanagement.admin' \
    'roles/serviceusage.serviceUsageAdmin' \
    'roles/meshconfig.admin' \
    'roles/compute.admin' \
    'roles/container.admin' \
    'roles/resourcemanager.projectIamAdmin' \
    'roles/iam.serviceAccountAdmin' \
    'roles/iam.serviceAccountKeyAdmin' \
    'roles/gkehub.admin')
    for role in "${ROLES[@]}"
    do
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "user:GCP_EMAIL_ADDRESS" \
        --role="$role"
    done
    

    如果您在运行 asmcli 时添加 --enable_all--enable_gcp_iam_roles 标志,它会为您设置所需的 IAM 角色。

  4. 启用所需的 Google API:

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

    除了 mesh.googleapis.com 之外,此命令还会启用以下 API:

    API 说明
    meshconfig.googleapis.com 将网格中的配置数据中继到 Google Cloud。此外,还允许您通过 Google Cloud 控制台访问 Anthos Service Mesh 页面以及使用 Anthos Service Mesh 证书授权机构 (Mesh CA)。
    meshca.googleapis.com Anthos Service Mesh certificate authority API。允许使用 Anthos Service Mesh 附带的代管式证书提供商。即使您使用 Certificate Authority Service 或 Istio CA,也会启用此 API。
    container.googleapis.com 用于构建和管理基于开源 Kubernetes 技术的基于容器的应用。
    monitoring.googleapis.com 管理您的 Cloud Monitoring 数据和配置。 用于存储 Google Cloud 控制台中显示的应用遥测。
    gkehub.googleapis.com 用于配置网格的范围。如需了解详情,请参阅队列管理文档
    stackdriver.googleapis.com 供 Google Cloud 的运维套件用于跨 Google Cloud 内部和外部的应用、平台和服务收集信号。
    opsconfigmonitoring.googleapis.com 收集、聚合启用 Anthos Service Mesh 界面的 Google Cloud 中的资源并将其编入索引。
    connectgateway.googleapis.com 允许 Google 基础架构在多个云和混合环境中安全地连接到已注册的 GKE 集群。

    启用 API 可能需要 1 分钟或更长时间才能完成。启用这些 API 后,您将看到如下输出:

    Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished
    successfully.
    

    如果您在运行 asmcli 时添加 --enable_all--enable_apis 标志,它会为您启用所需的 API。

设置集群

如果您添加 --enable_all 标志或更精细的启用标志asmcli 脚本会为您设置集群。

  1. 为 Google Cloud CLI 设置默认可用区或区域。如果您未在此处设置默认值,请务必在本页面的 gcloud container clusters 命令中指定 --zone--region 选项。

    • 如果您有一个单可用区集群,请设置默认可用区:

      gcloud config set compute/zone CLUSTER_LOCATION
      
    • 如果您有一个区域级集群,请设置默认区域:

      gcloud config set compute/region CLUSTER_LOCATION
      
  2. 在集群上设置 mesh_id 标签。如果您的集群已有要保留的标签,则在添加 mesh_id 标签时必须将这些标签包含在内。

    1. 如需查看您的集群是否已有标签,请执行以下操作:

      gcloud container clusters describe CLUSTER_NAME \
          --project PROJECT_ID
      

      在输出中查找 resourceLabels 字段。每个标签都存储在 resourceLabels 字段下的单独的一行中,例如:

      resourceLabels:
        csm: ''
        env: dev
        release: stable

      为方便起见,您可以向环境变量添加标签。在以下命令中,请将 YOUR_EXISTING_LABELS 替换为集群上以英文逗号分隔的现有标签列表,格式为 KEY=VALUE,例如:env=dev,release=stable

      export EXISTING_LABELS="YOUR_EXISTING_LABELS"
      
    2. 设置 mesh_id 标签:

      • 如果您的集群已有要保留的标签,请使用 mesh_id 和现有标签更新集群:

        gcloud container clusters update CLUSTER_NAME \
            --project PROJECT_ID \
            --update-labels=mesh_id=${MESH_ID},${EXISTING_LABELS}
        
      • 如果您的集群没有任何现有标签,请仅使用 mesh_id 标签更新集群:

        gcloud container clusters update CLUSTER_NAME \
            --project=PROJECT_ID \
            --update-labels=mesh_id=${MESH_ID}
        
  3. 启用 Workload Identity

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --workload-pool=${WORKLOAD_POOL}
    

    启用 Workload Identity 最长可能需要 10 到 15 分钟。

  4. 将集群注册到舰队

  5. 初始化您的项目,以便准备好安装。除了其他操作,以下命令还会创建一个服务账号,可让数据平面组件(例如边车代理)安全地访问您的项目的数据和资源: 在以下命令中,将 FLEET_PROJECT_ID 替换为舰队宿主项目

    curl --request POST  \
     --header "Authorization: Bearer $(gcloud auth print-access-token)" \
     --header "Content-Type: application/json" \
     --data '{"workloadIdentityPools":["FLEET_PROJECT_ID.hub.id.goog","FLEET_PROJECT_ID.svc.id.goog","PROJECT_ID.svc.id.goog"]}' \
     "https://meshconfig.googleapis.com/v1alpha1/projects/PROJECT_ID:initialize"
    

    该命令会以空花括号作为响应:{}

  6. 启用 GKE 上的 Cloud Monitoring 和 Cloud Logging

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --enable-stackdriver-kubernetes
    

您的项目和集群现在已准备好使用 asmcli 进行新的安装。

后续步骤