3. 环境规划与网络设计
容器应用平台能否稳定上线,往往不取决于镜像本身,而取决于网络边界是否被提前规划清楚。Azure 容器应用(Azure Container Apps,简称 ACA)运行在托管环境中,但它并不是一个“网络黑盒”:通过虚拟网络集成,你可以把环境放进自己的 VNet,让容器应用与数据库、缓存、内部服务、本地数据中心处在同一套可治理的地址空间里。本节围绕生产级网络拓扑,讲清四件事:环境如何接入 VNet、子网如何委派、私有终结点如何暴露 PaaS 服务、入站与出站流量分别走哪条路径。
一、先分清两种环境:外部环境与内部环境
ACA 环境在创建时就要决定入站可达性。外部环境(External)会获得一个公网可解析的入口,适合面向互联网的 API 或前端;内部环境(Internal)只在 VNet 内可达,适合内部微服务、后台任务和只允许内网访问的业务系统。这个选择直接决定后续 DNS、入口证书和访问控制策略,因此应在环境规划阶段确定,而不是等应用部署后再改。
当环境启用 VNet 集成后,ACA 会在你指定的子网中注入基础设施组件,容器实例的出站流量默认经由该子网进入 VNet,再按路由和防火墙规则出网。这意味着:子网不是随便挑一个空网段,而是整个平台出站行为的起点。
二、子网委派:把子网“交给”容器应用
VNet 集成要求使用一个委派给 Microsoft.App/environments 的专用子网。委派的作用是声明该子网由容器应用环境独占管理,避免其他资源(如虚拟机、负载均衡器)占用同一地址空间导致冲突。规划时建议:
- 子网前缀至少 /27(32 个地址)起步,生产环境建议 /24 或更大,为环境基础设施和后续扩容留余量;
- 该子网只用于 ACA 环境,不与业务子网、数据库子网混用;
- 子网所在 VNet 的地址空间要与本地网络、其他 VNet 不重叠,否则对等互联和 VPN 会失败;
- 委派在创建环境前完成,创建后子网类型不可随意更改。
下面这张图给出一个典型生产拓扑:左侧是 VNet 地址空间,中间是委派子网与私有终结点子网,右侧是入站与出站两条流量路径。
三、私有终结点:让 PaaS 服务只在内网可达
生产环境里,数据库、缓存、镜像仓库通常不应暴露公网。私有终结点(Private Endpoint)会在你指定的子网中为 PaaS 服务分配一个私有 IP,并把该服务的访问入口从公网切换到 VNet 内部。以 Azure SQL 为例,典型做法是:
- 在 10.10.2.0/24 子网创建 SQL Server 的私有终结点,得到 10.10.2.4 之类的私有 IP;
- 在私有 DNS 区域 privatelink.database.windows.net 中注册 A 记录,使
myserver.database.windows.net解析到该私有 IP; - 把 SQL Server 的公共网络访问设为 Disabled,只保留私有终结点;
- 容器应用通过连接字符串访问,解析结果落在 VNet 内,流量不出公网。
这里最容易出问题的是 DNS。如果 VNet 没有关联私有 DNS 区域,容器仍会解析到公网地址,私有终结点就形同虚设。因此建议把私有 DNS 区域集中管理,并通过 VNet 链接关联到容器环境所在 VNet。
四、入站与出站:两条路径要分别治理
入站路径由环境入口统一承接。外部环境的入口暴露在公网,请求先到环境级 Envoy 入口,再按应用 Ingress 配置转发到具体容器端口;内部环境的入口只在 VNet 内可达,适合内部调用。入站治理的重点是:只暴露必要端口、启用 HTTPS、按应用配置访问控制,而不是让每个容器各自对外。
出站路径从委派子网出发。默认情况下,容器出站流量经 VNet 的默认路由出网;生产环境通常通过用户定义路由(UDR)把 0.0.0.0/0 指向 Azure 防火墙或 NAT 网关,实现统一出口、固定源 IP 和出站审计。例如:
# 出站路由示例(UDR)
AddressPrefix: 0.0.0.0/0
NextHopType: VirtualAppliance
NextHopIpAddress: 10.10.4.4 # Azure 防火墙私有 IP
# 容器访问私有终结点时,走 VNet 内部路由,不匹配 0.0.0.0/0
# 因此私有终结点流量不会被强制绕行防火墙,除非显式配置
需要注意:如果出站被强制到防火墙,而私有终结点的流量也被错误地引向防火墙,可能导致解析或连接异常。规划时应让私有终结点子网与委派子网之间的流量走 VNet 本地路由,仅把真正需要出公网的流量交给防火墙。
五、生产级拓扑的落地检查
把上述要素组合起来,一个可落地的生产拓扑通常包含:一个不重叠的 VNet 地址空间;一个委派给 Microsoft.App/environments 的 /24 子网;一个专用于私有终结点的子网;一个用于运维和网关的业务子网;出站经防火墙或 NAT 统一出口;私有 DNS 区域关联到 VNet。上线前建议逐项确认:
| 检查项 | 判断标准 |
|---|---|
| 子网委派 | 委派类型为 Microsoft.App/environments,且子网未被其他资源占用 |
| 地址空间 | 与本地网络、其他 VNet 无重叠 |
| 私有终结点 DNS | 从容器内解析 PaaS 域名得到 10.10.2.x 私有 IP |
| 出站路径 | 容器访问公网时源 IP 为防火墙/NAT 出口 IP,日志可查 |
| 入站暴露面 | 仅必要应用开放入口,内部服务使用内部环境 |
网络设计不是一次性任务。随着应用数量增长,你可能需要新增私有终结点、调整出站策略或接入更多 VNet。把子网、DNS、路由和入口策略作为环境级基线固定下来,后续扩容才不会反复推翻拓扑。