自行设置项目和 GKE 集群

注意:本指南仅支持使用 Istio API 的 Cloud Service Mesh,不支持 Google Cloud API。如需了解详情,请参阅 Cloud Service Mesh 概览。

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

如果您安装了先前版本的 Cloud Service Mesh,则在使用 asmcli 升级到最新 Cloud Service Mesh 版本之前,您无需对项目或集群进行任何更改。

默认情况下,asmcli 不会安装 istio-ingressgateway。我们建议您单独部署和管理控制平面和网关。Cloud Service Mesh 支持为网关部署使用自动注入,这使得 Cloud Service Mesh 升级更容易。升级 Cloud 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 Cloud Service Mesh 使用 Mesh Configuration API 将配置数据从网格中继到 Google Cloud。此外,启用 Mesh Configuration API 后,您可以访问 Google Cloud 控制台中的 Cloud Service Mesh 页面以及使用 Cloud Service Mesh 证书授权机构。 否
    meshca.googleapis.com 与托管式 Cloud Service Mesh 使用的 Cloud Service Mesh 证书授权机构相关。 否
    container.googleapis.com 必须启用此 API 才能创建 Google Kubernetes Engine (GKE) 集群。 否
    gkehub.googleapis.com 必须启用此 API 才能以舰队形式管理网格。 否
    monitoring.googleapis.com 必须启用此 API 才能捕获网格工作负载的遥测数据。 否
    stackdriver.googleapis.com 必须启用此 API 才能使用服务界面。 否
    opsconfigmonitoring.googleapis.com 必须启用此 API 才能将服务界面用于Google Cloud 外部的集群。 否
    connectgateway.googleapis.com 必须启用此 API,以便托管式 Cloud Service Mesh 控制平面可以访问网格工作负载。 是*
    trafficdirector.googleapis.com 实现可用性高且可伸缩的托管式控制平面。 是*
    networkservices.googleapis.com 实现可用性高且可伸缩的托管式控制平面。 是*
    networksecurity.googleapis.com 实现可用性高且可伸缩的托管式控制平面。 是*

    启用 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 进行新的安装。

后续步骤