你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在多租户解决方案中使用容器应用的注意事项
Azure 容器应用可用于在无服务器平台上运行微服务和容器化应用程序。 本文将介绍对多租户解决方案非常有用的部分容器应用功能。 还提供指向可在规划阶段提供帮助的指南的链接。
隔离模型
在处理使用容器应用的多租户系统时,需要确定所需的隔离级别。 容器应用支持不同的多租户模型:
- 可以使用共享环境实现受信任的多租户。 例如当租户全部来自组织内部时,此模型可能适用。
- 可以通过为每个租户部署单独的环境来实现不受信任的多租户。 例如当你不信任租户运行的代码时,此模型可能适用。
下表汇总了容器应用的主要租户隔离模型之间的差异。 本文的稍后部分会对这些模型进行介绍。
注意事项 | 每个租户各一个环境 | 特定于租户的容器应用 | 共享容器应用 |
---|---|---|---|
数据隔离 | 高 | 低 | 低 |
性能隔离 | 高 | 中。 无网络隔离。 | 低 |
部署复杂性 | 中型 | 低到中 | 低 |
操作复杂性 | 中等 | 低 | 低 |
资源成本 | 高 | 低 | 低 |
示例方案 | 在独立环境中运行不受信任的多租户工作负载,以确保安全性和合规性 | 针对受信任的多租户应用程序优化成本、网络资源和操作 | 在业务逻辑级别实现多租户解决方案 |
共享容器应用
你可能需要考虑在用于所有租户的单个容器应用环境中部署共享容器应用。
这通常是最经济高效的方法,其所需的运营开销最低,因为要管理的资源更少。
但若要使用此隔离模型,应用程序代码必须要能感知多租户。 此隔离模型不保证在网络、计算、监视或数据级别实现隔离。 应用程序代码必须处理租户隔离。 若你不信任多租户工作负载中运行的代码,则该模型不适用。
此外,此模型还可能受到近邻干扰问题的影响:某一租户的工作负载可能会影响另一租户的工作负载的性能。 如果需要提供专用吞吐量来缓解此问题所带来的影响,共享容器应用模型可能不适用。
注意
当租户属于不同的成本模型时,部署标记模式非常有用。 例如,租户可能会被分配到共享或专用容器应用环境,具体取决于其定价层。 采用此部署策略,可以超越每个区域单个订阅的容器应用限制,并随着租户数量的增长而线性缩放。
特定于租户的容器应用
你可以考虑采用的另一种方法是通过在共享环境中部署特定于租户的容器应用来隔离租户。
此隔离模型能在每个租户之间实现逻辑隔离。 它提供以下优势:
- 成本效益。 通过共享容器应用环境、虚拟网络和其他附加资源(如 Log Analytics 工作区),通常可以降低每个租户的总体成本以及管理工作的复杂性。
- 将升级和部署分开。 能够以独立于同一环境中其他容器应用的方式部署和升级每个租户的应用程序二进制文件。 当你需要在不同时间将不同的租户升级到代码的特定版本时,此方法非常有用。
- 资源隔离。 环境中的每个容器应用都分配到了自己的 CPU 和内存资源。 如果某个特定的租户需要更多的资源,则可以为该租户的特定容器应用分配更多 CPU 和内存。 请记住,容器应用的总 CPU 和内存分配是存在限制的。
但该方法不提供租户之间的硬件或网络隔离。 单个环境中的所有容器应用都共享同一虚拟网络。 要能保证部署至应用的工作负载不会滥用共享资源。
容器应用具有对 Dapr 的内置支持,Dapr 采用模块化设计,以组件形式提供功能。 在容器应用中,Dapr 组件是环境级别的资源。 在多个租户之间共享单个环境时,请确保正确地将 Dapr 组件的范围限定为正确的特定于租户的容器应用,以保证实现隔离并避免数据泄露的风险。
注意
请勿使用修订为不同租户创建不同版本的应用。 修订不提供资源隔离。 修订适用于需要将多个版本的应用作为更新推出过程的一部分运行的部署方案,例如蓝/绿部署和 A/B 测试。
每个租户各一个环境
可以考虑为每个租户都部署一个容器应用环境。 容器应用环境是一组容器应用的隔离边界。 环境在数据平面上提供计算和网络隔离。 每个环境都部署到其自己的虚拟网络中,环境中的所有应用都共享此虚拟网络。 每个环境都有自己的 Dapr 和监视配置。
此方法提供最高级别的数据和性能隔离,因为每个租户的数据和流量都隔离至特定环境。 使用此模型时,应用程序不需要能够感知多租户。 使用此方法时,可以更精细地控制向环境中的容器应用分配资源的方式。 可以根据租户的要求确定分配方式。 例如,某些租户可能需要比其他租户更多的 CPU 和内存资源,因此你可以为这些租户的应用程序提供更多资源,同时享受特定于租户的环境提供的隔离。
但部署到每个区域的订阅中的环境数量限制很低。 在某些情况下,可以通过创建 Azure 支持票证来提升这些配额。
在实现此隔离模型之前,请务必了解租户数量的预期增长情况。 请记住,因为部署和管理需要额外的资源,所以此方法通常会产生较高的总拥有成本,且部署和操作也会更为复杂。
支持多租户的容器应用功能
自定义域名
借助容器应用,可以使用通配符 DNS 以及添加自己的通配符 TLS 证书。 使用特定于租户的子域时,通配符 DNS 和 TLS 证书使你能够轻松地将解决方案扩展到大量租户,且无需为每个新租户手动重新进行配置。
在容器应用中,可在环境级别管理证书。 还必须先为容器应用启用入口,然后才能将自定义域绑定到容器应用。
请求身份验证和授权
容器服务可以代表你的应用验证身份验证令牌。 如果请求不包含令牌、令牌无效或请求未得到授权,可以将容器应用配置为阻止请求或将其重定向到标识提供者,以便让用户登录。
如果租户使用 Microsoft Entra ID 作为标识提供者,可以将容器应用配置为使用 /common 终结点来验证用户令牌。 这样做可以确保无论用户的 Microsoft Entra 租户是什么,都会验证并接受其令牌。
还可以将容器应用与 Azure Active Directory B2C 集成,以便通过合作伙伴标识提供者进行用户身份验证。
有关详细信息,请参阅以下资源:
注意
容器应用中的身份验证和授权功能与 Azure 应用服务中的此类功能相似。 但存在一些差异。 有关详细信息,请参阅使用内置身份验证的注意事项。
托管标识
使用 Microsoft Entra ID 中的托管标识,可让容器应用能访问由 Microsoft Entra ID 进行身份验证的其他资源。 使用托管标识时,容器应用不需要管理服务到服务的通信的凭据。 可以向容器应用的标识授予特定权限,以实现基于角色的访问控制。
使用托管标识时,请勿忽略自己选择的隔离模型。 例如,假设你选择在所有租户之间共享容器应用,并部署特定于租户的数据库。 那么需要确保一个租户的应用程序无法访问不同租户的数据库。
有关详细信息,请参阅 Azure 容器应用中的托管标识。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Daniel Larsen | FastTrack for Azure 首席客户工程师
- Will Velida | FastTrack for Azure 客户工程师 2
其他参与者:
- John Downs | 首席软件工程师
- Chad Kittel | Microsoft 首席软件工程师
- Xuhong Liu | FastTrack for Azure 高级服务工程师
- Aarthi Murugan | CS Tech Strategy App Innovation 高级项目经理
- Kendall Roden | Azure 容器应用高级项目经理
- Paolo Salvatori | FastTrack for Azure 首席客户工程师
- 阿森·弗拉基米尔斯基|首席工程师,FastTrack for Azure
若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。