自行设置项目和 GKE 集群

使用 asmcli 安装 Cloud Service Mesh 时,如果您添加 --enable_all 标志或更精细的启用标志,它可以为您配置项目和 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
    
  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
    

    如果您在执行以下操作时添加 --enable_all--enable_gcp_iam_roles 标志: 运行 asmcli 时,它会为您设置所需的 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. 启用 Workload Identity

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

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

  3. 将集群注册到舰队

  4. 初始化您的项目,以便准备好安装。除了其他操作,以下命令还会创建一个服务账号,可让数据平面组件(例如边车代理)安全地访问您的项目的数据和资源: 在以下命令中,将 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"
    

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

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

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

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

后续步骤