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