设置 Cloud Run for Anthos

本指南介绍如何设置 Google Kubernetes Engine (GKE) 集群并启用 Cloud Run for Anthos。您可以使用 Google Cloud 控制台或 Google Cloud CLI 在标准和专用 GKE 集群上启用 Cloud Run for Anthos。

启用 Cloud Run for Anthos 会将 IstioKnative Serving 安装到集群中,以用于连接和管理无状态工作负载。如需了解详情,请参阅 Cloud Run for Anthos 的架构概览

准备工作

  1. Cloud Run for Anthos 是 Google Kubernetes Engine 的插件。在 2021 年 9 月 30 日之前可以免费试用
  2. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. 确保您的 Google Cloud 项目已启用结算功能

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. 确保您的 Google Cloud 项目已启用结算功能

设置命令行环境

虽然您可以选择使用 Google Cloud 控制台或 gcloud CLI 来管理 Cloud Run for Anthos,但某些任务要求使用 gcloud CLI。

如需为 Cloud Run for Anthos 设置 gcloudkubectl 命令行工具,请执行以下操作:

  1. 安装并初始化 Google Cloud CLI

  2. 将 gcloud CLI 的默认项目设置为您刚创建的项目,或设置为您要使用的现有项目:

    gcloud config set project PROJECT-ID

    PROJECT-ID 替换为您创建的项目的 ID。

  3. zone 设置为集群所需的可用区。您可以使用支持 GKE 的任何可用区。例如:

    gcloud config set compute/zone ZONE

    ZONE 替换为您的区域。

  4. 为项目启用创建集群、构建容器以及将容器发布到 Google Kubernetes Engine 注册表所必需的 API:

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. 安装 kubectl 命令行工具:

    gcloud components install kubectl
  6. 更新已安装的 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:

  1. 创建集群:

    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

    默认不启用集群自动扩缩功能,但 Cloud Run for Anthos 会根据可用容量自动扩缩集群中的实例数量

  2. 等待集群创建过程完成。

在现有集群上启用 Cloud Run for Anthos

您的 GKE 集群必须具有以下最低配置:

您可以使用 gcloud CLI 或 Google Cloud 控制台在集群上启用 Cloud Run for Anthos:

控制台

在现有集群上启用 Cloud Run for Anthos:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面:

    前往 Google Kubernetes Engine

  2. 点击要启用 Cloud Run for Anthos 的集群的名称。

  3. 点击修改

  4. 点击启用 Cloud Run for Anthos

  5. 点击保存。更新完成后,集群将支持 Cloud Run for Anthos。

命令行

在现有集群上启用 Cloud Run for Anthos:

  1. 使用以下命令启用集群:

    gcloud container clusters update \
    CLUSTER_NAME \
    --update-addons=CloudRun=ENABLED,HttpLoadBalancing=ENABLED \
    --zone=ZONE

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • ZONE:集群的可用区。例如 us-central1-a
  2. 等待启用完成。成功后,命令行会返回如下所示的消息:

    Updating your-cluster-name...done.

配置 gcloud CLI 的默认设置

创建集群后,您可以设置 Google Cloud CLI 要使用的默认值。当您使用命令行时,此操作将移除您设置的任何默认值的后续提示,例如集群名称或位置。

您可以为以下各项配置默认设置:

  • 集群名称
  • 集群位置
  • 凭据
  • 命名空间
  • 平台

要设置默认值,请执行以下操作:

  1. 运行以下命令设置默认集群和集群位置,然后获取凭据:

    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 替换为集群的位置。
  2. 默认情况下,创建集群时使用名为 default 的命名空间。如需了解命名空间以及为何可能需要创建和使用 default 以外的命名空间,请参阅命名空间

    要创建新的命名空间,请运行:

    kubectl create namespace NAMESPACE

    NAMESPACE 替换为您要创建的命名空间的名称。

  3. 如果您在上一步中创建了新的命名空间,则可以将该命名空间设置为每次调用 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

如需设置内部负载平衡器,请执行以下操作:

  1. 通过创建新集群或更新现有集群,更新 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

    更改可能需要几分钟时间才能生效。

  2. 运行以下命令以查看 GKE 集群的更新:

    kubectl -n gke-system get svc istio-ingress --watch
    
    1. 请注意注释“cloud.google.com/load-balancer-type: Internal”。
    2. 在 Ingress 负载平衡器中查找 IP 值以将其更改为专用 IP 地址
    3. 如果您在 IP 字段中看到专用 IP 地址,请按 Ctrl+C 停止更新。

如需在更改后验证内部连接,请执行以下操作:

  1. 将名为 sample 的服务部署到 default 命名空间中的 Cloud Run for Anthos:

    gcloud run deploy sample \
    --image gcr.io/knative-samples/helloworld \
    --namespace default
    
  2. 在 GKE 集群所在的可用区中创建 Compute Engine 虚拟机 (VM):

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  3. 将 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)
    
  4. 将包含 IP 地址的文件复制到虚拟机:

    gcloud compute scp external-ip.txt $VM:~
    
  5. 使用 SSH 连接到虚拟机:

    gcloud compute ssh $VM
    
  6. 在 SSH 会话中,测试示例服务:

    curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
    

    输出如下所示:

    Hello World!
    
  7. 退出 SSH 会话:

    exit
    

使用单独的 Istio 安装

以下说明介绍如何连接 Anthos Service MeshIstio 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 使用情况,请执行以下操作:

  1. 打开 config-istio ConfigMap:

    kubectl get configmap config-istio --namespace knative-serving -oyaml
    
  2. 验证额外的 Istio 入站网关是否命名为 istio-ingressgateway 以及是否位于 istio-system 命名空间。

启用 HTTPS 和自定义网域

如果要使用适用于集群的 HTTPS 和自定义网域,请参阅启用 HTTPS 和自动 TLS 证书以及映射自定义网域

停用 Cloud Run for Anthos

要在集群中停用 Cloud Run for Anthos,请执行以下操作:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面:

    前往 Google Kubernetes Engine

  2. 点击要停用 Cloud Run for Anthos 的集群。

  3. 点击修改

  4. Cloud Run for Anthos 菜单中,选择停用

  5. 点击保存

后续步骤