你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多租户解决方案中的网络体系结构方法

部署到 Azure 的所有解决方案都需要某种形式的网络。 如何与 Azure 网络服务交互取决于解决方案的设计和工作负荷。 本文提供有关 Azure 上多租户解决方案的网络方面的注意事项和指南。 它包括有关较低级别的网络组件(如虚拟网络)的信息,并扩展到更高级别和应用程序层方法。

注意

Azure 是一个多租户环境,其许多网络组件也一样。 无需了解设计自己的解决方案的详细信息,但可以 详细了解 Azure 如何将虚拟网络流量与其他客户的流量隔离开来。

关键考虑因素和要求

基础结构和平台服务

网络组件注意事项取决于所使用的服务类别。

基础结构服务

使用基础结构服务(如虚拟机(VM)或 Azure Kubernetes 服务(AKS)时,请考虑并设计支撑服务连接的虚拟网络。 另请考虑需要合并到设计中的其他安全层和隔离层。 避免完全依赖网络层控制

平台服务

使用 Azure 平台服务(如 Azure 应用服务、Azure Cosmos DB 或 Azure SQL 数据库)时,体系结构将确定所需的网络服务。

若要将平台服务与 Internet 隔离,请使用虚拟网络。 根据所使用的服务,可以使用 专用终结点 或虚拟网络集成资源,例如 Azure 应用程序网关。 还可以通过其公共 IP 地址提供平台服务,并使用服务自己的保护(如防火墙和标识控制)。 在这些情况下,可能不需要部署和配置自己的虚拟网络。

根据以下因素决定是否对平台服务使用虚拟网络:

  • 合规性要求:可能需要满足特定的合规性标准。 某些标准要求以特定方式配置 Azure 环境,例如使用特定的网络控制。 有关详细信息,请参阅 多租户解决方案中治理和合规性的体系结构方法

  • 租户的要求: 即使组织没有为网络层隔离或控制定义要求,租户也可能如此。 清楚地了解租户如何计划访问解决方案,以及他们是否对其网络设计有任何假设。

  • 复杂性: 虚拟网络引入了复杂性。 确保团队清楚地了解避免部署不安全环境所涉及的原则。

确保了解使用专用网络的含义

调整子网大小

如果需要部署虚拟网络,请仔细考虑整个虚拟网络的大小和地址空间,包括子网。

了解如何将 Azure 资源部署到虚拟网络以及每个资源使用的 IP 地址数。 如果部署特定于租户的计算节点、数据库服务器或其他资源,请创建足够大的子网,以便预期租户增长和 资源水平自动缩放

同样,使用托管服务时,请了解它们如何使用 IP 地址。 例如,将 AKS 与 Azure 容器网络接口(CNI)配合使用时,从子网使用的 IP 地址数取决于节点数、水平缩放方式和服务部署过程等因素。 在虚拟网络集成中使用应用服务和 Azure Functions 时, 使用的 IP 地址数取决于计划实例数

规划子网时,请查看子网分段指南

公共或专用访问

请考虑租户是否需要通过 Internet 或专用 IP 地址访问服务。

若要保护服务进行基于 Internet(公共)的访问,请使用防火墙规则、IP 地址允许列表和拒绝列表、共享机密和密钥以及基于标识的控制。

若要使租户能够使用专用 IP 地址连接到服务,请考虑使用 Azure 专用链接服务跨租户虚拟网络对等互连。 对于某些受限的方案,还可以考虑使用 Azure ExpressRoute 或 Azure VPN 网关启用对解决方案的专用访问。 通常,只有少量租户,并且为每个租户部署专用虚拟网络时,此方法才有意义。

访问租户的终结点

请考虑是否需要将数据发送到租户网络内部或外部的终结点。 例如,可以调用客户提供的 Webhook 或将实时消息发送到租户的系统。

如果需要将数据发送到租户的终结点,请考虑以下常见方法:

  • 通过 Internet 启动从解决方案到租户终结点的连接。 请考虑连接是否必须源自静态 IP 地址。 根据所使用的 Azure 服务,可能需要通过部署 Azure NAT 网关、防火墙或负载均衡器来使用网络地址转换(NAT)。

  • 部署 代理 以启用 Azure 托管服务与客户网络之间的连接,而不考虑其位置。

  • 考虑将 Azure 事件网格等服务(可能与 事件域一起使用)进行单向消息传送。

要考虑的方法和模式

本部分介绍在多租户解决方案中要考虑的一些关键网络方法。 它从核心网络组件的较低级别方法开始,然后介绍 HTTP 和其他应用程序层问题的方法。

租户特定的虚拟网络,其中选择了服务提供商的 IP 地址

在某些情况下,需要代表租户在 Azure 中运行专用虚拟网络连接资源。 例如,可以为每个租户运行 VM,或者可能需要使用专用终结点来访问特定于租户的数据库。

请考虑使用所控制的 IP 地址空间为每个租户部署虚拟网络。 此方法使你能够出于自己的目的将虚拟网络对等互连,例如建立 中心辐射型拓扑 以集中控制流量流入和出口。

如果租户需要直接连接到创建的虚拟网络(例如使用虚拟网络对等互连),请避免使用服务提供商选择的 IP 地址。 选择的地址空间可能与其现有地址空间冲突。

具有租户所选 IP 地址的特定于租户的虚拟网络

如果租户需要将自己的虚拟网络与代表其管理的虚拟网络对等互连,请考虑使用租户选择的 IP 地址空间部署特定于租户的虚拟网络。 此设置使每个租户都能够确保系统虚拟网络中的 IP 地址范围不会与其自己的虚拟网络重叠,这可实现对等互连的兼容性。

但是,这种方法可能会阻止你将租户的虚拟网络对等互连或采用 中心辐射型拓扑。 对等虚拟网络不能使用重叠的 IP 地址范围,当租户选择自己的 IP 地址范围时,他们可能会选择彼此重叠的范围。

中心辐射型拓扑

中心 辐射型虚拟网络拓扑 使你能够将集中式 中心 虚拟网络与多个 辐射 虚拟网络对等互连。 可以集中控制虚拟网络的流量流入和出口,并控制每个辐射虚拟网络中的资源是否可以相互通信。 每个分支虚拟网络还可以访问共享组件(如 Azure 防火墙),并可能使用 Azure DDoS 防护等服务。

使用中心辐射型拓扑时,请规划 限制,例如对等互连虚拟网络的最大数量。 不要对每个租户的虚拟网络使用重叠的地址空间。

部署使用所选 IP 地址的特定于租户的虚拟网络时,请考虑使用中心辐射型拓扑。 每个租户的虚拟网络将成为辐射型网络,可以在中心虚拟网络中共享公共资源。 当跨多个虚拟网络缩放共享资源或使用 部署标记模式时,还可以使用中心辐射型拓扑。

提示

如果解决方案跨越多个地理区域,请在每个区域中部署单独的中心和中心资源,以防止流量跨多个 Azure 区域。 这种做法会产生更高的资源成本,但会降低请求延迟并减少全局对等互连费用。

静态 IP 地址

请考虑租户是否需要你的服务将静态公共 IP 地址用于入站流量和/或出站流量。 不同的 Azure 服务以不同的方式启用静态 IP 地址。

使用 VM 和其他基础结构组件时,请考虑对入站和出站静态 IP 寻址使用负载均衡器或防火墙。 请考虑使用 Azure NAT 网关来控制出站流量的 IP 地址。 有关详细信息,请参阅 多租户的 Azure NAT 网关注意事项。

使用平台服务时,使用的特定服务决定了如何控制 IP 地址。 可能需要以特定方式配置资源,例如将资源(如 VM)部署到虚拟网络,然后使用 NAT 网关或防火墙。 或者,可以请求服务用于出站流量的当前 IP 地址集。 例如,应用服务提供了一个 API 和 Web 接口来获取应用程序的当前出站 IP 地址

代理

若要使租户能够接收解决方案发起的消息或访问租户网络中的数据,请考虑提供代理(有时称为 本地网关),这些代理在网络内部署。 无论租户的网络位于 Azure、另一个云提供商还是本地,都可以使用此方法。

代理启动与你指定和控制的终结点的出站连接。 它要么使长时间运行的连接保持活动状态,要么间歇性地进行轮询。 请考虑使用 Azure 中继建立和管理从代理到服务的连接。 代理建立连接时,它会进行身份验证,并包含有关租户标识符的一些信息,以便服务可以将连接映射到正确的租户。

代理通常会简化租户的安全配置。 打开入站端口可能很复杂且有风险,尤其是在本地环境中。 代理无需租户承担此风险。

Microsoft为租户网络连接提供代理的服务包括以下示例:

专用链接服务 提供从租户的 Azure 环境到解决方案的专用连接。 租户还可以将专用链接服务与自己的虚拟网络配合使用,从本地环境访问服务。 Azure 使用专用 IP 地址安全地将流量路由到服务。

有关详细信息,请参阅 多租户和专用链接

域名、子域和 TLS

在多租户解决方案中使用域名和传输层安全性(TLS)时, 请查看主要注意事项

网关路由和网关卸载模式

网关路由模式网关卸载模式涉及部署第 7 层反向代理或网关。 网关为多租户应用程序提供核心服务,包括以下功能:

  • 将请求路由到特定于租户的后端或部署标记
  • 处理特定于租户的域名和 TLS 证书
  • 使用 Web 应用程序防火墙检查安全威胁请求 (WAF)
  • 缓存响应以提高性能

Azure 提供了多个服务,这些服务可以实现其中一些或全部目标,包括 Azure Front Door、应用程序网关和 Azure API 管理。 还可以使用 NGINX 或 HAProxy 等软件部署自己的自定义解决方案。

如果计划为解决方案部署网关,最佳做法是首先生成完整的原型。 包括所有必需的功能,并验证应用程序组件是否按预期运行。 还应了解网关组件如何缩放以支持流量和租户增长。

静态内容托管模式

静态内容托管模式为云原生存储服务的 Web 内容提供服务,并使用内容分发网络来缓存内容。

可以将 Azure Front Door 或其他内容分发网络用于解决方案的静态组件(例如单页 JavaScript 应用程序)和静态内容(如图像文件和文档)。

根据解决方案的设计,你可能还可以缓存内容分发网络中特定于租户的文件或数据,例如 JSON 格式的 API 响应。 这种做法可帮助你提高解决方案的性能和可伸缩性。 确保租户特定的数据保持足够隔离,以防止租户中的数据泄漏。 请考虑如何规划从缓存中清除特定于租户的内容,例如,在更新数据或部署新的应用程序版本时。 通过在 URL 路径中包含租户标识符,可以控制是清除特定文件、与特定租户相关的所有文件,还是所有租户的所有文件。

要避免的反模式

无法规划虚拟网络连接

将资源部署到虚拟网络可以显著控制流量如何流经解决方案的组件。 但是,虚拟网络集成还引入了更复杂的、成本以及需要考虑的其他因素,尤其是对于平台即服务(PaaS)组件。

在生产环境中实施网络策略之前,测试和规划网络策略以识别任何问题。

未针对限制进行规划

Azure 强制实施许多影响网络资源的限制。 这些限制包括 Azure 资源限制和基本协议与平台限制。 例如,在平台服务(如应用服务和 Azure Functions)上构建大规模多租户解决方案时,可能需要考虑 传输控制协议(TCP)连接数和源网络地址转换(SNAT)端口的数量。 使用 VM 和负载均衡器时,还需要考虑 出站规则SNAT 端口的限制。

子网太小

调整每个子网的大小以支持计划部署的资源或资源实例数,尤其是在缩放时。 使用 PaaS 资源时,请了解资源的配置和缩放如何影响其子网中所需的 IP 地址数。

网络分段不当

如果解决方案需要虚拟网络,请考虑如何配置 网络分段 来控制入站和出站流量(称为 南北流量),以及解决方案内的流量(称为 东西部流量)。 确定租户是否应有自己的虚拟网络,或者是否应在共享虚拟网络中部署共享资源。 更改方法可能很困难,因此在选择适用于未来增长目标的方法之前,请仔细考虑所有要求。

仅依赖于网络层安全控制

在新式解决方案中,应将网络层安全性与其他安全控制相结合。 不要只依赖于防火墙或网络分段。 此方法有时称为 零信任网络。 使用基于标识的控件验证解决方案的每个层的客户端、调用方或用户。 请考虑使用允许添加额外保护层的服务。 选项取决于你使用的 Azure 服务。 在 AKS 中,请考虑使用服务网格进行相互 TLS 身份验证,并应用 网络策略 来控制东西部流量。 在应用服务中,请考虑使用内置支持进行身份验证和授权以及访问限制

在不进行测试的情况下重写主机头

使用网关卸载模式时,可能会考虑重写 HTTP 请求的 Host 标头。 这种做法可以通过将自定义域和 TLS 管理卸载到网关来简化后端 Web 应用程序服务的配置。

Host 标头重写可能会导致某些后端服务出现问题。 如果应用程序发出 HTTP 重定向或 Cookie,主机名不匹配可能会中断应用程序的功能。 具体而言,使用在多租户基础结构(如应用服务和 Azure Functions)上运行的后端服务时,可能会出现此问题。 有关详细信息,请参阅 主机名保留最佳做法

使用计划使用的网关配置测试应用程序的行为。

作者

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

  • John Downs |Azure 模式和做法的主要软件工程师

其他参与者:

若要查看非公开的LinkedIn个人资料,请登录LinkedIn。