Ambient Networking 为 Cloud Run 带来了内置的简化资源网络体验。它为您的资源提供了一个全代管式数据平面,可消除构建和维护自定义代理的运维负担。它还对服务网格概念进行了抽象,因此您无需学习或配置网格即可获得高级网络功能。
启用 Ambient Networking 后,流量默认会原样通过,因此您现有的 HTTP 和 TCP 流量会继续正常传输。单独启用 Ambient Networking 不会改变资源的行为。作为基础,Ambient Networking 可让您选择启用以下部分中所述的功能。
使用场景
Ambient Networking 是 Cloud Run 中高级网络功能的基础。启用 Ambient Networking 后,您可以选择启用在 Cloud Run 上使用 Agent Gateway。此功能通过组织集中管理的访问权限和安全政策来控制代理流量。
架构
Ambient Networking 在 Cloud Run 资源的每个容器实例中运行一个全代管式 Envoy 边车容器,与应用容器并存。边车会拦截实例的网络流量,并应用 Cloud Run 分发给它的路由和安全政策。
Ambient Networking 范围
Ambient Networking 支持全球范围和区域范围。范围决定了 Sidecar 是连接到全球路由平面还是区域路由平面:
- 区域级(默认):Cloud Run 会将边车连接到区域级路由平面,从而将路由和安全政策限制为服务所在区域内的目标。此范围支持针对存储中的数据(静态数据)、使用中和传输中数据的数据驻留 (DRZ) 要求。如果您未指定范围,Ambient Networking 将使用区域范围。
- 全球:Cloud Run 将边车连接到全球路由平面,使其能够将流量路由到任何区域的目标。
每个使用 Ambient Networking 的功能都需要特定的范围:
| 功能 | 全球范围 | 区域范围 |
|---|---|---|
| Cloud Run 上的 Agent Gateway | 不支持 | 支持 |
限制
Ambient Networking 存在以下限制:
- 不支持 UDP 流量。Ambient Networking 仅支持 HTTP 和 TCP 流量。
- 入站请求不支持端到端 HTTP/2。如需了解详情,请参阅已知问题。
- 区域范围不支持将
*.googleapis.com解析为专用 Google 访问通道 IP 地址的 VPC 网络。如需了解详情,请参阅已知问题。 - 不支持第一代执行环境。如果您未指定执行环境,Cloud Run 会使用第二代。
- 容器实例启动时间较长。如需了解详情,请参阅已知问题。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
启用 Cloud Run、Network Services 和 Traffic Director API(如果尚未启用)。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。-
将 Cloud Run 资源的 CPU 限制提高 1 个 vCPU,并将其内存限制提高 1 GiB。如果新的 CPU 限制不是受支持的值,请使用下一个较高的受支持值。Ambient 边车会共享容器实例的 CPU 和内存,因此增加这些资源可确保应用保留所需的资源。
-
请参阅 Cloud Run 价格页面,了解 Ambient Networking 边车使用情况。在预览版期间,系统不会对环境功能强制执行结算。
所需的角色
如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:
- Cloud Run 服务的 Cloud Run Developer (
roles/run.developer) 角色 - 服务身份的 Service Account User (
roles/iam.serviceAccountUser) 角色
如果您要从源代码部署服务或函数,则还必须向您授予项目和 Cloud Build 服务账号的其他角色。
Cloud Run 资源的服务身份还必须具有以下角色:
- Traffic Director Client (
roles/trafficdirector.client) - Cloud Trace Agent (
roles/cloudtrace.agent)
如需向服务身份授予这些角色,请使用 gcloud:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID." \ --role="roles/trafficdirector.client" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID." \ --role="roles/cloudtrace.agent"
替换以下内容:
- PROJECT_ID:您的 Google Cloud 项目 ID。
- RUN_CLIENT_SA:附加到 Cloud Run 服务的服务账号的名称。
如果服务身份缺少这些角色,Cloud Run 资源仍会部署,但使用 Ambient Networking 的功能将无法正常运行。
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 服务与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
配置 Ambient Networking
使用 gcloud 或 YAML 文件配置 Ambient Networking。
gcloud
如需在新服务上启用 Ambient Networking,请传递
--ambient-networking标志,并视需要传递--ambient-scope标志:gcloud beta run deploy SERVICE \ --image=IMAGE_URL \ --ambient-networking \ --ambient-scope=SCOPE \ --region=REGION
如需在现有服务上启用 Ambient Networking,请将相同的标志传递给
gcloud beta run services update命令,该命令会部署启用了 Ambient Networking 的新修订版本:gcloud beta run services update SERVICE \ --ambient-networking \ --ambient-scope=SCOPE \ --region=REGION
如需停用 Ambient Networking,请传递
--no-ambient-networking标志:gcloud beta run services update SERVICE \ --no-ambient-networking \ --region=REGION
替换以下内容:
- SERVICE:Cloud Run 服务的名称。
IMAGE_URL:对容器映像的引用,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式。- SCOPE:Ambient Networking 范围,
global或regional。 - REGION:服务所在的区域。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
添加
run.googleapis.com/ambient-networking注解,并视需要添加run.googleapis.com/ambient-scope注解:spec: template: metadata: annotations: run.googleapis.com/ambient-networking: 'true' run.googleapis.com/ambient-scope: SCOPE
将 SCOPE 替换为Ambient Networking 范围,即
global或regional。如需停用 Ambient Networking,请将run.googleapis.com/ambient-networking设置为'false',并移除run.googleapis.com/ambient-scope注解。使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
查看 Ambient Networking 设置
如需查看 Cloud Run 服务的当前 Ambient Networking 设置,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开服务详情页面。
点击网络标签页。
在Ambient networking卡片中,查看范围设置。
gcloud
使用以下命令:
gcloud beta run services describe SERVICE \ --region=REGION
在返回的配置中找到
run.googleapis.com/ambient-networking和run.googleapis.com/ambient-scope注解。
后续步骤
- 了解 Cloud Run 上的 Agent Gateway。
- 了解如何为 Cloud Run 配置 Agent Platform 功能。
- 了解 Cloud Run 中的服务到服务身份验证。
- 了解如何使用 Cloud Trace 跟踪请求。