2. Azure虚拟网络规划与设计
Azure虚拟网络(VNet)是Azure中所有私有网络能力的承载底座。它既是虚拟机、容器、数据库、应用网关等资源的网络边界,也是混合连接、服务发布、访问控制与DNS解析的统一作用域。规划阶段做出的地址空间、子网、对等互联、终结点与DNS决策,会直接决定后续能否平滑扩展、能否与本地数据中心互通、能否满足安全合规要求。本节围绕五个相互关联的设计维度展开:地址空间划分、子网设计、VNet对等互联、服务端点与私有终结点、DNS解析策略。
地址空间划分:先定边界,再谈细分
VNet的地址空间使用RFC 1918私有地址段,常见选择是10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。规划的第一步不是“选一个网段”,而是建立全局地址规划表,把Azure区域、本地数据中心、分支机构、其他云环境都纳入同一张表,避免重叠。地址重叠是VNet对等互联和VPN/ExpressRoute互通最常见的失败原因,一旦重叠,后续只能通过NAT或重建网络来补救。
建议按“区域—环境—用途”三层结构分配。例如企业总部本地为10.10.0.0/16,Azure东亚生产环境使用10.20.0.0/16,Azure东亚测试环境使用10.21.0.0/16,Azure东南亚生产环境使用10.30.0.0/16。每个VNet内部再按子网用途细分。地址空间可以在创建后追加,但不能删除已分配的前缀,因此预留增长空间比一次性精确分配更重要。一个实用经验是:单个VNet地址空间至少预留一倍增长余量,子网则按预计IP消耗量的2~3倍规划。
需要特别注意的是,Azure会从每个子网中保留5个IP地址:网络地址、默认网关、DNS映射、网络地址转换和广播地址。例如/24子网有256个地址,实际可用251个。若子网需要承载大量Pod或弹性伸缩实例,应按可用地址而非总地址计算。
子网设计:按职责隔离,而非按资源堆叠
子网是VNet内应用安全策略、路由和委派的基本单位。设计原则是“按职责划分”,而不是把所有虚拟机塞进一个默认子网。典型分层包括:Web/应用网关子网、应用服务子网、数据层子网、管理跳板机子网、AzureBastion子网、私有终结点子网、GatewaySubnet等。
其中GatewaySubnet是保留名称,用于VPN网关或ExpressRoute网关,必须命名为GatewaySubnet,且建议使用/27或更大前缀,以支持未来双活网关和更多连接。AzureBastionSubnet同样是保留名称,建议至少/26。私有终结点通常集中放在专用子网中,便于统一管理私有IP分配和NSG策略。
子网设计还要考虑委派。例如Azure Container Instances、Azure NetApp Files、应用服务环境等需要将子网委派给特定服务。委派后的子网不能再用于其他用途,因此应在规划阶段单独预留。下面给出一个可直接参考的规划示例表:
| 子网名称 | 示例前缀 | 用途 | 关键约束 |
|---|---|---|---|
| GatewaySubnet | 10.20.0.0/27 | VPN/ExpressRoute网关 | 保留名称,不可部署业务资源 |
| AzureBastionSubnet | 10.20.0.32/26 | Bastion安全跳板 | 保留名称,至少/26 |
| snet-web | 10.20.1.0/24 | 应用网关与前端 | 可关联NSG与UDR |
| snet-app | 10.20.2.0/24 | 应用服务器 | 按需委派 |
| snet-data | 10.20.3.0/24 | 数据库与缓存 | 限制入站来源 |
| snet-pe | 10.20.4.0/24 | 私有终结点 | 集中管理私有IP |
VNet对等互联:打通而不重叠
VNet对等互联(VNet Peering)让两个VNet通过Azure骨干网私网互通,流量不经过公网。对等互联分为区域内对等和全局对等,后者跨区域但延迟仍由Azure骨干网保证。对等互联是非传递的:A与B对等、B与C对等,A与C默认不通,需要显式建立A-C对等或使用中心辐射(Hub-Spoke)加网关/路由设备。
中心辐射是常见拓扑:Hub VNet承载共享服务(防火墙、DNS、网关、Bastion),Spoke VNet承载业务。Spoke之间通过Hub中的防火墙或路由实现受控互通。对等互联建立后,还需检查地址空间不重叠、NSG允许相应流量、UDR路由正确指向防火墙。若使用网关传输,Hub网关可被Spoke借用,但需在 peering 上启用“允许网关传输”和“使用远程网关”。
服务端点与私有终结点:两种不同的私网访问路径
服务端点(Service Endpoint)把VNet子网与Azure PaaS服务(如Storage、SQL Database、Key Vault)通过Azure骨干网直连,PaaS服务仍使用其公共DNS名称和公共IP,但流量不再经过公网。启用服务端点后,可在PaaS资源防火墙中限制“仅允许来自该子网的访问”。服务端点配置简单、无额外费用,但PaaS资源仍暴露公共终结点,且只支持部分服务。
私有终结点(Private Endpoint)则在VNet子网中为PaaS资源分配一个私有IP,通过Private Link把服务映射到该IP。访问时使用私有DNS名称解析到私有IP,公共终结点可被禁用。私有终结点适合对数据外泄敏感、需要完全私网访问、或需要跨VNet/本地访问的场景。两者对比如下:
| 维度 | 服务端点 | 私有终结点 |
|---|---|---|
| 访问入口 | PaaS公共IP,经骨干网 | 子网内私有IP |
| DNS | 仍用公共DNS名称 | 需私有DNS区域解析 |
| 本地访问 | 不直接支持 | 可通过VPN/ER访问 |
| 费用 | 无额外费用 | 按终结点和流量计费 |
| 适用 | 快速限制来源 | 完全私网、防外泄 |
DNS解析策略:名字解析决定流量走向
DNS是虚拟网络中最容易被低估的一环。Azure默认提供168.63.129.16的Azure DNS,可解析Azure公共域名和VNet内资源名称,但不解析私有终结点所需的私有DNS名称,也不解析本地AD域名。因此需要组合使用:
- Azure DNS私有区域:为 privatelink.blob.core.windows.net、privatelink.database.windows.net 等创建私有区域,并把A记录指向私有终结点IP,再链接到需要解析的VNet。
- 自定义DNS服务器:在VNet中指定本地DNS或Azure DNS Private Resolver,实现本地与Azure域名互解。
- DNS转发:本地DNS把Azure私有区域查询转发到Azure DNS,Azure DNS把本地域名查询转发到本地DNS,形成双向解析。
一个常见做法是:Hub VNet部署DNS Private Resolver或自定义DNS虚拟机,所有Spoke VNet的DNS服务器指向Hub;私有DNS区域链接到Hub和所有Spoke;本地DNS配置条件转发器,把privatelink相关区域转发到Hub DNS。这样无论从Azure还是本地访问,私有终结点名称都能解析到正确私有IP。
综合来看,Azure虚拟网络规划不是一次性配置,而是一套需要持续维护的地址与解析体系。地址空间决定可扩展边界,子网决定安全与委派粒度,对等互联决定拓扑连通性,服务端点与私有终结点决定PaaS访问路径,DNS决定名称到IP的最终映射。五者一致,网络才能既通又可控。