本指南介绍如何设置 Google Kubernetes Engine (GKE) 集群并启用 Cloud Run for Anthos。您可以使用 Google Cloud 控制台或 Google Cloud CLI 在标准和专用 GKE 集群上启用 Cloud Run for Anthos。
启用 Cloud Run for Anthos 会将 Istio 和 Knative Serving 安装到集群中,以用于连接和管理无状态工作负载。如需了解详情,请参阅 Cloud Run for Anthos 的架构概览。
准备工作
- Cloud Run for Anthos 是 Google Kubernetes Engine 的插件。在 2021 年 9 月 30 日之前可以免费试用。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
设置命令行环境
虽然您可以选择使用 Google Cloud 控制台或 gcloud CLI 来管理 Cloud Run for Anthos,但某些任务要求使用 gcloud CLI。
如需为 Cloud Run for Anthos 设置 gcloud
和 kubectl
命令行工具,请执行以下操作:
将 gcloud CLI 的默认项目设置为您刚创建的项目,或设置为您要使用的现有项目:
gcloud config set project PROJECT-ID
将 PROJECT-ID 替换为您创建的项目的 ID。
将
zone
设置为集群所需的可用区。您可以使用支持 GKE 的任何可用区。例如:gcloud config set compute/zone ZONE
将 ZONE 替换为您的区域。
为项目启用创建集群、构建容器以及将容器发布到 Google Kubernetes Engine 注册表所必需的 API:
gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
安装
kubectl
命令行工具:gcloud components install kubectl
更新已安装的 gcloud CLI 组件:
gcloud components update
启用 Cloud Run for Anthos
Cloud Run for Anthos 在 GKE 集群上运行。您可以在现有集群上启用 Cloud Run for Anthos,也可以创建启用 Cloud Run for Anthos 的新集群。
选择您希望如何设置 Cloud Run for Anthos:
您也可以在专用 GKE 集群上启用 Cloud Run for Anthos。如需了解如何创建专用 GKE 集群,请参阅 GKE 文档中的创建专用集群。
创建已启用 Cloud Run for Anthos 的新 GKE 集群
本部分中的说明创建具有以下配置的集群:
- 启用 Cloud Run for Anthos
- Kubernetes 版本:可用的 GKE 版本
- 4 个节点,带有 4 个 vCPU
- 默认命名空间:
default
这些是测试 Cloud Run for Anthos 集群的推荐集群配置。对于生产工作负载,您应该配置 GKE 集群以满足您的特定需求。如需了解不同类型的 GKE 集群及其配置选项,请参阅 GKE 文档中的集群类型。
创建集群并启用 Cloud Run for Anthos:
创建集群:
gcloud container clusters create CLUSTER-NAME \ --zone=ZONE \ --addons=HttpLoadBalancing,CloudRun \ --machine-type=e2-standard-4 \ --num-nodes=4 \ --cluster-version=GKE-VERSION \ --enable-stackdriver-kubernetes
CLUSTER-NAME 是所需的集群名称。
ZONE 是您的集群所需的 Compute Engine 可用区。
GKE-VERSION 是所需的 GKE 版本。 请参阅可用的版本。
默认不启用集群自动扩缩功能,但 Cloud Run for Anthos 会根据可用容量自动扩缩集群中的实例数量。
等待集群创建过程完成。
在现有集群上启用 Cloud Run for Anthos
您的 GKE 集群必须具有以下最低配置:
- 4 个节点,带有 4 个 vCPU。如果您需要更改集群的机器类型,请参阅将工作负载迁移到不同的机器类型。
- 范围:
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
您可以使用 gcloud CLI 或 Google Cloud 控制台在集群上启用 Cloud Run for Anthos:
控制台
在现有集群上启用 Cloud Run for Anthos:
前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面:
点击要启用 Cloud Run for Anthos 的集群的名称。
点击修改。
点击启用 Cloud Run for Anthos。
点击保存。更新完成后,集群将支持 Cloud Run for Anthos。
命令行
在现有集群上启用 Cloud Run for Anthos:
使用以下命令启用集群:
gcloud container clusters update \ CLUSTER_NAME \ --update-addons=CloudRun=ENABLED,HttpLoadBalancing=ENABLED \ --zone=ZONE
请替换以下内容:
- CLUSTER_NAME:集群的名称。
- ZONE:集群的可用区。例如
us-central1-a
。
等待启用完成。成功后,命令行会返回如下所示的消息:
Updating your-cluster-name...done.
配置 gcloud CLI 的默认设置
创建集群后,您可以设置 Google Cloud CLI 要使用的默认值。当您使用命令行时,此操作将移除您设置的任何默认值的后续提示,例如集群名称或位置。
您可以为以下各项配置默认设置:
- 集群名称
- 集群位置
- 凭据
- 命名空间
- 平台
要设置默认值,请执行以下操作:
运行以下命令设置默认集群和集群位置,然后获取凭据:
gcloud config set run/platform gke gcloud config set run/cluster CLUSTER gcloud config set run/cluster_location ZONE gcloud container clusters get-credentials CLUSTER
您需要将其中的:
- 将 CLUSTER 替换为集群的名称。
- 将 ZONE 替换为集群的位置。
默认情况下,创建集群时使用名为
default
的命名空间。如需了解命名空间以及为何可能需要创建和使用default
以外的命名空间,请参阅命名空间。要创建新的命名空间,请运行:
kubectl create namespace NAMESPACE
将 NAMESPACE 替换为您要创建的命名空间的名称。
如果您在上一步中创建了新的命名空间,则可以将该命名空间设置为每次调用 Google Cloud CLI 时使用的默认命名空间。否则,将使用
default
命名空间。如需设置新的命名空间,请运行以下命令:gcloud config set run/namespace NAMESPACE
将 NAMESPACE 替换为您希望 gcloud CLI 工具默认使用的命名空间的名称。
使用 Workload Identity 启用集群上的指标
启用 Workload Identity 后,Cloud Run for Anthos 不会报告某些指标(例如 Google Cloud 的运维套件的修订版本请求计数或请求延迟),但会继续报告 CPU 和内存的指标。
要启用所有指标,您需要向与 Cloud Run for Anthos 服务关联的 Google 服务帐号 (GSA) 授予 Monitoring Metric Writer 角色,以手动设置向 Cloud Monitoring 写入指标的权限。
向服务的 GSA 授予 Monitoring Metric Writer 角色权限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter
替换:
- 将 PROJECT_ID 替换为托管您的 KSA 的集群项目的 ID。
- 将 GSA_PROJECT 替换为不在集群中的 GSA 的项目 ID。您可以在组织中使用任何 GSA。
如需了解详情,请参阅授予、更改和撤消对资源的访问权限。
要在 GKE 集群中设置由 Google Cloud API(例如 Compute API、Storage and Database API 或 Machine Learning API)提供的服务,请参阅使用 Workload Identity。
在多租户设置中进行开发
在多租户用例中,您需要管理 Cloud Run for Anthos 服务并将其部署到当前项目之外的 Google Kubernetes Engine 集群。如需详细了解 GKE 多租户,请参阅集群多租户。
如需了解如何为 Cloud Run for Anthos 配置多租户,请参阅跨项目多租户。
设置专用内部网络
在内部网络上部署服务对于下列对象非常有用:为员工提供内部应用的企业;以及在 Cloud Run for Anthos 集群外运行的客户端所使用的服务。此配置允许您网络中的其他资源使用专用的内部 (RFC 1918) IP 地址与服务进行通信,该 IP 地址无法由公众访问。
如需创建内部网络,请将 Istio 的入站网关配置为使用内部 TCP/UDP 负载平衡,而不是使用公共外部网络负载平衡器。然后,您可以在 VPC 网络中的内部 IP 地址上部署 Cloud Run for Anthos 服务。
准备工作
- 您必须对集群拥有
admin
权限。 - 仅支持 Google Cloud CLI 310.0 或更高版本。如需了解详情,请参阅设置 gcloud。
如需设置内部负载平衡器,请执行以下操作:
通过创建新集群或更新现有集群,更新 Istio 入站网关以使用内部 TCP/UDP 负载平衡:
使用内部负载平衡器创建新集群:
gcloud container clusters create CLUSTER_NAME \ --addons=HttpLoadBalancing,CloudRun \ --machine-type=n1-standard-2 \ --num-nodes=3 \ --enable-stackdriver-kubernetes \ --cloud-run-config=load-balancer-type=INTERNAL
更新现有集群以使用内部负载平衡器:
gcloud container clusters update CLUSTER_NAME --update-addons=CloudRun=ENABLED \ --cloud-run-config=load-balancer-type=INTERNAL
更改可能需要几分钟时间才能生效。
运行以下命令以查看 GKE 集群的更新:
kubectl -n gke-system get svc istio-ingress --watch
- 请注意注释“cloud.google.com/load-balancer-type: Internal”。
- 在 Ingress 负载平衡器中查找
IP
值以将其更改为专用 IP 地址。 - 如果您在
IP
字段中看到专用 IP 地址,请按Ctrl+C
停止更新。
如需在更改后验证内部连接,请执行以下操作:
将名为
sample
的服务部署到default
命名空间中的 Cloud Run for Anthos:gcloud run deploy sample \ --image gcr.io/knative-samples/helloworld \ --namespace default
在 GKE 集群所在的可用区中创建 Compute Engine 虚拟机 (VM):
VM=cloudrun-gke-ilb-tutorial-vm gcloud compute instances create $VM
将 Istio 入站网关的专用 IP 地址存储在名为
EXTERNAL_IP
的环境变量和名为external-ip.txt
的文件中:export EXTERNAL_IP=$(kubectl -n gke-system get svc istio-ingress \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
将包含 IP 地址的文件复制到虚拟机:
gcloud compute scp external-ip.txt $VM:~
使用 SSH 连接到虚拟机:
gcloud compute ssh $VM
在 SSH 会话中,测试示例服务:
curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
输出如下所示:
Hello World!
退出 SSH 会话:
exit
使用单独的 Istio 安装
以下说明介绍如何连接 Anthos Service Mesh、Istio on GKE 插件或自定义 Istio 安装(带有 Cloud Run for Anthos 以及 Cloud Run for Anthos 中已默认安装的 Istio 组件)。
默认 Cloud Run for Anthos 安装中包含的 Istio 组件目前不支持自动 Sidecar 注入;但是,您可以使用另一个 Istio 安装在您的服务运行的命名空间中启用 Istio Sidecar 注入。
要使用额外的 Istio 安装,您需要验证 Istio 入站网关在 istio-system
命名空间中是否命名为 istio-ingressgateway
。Cloud Run for Anthos 可以支持和处理来自以下命名空间安装的 Istio 入站网关的外部流量:
istio-system
命名空间,该命名空间具有您在使用额外的 Istio 安装时默认设置的集群本地网域istio-ingressgateway.istio-system.svc.cluster.local
。gke-system
命名空间,带有使用默认 Cloud Run for Anthos 安装设置的集群本地网域istio-ingress.gke-system.svc.cluster.local
。
重要提示:如果要配置和使用 Istio 的 AuthorizationPolicy
,您必须为访问权限控制使用路径类型匹配,以解决已知漏洞。如需详细了解如何免于漏洞威胁,请参阅安全最佳做法。
要验证额外的 Istio 入站网关的 Cloud Run for Anthos 使用情况,请执行以下操作:
打开
config-istio
ConfigMap:kubectl get configmap config-istio --namespace knative-serving -oyaml
验证额外的 Istio 入站网关是否命名为
istio-ingressgateway
以及是否位于istio-system
命名空间。
启用 HTTPS 和自定义网域
如果要使用适用于集群的 HTTPS 和自定义网域,请参阅启用 HTTPS 和自动 TLS 证书以及映射自定义网域。
停用 Cloud Run for Anthos
要在集群中停用 Cloud Run for Anthos,请执行以下操作:
前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面:
点击要停用 Cloud Run for Anthos 的集群。
点击修改。
从 Cloud Run for Anthos 菜单中,选择停用。
点击保存。