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

了解如何在现有 GKE 集群上启用 Cloud Run for Anthos,以管理无状态工作负载。

前提条件

本页假定您已完成设置您的环境并具有以下最低配置的集群:

  • 每个节点有 2 个 vCPU
  • 范围:https://www.googleapis.com/auth/logging.writehttps://www.googleapis.com/auth/monitoring.write

为 Cloud Run for Anthos 启用现有集群

您可以使用 gcloud 命令行或控制台为集群启用 Cloud Run for Anthos:

控制台

如需为 Cloud Run for Anthos 启用现有集群,请执行以下操作:

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

  3. 点击修改

  4. 选择启用 Cloud Run for Anthos on Google Cloud

  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. 的消息。

在专用集群上启用部署

如果您是在以下版本的 GKE 集群上使用 Cloud Run for Anthos on Google Cloud,则可以跳过以下说明:

  • 1.16.8-gke.7+
  • 1.15.11-gke.9+

如需在专用 GKE 集群上将服务部署到 Cloud Run for Anthos on Google Cloud,您必须允许从控制层面(主)服务器到端口 8443 上的节点的 TCP 连接,并通过修改项目中的防火墙规则在允许的 TCP 连接列表中手动指定端口 8443

  1. 查看控制层面的集群 CIDR 块并记录 masterIpv4CidrBlock 字段中的值:

    gcloud container clusters describe CLUSTER_NAME
  2. 查看并记录 TARGET_TAGS 字段中的值:

    gcloud compute firewall-rules list \
              --filter 'name~^gke-CLUSTER_NAME' \
               --format 'table(
                       name,
                       network,
                       direction,
                       sourceRanges.list():label=SRC_RANGES,
                       allowed[].map().firewall_rule().list():label=ALLOW,
                       targetTags.list():label=TARGET_TAGS
               )'
  3. 使用上面记录的值添加防火墙规则:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
         --action ALLOW \
         --direction INGRESS \
         --source-ranges masterIpv4CidrBlock \
         --rules tcp:8443 \
         --target-tags TARGET_TAGS

    如需了解详情,请参阅创建防火墙规则

为专用内部网络启用部署

在内部网络上部署服务对于下列对象非常有用:为员工提供内部应用的企业;以及在 Cloud Run for Anthos on Google Cloud 集群外运行的客户端所使用的服务。此配置允许您网络中的其他资源使用专用的内部 (RFC 1918) IP 地址与服务进行通信,该 IP 地址无法由公众访问。

如需创建内部网络,请将 Istio 的入站网关配置为使用内部 TCP/UDP 负载平衡,而不是使用公共外部网络负载平衡器。然后,您可以在 VPC 网络中的内部 IP 地址上部署 Cloud Run for Anthos 服务。

准备工作

  • 您必须对集群拥有 admin 权限。
  • 仅支持 Cloud SDK 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 kuberun core services create sample \
    --image gcr.io/knative-samples/simple-api \
    --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)
    

    输出如下所示:

    OK
    
  7. 退出 SSH 会话:

    exit
    

使用 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。

如需了解详情,请参阅授予、更改和撤消对资源的访问权限

启用自动 Istio Sidecar 注入功能

如需在部署的服务所在命名空间上启用自动 Istio Sidecar 注入功能,您必须使用单独的 Istio 安装

在多租户设置中进行开发

在多租户用例中,您需要在当前项目之外的 Google Kubernetes Engine 集群上管理和部署 Cloud Run for Anthos on Google Cloud 服务。本部分将指导您如何在多租户集群设置中开发 Cloud Run for Anthos on Google Cloud 服务。

如需在当前项目之外的 Google Kubernetes Engine 集群上管理和部署 Cloud Run for Anthos on Google Cloud 服务,请执行以下操作:

  1. 确保您对要部署的集群的 Google Cloud 项目 ID 拥有读取权限。

  2. 使用目标 GKE 集群的凭据更新您的本地 kubeconfig 文件:

    gcloud container clusters get-credentials NAME \
    --region=REGION \
    --project=PROJECT-ID
    • REGION 是目标集群的 Compute Engine 地区。
    • PROJECT-ID 是您拥有读取权限的项目。

    如需了解详情,请参阅 gcloud container clusters get-credentials 命令参考文档

您现在可以在 kubeconfig 文件中指定的目标 GKE 集群上运行命令。

例如,以下命令将使用指定容器映像将 Cloud Run for Anthos on Google Cloud 服务部署到 GKE 集群(其凭据存储在 kubeconfig 文件中):

gcloud kuberun core services create SERVICE-NAME --image IMAGE-NAME

为集群停用 Cloud Run for Anthos

您可以随时使用控制台或命令行为集群停用 Cloud Run for Anthos。

控制台

如需在集群上停用 Cloud Run for Anthos,请执行以下操作:

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

  3. 选择停用 Cloud Run for Anthos on Google Cloud

  4. (可选)停用如果没有 Cloud Run for Anthos 集群中就不会使用的任何插件。这可能包括 Istio。

  5. 点击保存

命令行

如需删除集群,请执行以下操作:

  1. 调用以下命令:

    gcloud container clusters update \
    CLUSTER_NAME \
    --update-addons=CloudRun=DISABLED \
    --zone=ZONE

    注意替换如下内容:

    • CLUSTER_NAME 替换为您想要使用的集群名称。
    • ZONE 替换为您要用于集群的地区,例如 us-central1-a
  2. 等待启用完成:成功后,您将看到类似于 Updating your-cluster-name...done. 的消息。