准备为 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  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

后续步骤