当您在 Azure 中部署 PostgreSQL 灵活服务器作为企业云环境的一部分时,了解此服务如何适应 Azure 网络范例变得很重要。 许多人听说过不同的 Azure VNET 集成模式,包括 Azure Private Link 和 VNET Injection,并希望了解 Azure Database for PostgreSQL – Flexible Server 如何与它们一起工作。
在本博客中,我们将深入研究灵活服务器网络架构,并讨论它如何适合您的组织云环境设置。

Azure PaaS 服务和专用网络集成模式
PaaS(平台即服务)服务,例如 Azure Database for PostgreSQL – 灵活服务器,对高级 IT 功能的民主化访问,使用更传统的计算范式,只有拥有足够资源(财务和技术)来获得的超大型组织才能负担得起并管理底层基础设施。然而,一些 PaaS 服务的公共性质成为在许多安全敏感场景中采用它们的挑战。 Microsoft azure 支持三种虚拟网络 (VNET) 集成模式,以使 PaaS 服务只能从部署在 Azure VNET 中的客户端访问,而不能从 Internet 访问。由于不同公共 PaaS 服务之间存在架构差异,因此需要多种模式。
-
VNet 注入是服务的 VNet 集成模式,其体系结构基于可部署(也称为“注入”)到实例所有者的 VNet 中的专用资源。 VNet 注入服务通常部署到一个专用子网,该子网不能包含用户部署的任何其他服务(例如虚拟机)。这在 Azure 文档中称为子网委派,每个注入 VNet 的服务都需要自己的委派子网。 VNet 注入的服务通过属于 VNet 地址空间的 IP 地址公开。更具体地说,他们可以启动与同一 VNet(或通过 VNet 对等连接到它的其他 VNet)中的虚拟机的连接和接收连接,以及启动与本地主机的连接和接收来自本地主机的连接通过 VPN 隧道或 ExpressRoute;
下图 1 显示了 VNET 注入的典型架构

图 1. VNET 注入网络架构 -
VNet 服务终结点是一种 VNet 集成模式,可应用于选择具有共享体系结构的 Azure PaaS 服务,使它们只能从授权的 VNet/子网访问。虚拟网络 (VNet) 服务终结点通过 Azure 主干网络上的优化路由提供与 Azure 服务的安全和直接连接。终结点允许您将关键的 Azure 服务资源仅保护到您的虚拟网络。服务终结点使 VNet 中的专用 IP 地址能够访问 Azure 服务的终结点,而无需 VNet 上的公共 IP 地址。服务端点确实有一些限制或缺点。重要的是要了解到服务终结点的流量仍在离开您的虚拟网络,并且仍在其公共地址上访问 Azure PaaS 资源。默认情况下,服务终结点不能由来自本地、通过 VPN 或 Express Route 的流量使用,只能用于来自 Azure 虚拟网络的流量。如果您想允许,您的本地资源访问也需要将其公共 IP 列入白名单。
在下面的图 2 中,虚拟机具有专用 IP 地址 10.1.1.4,但可以通过服务端点访问存储帐户。本地流量无法使用服务终结点,必须通过 Internet 访问存储帐户。

图 2. Azure 网络服务端点的体系结构
Private Link 是另一种具有共享架构的服务集成模式。它通过属于用户 VNet 地址空间的私有 IP 地址公开具有共享架构的选定 PaaS 服务,从而解决 VNet 服务端点的限制。与 VNET 注入不同,专用链接不会阻止 Internet 客户端通过其公共端点访问服务。但是,所有支持 Private Link 的服务都提供了防火墙功能,可以将其配置为阻止来自 Internet 的所有连接(或仅接受来自已知、受信任的公共 IP 的连接)。此功能与专用链接相结合,使用户能够将其 PaaS 服务实例完全私有化,即只能通过属于 VNet 地址空间的专用 IP 地址从授权的 VNet 访问。关于专用链接的一个重要细节要记住,专用链接目前仅在预览版中支持 NSG。

图 3. 专用链路网络架构图
与 Microsoft Azure Database for PostgreSQL 的虚拟网络集成 – 灵活的服务器
作为一项具有专用资源的服务,并适合追求最高级别网络隔离和安全性的体系结构,Azure Database for PostgreSQL – 灵活服务器利用 VNET 注入作为其与 Azure 网络的集成模式。
VNET 注入被选为一种网络集成模式,因为它通过设计提供了最高的网络隔离,而无需像上面列出的其他模式那样配置防火墙或 IP 白名单。该技术还与 Azure 上使用专用资源的知名高级数据库服务(Azure SQL 数据库托管实例)以及其他流行的 Azure 产品(如应用服务环境和 Redis 缓存)配合良好。自采用以来,我们从许多重视网络安全和隔离的大客户那里听到了非常积极的评价,认为该解决方案带来了“开箱即用”,并且与这些客户的企业云设计配合得很好。
这种模式对某些客户的限制是需要创建单独的委派子网来托管 Azure 灵活服务器。您可以为子网指定的最小范围是 /28,它提供 14 个 IP 地址,其中 5 个将由 Azure 内部使用,而具有 HA 功能的单个灵活服务器使用 4 个地址。您可以通过在单个子网中托管多个 PostgreSQL 服务器并在必要时对等连接到 Postgres 的客户端所在的其他 VNET 来解决此问题并增加委派子网的管理开销。
基于下面图 4 中的架构图,这里有一些关于使用灵活服务器的网络部署基础知识需要记住的要点:
- 虚拟网络包含子网(子网)。子网使您能够将虚拟网络分割成更小的地址空间。 Azure 资源部署到虚拟网络中的特定子网中。您的灵活服务器必须位于委派的子网中。也就是说,只有 Azure Database for PostgreSQL - 灵活服务器实例可以使用该子网。委派的子网中不能有其他 Azure 资源类型。但是,如果子网大小支持,您可以将多个灵活服务器实例部署到同一个委派子网中。
- 部署在同一 vnet 内不同子网上的应用程序可以直接访问灵活服务器。部署在不同 VNET 上的应用程序无法直接访问灵活的服务器。您必须先执行私有 DNS 区域 VNET 对等互连,然后他们才能访问灵活服务器
- 仔细规划您的灵活服务器部署 - 将灵活服务器部署到虚拟网络和子网后,您无法将其移动到另一个虚拟网络或子网。您不能将虚拟网络移动到另一个资源组或订阅中。

