准备为 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

创建和注册 GKE 集群

gcloud

创建 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 \
--workload-pool=PROJECT_ID.svc.id.goog \
--workload-metadata=GKE_METADATA

其中:

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

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 标准部分中,点击配置

  4. 集群基本信息部分,完成以下操作:

    1. 输入集群的名称
    2. 对于位置类型,请为集群选择 Compute Engine 区域
  5. 在导航窗格中,点击节点池部分下的 default-pool,然后选择安全

  6. 访问权限范围列表中,选择针对每个 API 设置访问权限,然后将 Cloud Platform 设为已启用

  7. 在导航窗格中,点击集群部分下的网络

  8. Cluster Networking 列表中,选择 Enable Gateway API

  9. 在导航窗格中,点击集群部分下的安全

  10. 安全列表中,选择启用 Workload Identity

  11. 点击创建

创建集群后,

  1. 舰队注册集群:

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

    gcloud container fleet 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 fleet 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
    

将您的车队新会员默认设置为使用 Gateway API(可选)

或者,您也可以为在集群创建期间注册到舰队的新 GKE 集群创建舰队级默认设置,以便使用 Gateway API 自动进行配置。

  1. 创建一个 YAML 文件,指定使用 Gateway API:

    echo "configapi: gateway" > mesh.yaml
    
  2. 更新网格:

    gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \
        --fleet-default-member-config mesh.yaml
    
  3. 只需一步即可创建集群并将其注册到舰队,以使用默认配置:

    gcloud container clusters create CLUSTER_NAME \
        --project PROJECT_ID \
        --fleet-project FLEET_PROJECT_ID \
        --location=LOCATION \
    
  4. 启用适用于 GKE 的工作负载身份联合,并在节点上运行 GKE 元数据服务器。

安装自定义资源定义

为您的集群生成 kubeconfig 条目:

gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID

其中:

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

安装 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

后续步骤