准备为 Cloud Service Mesh 设置 Gateway API

本页介绍了如何将网关所需的自定义资源定义安装到集群中。

限制

  • 中混合使用 gateway config-api 和 istio config-api 集群 同一舰队不受支持。
  • gateway config-api 集群不支持多集群服务发现和负载均衡。
  • 如果使用现有 --management automatic 标志对集群进行了初始配置 则该集群将开始使用 istio 配置 API 且无法更改 gateway API。
  • 仅支持 FQDN。不支持使用简称。

前提条件

首先,本指南假定您已经 创建了一个 Google Cloud 项目 安装了 kubectl

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  1. 为您的集群生成 kubeconfig 条目:
  2. gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
    

其中:

  • CLUSTER_NAME 是集群的名称
  • LOCATION 是集群的位置
  • PROJECT_ID 是集群的项目 ID

创建和注册 GKE 集群

  1. 创建 GKE 集群:

    gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --enable-ip-alias \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --release-channel=regular \
    --project=PROJECT_ID \
    --gateway-api=standard
    

    其中:

    • CLUSTER_NAME 是集群的名称
    • LOCATION 是集群的位置
    • PROJECT_ID 是集群的项目 ID
  2. 启用适用于 GKE 的工作负载身份联合:

    gcloud container clusters update CLUSTER_NAME \
    --location LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog
    
  3. 在节点上运行 GKE 元数据服务器:

    gcloud container node-pools update default-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --workload-metadata=GKE_METADATA
    
  4. 将集群注册到舰队

    gcloud container hub memberships register CLUSTER_NAME \
    --gke-cluster LOCATION/CLUSTER_NAME \
    --project=PROJECT_ID
    
  5. 验证集群是否已注册到舰队:

    gcloud container hub memberships list --project=PROJECT_ID
    

    输出类似于以下内容:

    NAME            EXTERNAL_ID                             LOCATION
    my-cluster      91980bb9-593c-4b36-9170-96445c9edd39    us-west1
    

设置权限

请注意,以下命令会向所有经过身份验证的用户授予权限,但您可以使用适用于 GKE 的工作负载身份联合功能仅向特定账号授予权限。

  1. 授予 trafficdirector.client 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
        --role "roles/trafficdirector.client"
    
  2. 授予 container.developer 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/container.developer"
    

    其中,PROJECT_NUMBER 是您的项目编号。

  3. 授予 compute.networkAdmin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/compute.networkAdmin"
    

    其中,PROJECT_NUMBER 是您的项目编号。

启用 Cloud Service Mesh

  1. 启用网格功能:

    gcloud container hub mesh enable --project PROJECT_ID
    
  2. 更新网格以使用 Gateway API:

    gcloud alpha container fleet mesh update \
    --config-api gateway \
    --memberships CLUSTER_NAME \
    --project PROJECT_ID
    
  3. 通过描述 Cloud Service Mesh 资源的状态来验证更新:

    gcloud alpha container fleet mesh describe
    

安装自定义资源定义

安装 GRPCRoute 自定义资源定义 (CRD):

curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
| kubectl apply -f -

输出类似于以下内容:

customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created

后续步骤