图 4. 灵活的服务器 Azure 虚拟网络设置
使用 Hub 和 Spoke 模型和自定义 DNS 服务进行网络部署
Hub and Spoke 是 Azure 中大型企业客户使用的越来越流行的网络拓扑。在 Hub-Spoke 网络体系结构中,Hub 是 Azure 上的一个虚拟网络,用作与本地的网络的连接点。可以通过 VPN 站点到站点或通过 ExpressRoute 完成此连接。辐条是运行与集线器对等互连的虚拟网络,可用于隔离工作负载。我们经常看到在连接到本地 DNS 服务器的 Hub VNET 中部署了自定义 DNS 服务器。由于分支虚拟网络通过 Hub 虚拟网络连接,因此客户端可以直接与您的灵活服务器实例连接。要使 DNS 正常工作,您必须为 DNS 域 postgres.database.azure.com 域添加条件转发器。此条件转发器必须指向 Azure DNS IP 地址:168.63.129
这种网络架构通常用于在连接方面需要这些特性的场景:
- 部署在不同环境(开发、测试和生产)中的工作负载,需要访问 DNS、IDS、Active Directory 域服务 (AD DS) 等共享服务。共享服务将放置在 Hub 虚拟网络中,而各种环境(开发、测试和生产)将部署在 Spoke 网络中以保持高水平的隔离。
- 当某些工作负载不能与所有其他工作负载通信,而只能与共享服务通信时。
- 客户希望对与网络安全相关的方面进行高度控制,并且需要对网络流量进行隔离。
使用网络安全组和应用程序安全组进一步限制虚拟网络内的流量
网络安全组包含允许或拒绝入站网络流量或来自多种 Azure 资源的出站网络流量的安全规则。 NSG 可以应用于网络接口和子网。如果子网中的所有虚拟机都需要相同的安全规则,则将 NSG 应用于子网可简化规则管理。对于每个规则,您可以指定源和目标、端口和协议。 Microsoft 建议将 NSG 应用于接口或子网,但不要同时应用于两者。
为托管注入服务的子网定义和维护 NSG 和 UDR 可能是一项复杂的任务。为了降低 NSG 的复杂性,平台中引入了服务标签。服务标记表示来自给定 Azure 服务的一组 IP 地址前缀。 Microsoft 管理服务标签所包含的地址前缀,并在地址更改时自动更新服务标签,从而最大限度地降低频繁更新网络安全规则的复杂性。可在此处找到可用服务标签的完整列表。
Azure Database for PostgreSQL 的高可用性功能 - 灵活服务器需要能够将流量发送/接收到 Azure 虚拟网络子网中的目标端口 5432、6432,其中 Azure Database for PostgreSQL - 灵活服务器以及 Azure 存储用于日志存档。如果您创建网络安全组 (NSG) 以拒绝流量流入或流出您的 Azure Database for PostgreSQL - 在其部署的子网内的灵活服务器,请确保允许流量到子网内的目标端口 5432 和 6432,以及到 Azure使用服务标签 Azure 存储作为目标进行存储。
应用程序安全组 (ASG) 在 NSG 中用于将网络安全规则应用于特定工作负载或虚拟机组——由 ASG 定义为“网络对象”,并将显式 IP 地址添加到该对象。这提供了将虚拟机分组到相关组或工作负载中的能力,从而简化了 NSG 规则定义过程。
正如您所看到的,所有三种结构(NSG、ASG 和服务标签)都可以一起使用,以最大限度地减少您需要的数字安全规则并避免 IP 地址硬编码。
我们希望这篇博客文章对您有所帮助,并且始终对您计划如何在企业云环境中使用灵活服务器产品感兴趣。可以在以下文档中找到有关上述主题的其他信息:
- Azure Database for PostgreSQL – 灵活的服务器网络文档
- Azure 专用终结点
- 使用网络观察程序对 Azure 中的 NSG 进行故障排除
- 规划 Azure 虚拟网络
我们一直希望得到您的反馈,因此请通过电子邮件联系 Ask Azure DB for PostgreSQL。
原文标题:Private Networking Patterns in Azure Database for Postgres Flexible Server
原文作者:Gennady Kostinsky
原文地址:https://techcommunity.microsoft.com/t5/azure-database-for-postgresql/private-networking-patterns-in-azure-database-for-postgres/ba-p/3007149




