准备为 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.
- 为您的集群生成 kubeconfig 条目:
gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
其中:
- CLUSTER_NAME 是集群的名称
- LOCATION 是集群的位置
- PROJECT_ID 是集群的项目 ID
创建和注册 GKE 集群
创建 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
启用适用于 GKE 的工作负载身份联合:
gcloud container clusters update CLUSTER_NAME \ --location LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog
在节点上运行 GKE 元数据服务器:
gcloud container node-pools update default-pool \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --workload-metadata=GKE_METADATA
向舰队注册集群:
gcloud container hub memberships register CLUSTER_NAME \ --gke-cluster LOCATION/CLUSTER_NAME \ --project=PROJECT_ID
验证集群是否已注册到舰队:
gcloud container hub 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 hub 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
安装自定义资源定义
安装 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