准备为 Cloud Service Mesh 设置 Gateway API
本页介绍了如何将网关所需的自定义资源定义安装到集群中。
限制
- 不支持在同一车队中混合使用
gateway
config-api 集群和istio
config-api 集群。 gateway
config-api 集群不支持多集群服务发现和负载均衡。- 如果使用现有的
--management automatic
标志引入集群,则集群会开始使用istio
配置 API,并且无法更改为gateway
API。 - 仅支持 FQDN。不支持使用简称。
前提条件
首先,本指南假定您已创建 Google Cloud 项目并安装了 kubectl
。
准备工作
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh 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
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
在标准部分中,点击配置。
在集群基本信息部分,完成以下操作:
- 输入集群的名称。
- 对于位置类型,请为集群选择 Compute Engine 区域。
在导航窗格中,点击节点池部分下的 default-pool,然后选择安全。
在访问权限范围列表中,选择针对每个 API 设置访问权限,然后将 Cloud Platform 设为已启用。
在导航窗格中,点击集群部分下的网络。
在 Cluster Networking 列表中,选择 Enable Gateway API。
在导航窗格中,点击集群部分下的安全。
在安全列表中,选择启用 Workload Identity。
点击创建。
创建集群后,
向舰队注册集群:
gcloud container fleet memberships register CLUSTER_NAME \ --gke-cluster LOCATION/CLUSTER_NAME \ --project=PROJECT_ID
验证集群是否已注册到舰队:
gcloud container fleet memberships list --project=PROJECT_ID
输出类似于以下内容:
NAME EXTERNAL_ID LOCATION my-cluster 91980bb9-593c-4b36-9170-96445c9edd39 us-west1
设置权限
请注意,以下命令会向所有经过身份验证的用户授予权限,但您可以使用适用于 GKE 的工作负载身份联合功能仅向特定账号授予权限。
授予
trafficdirector.client
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \ --role "roles/trafficdirector.client"
授予
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 是您的项目编号。
授予
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
启用网格功能:
gcloud container fleet mesh enable --project PROJECT_ID
更新网格以使用 Gateway API:
gcloud alpha container fleet mesh update \ --config-api gateway \ --memberships CLUSTER_NAME \ --project PROJECT_ID
通过描述 Cloud Service Mesh 资源的状态来验证更新:
gcloud alpha container fleet mesh describe
将您的车队新会员默认设置为使用 Gateway API(可选)
或者,您也可以为在集群创建期间注册到舰队的新 GKE 集群创建舰队级默认设置,以便使用 Gateway API 自动进行配置。
创建一个 YAML 文件,指定使用 Gateway API:
echo "configapi: gateway" > mesh.yaml
更新网格:
gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \ --fleet-default-member-config mesh.yaml
只需一步即可创建集群并将其注册到舰队,以使用默认配置:
gcloud container clusters create CLUSTER_NAME \ --project PROJECT_ID \ --fleet-project FLEET_PROJECT_ID \ --location=LOCATION \
启用适用于 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