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

与登陆区域集成的 Azure Spring Apps

Azure 应用程序网关
Azure Key Vault
Azure Spring Apps

此参考体系结构在 Azure 登陆区域中部署 Azure Spring Apps 基线体系结构

在这种情况下,贵组织希望工作负载使用由中心团队(平台)管理的联合资源。集中管理示例包括用于本地连接的网络、标识访问管理和策略。 本指南假定组织已采用 Azure 登陆区域来应用一致的治理,并跨多个工作负载节省成本。

重要

此参考体系结构是 云采用框架 中的 Azure Spring Apps 登陆区域方案指南的一部分。 最佳做法适用于希望满足先前期望的工作负载所有者

工作负载部署在组织预配的 Azure 应用程序登陆区域订阅中。 作为工作负载所有者,你拥有此订阅中的资源。

工作负载取决于共享资源的 Azure 平台登陆区域订阅。 平台团队拥有这些资源。 然而,你有责任与这些团队一起推动要求,以便工作负载按预期运作。 本指南将这些要求注释为平台团队

强烈建议了解 Azure 登陆区域的概念。

此体系结构中所做的设计选择涵盖在关键技术设计领域。 有关详细信息,请参阅云采用框架中的 Azure Spring Apps 登陆区域

提示

GitHub 徽标 该体系结构由 GitHub 上的示例实现提供支持,后者演示了一些设计选项。 将实现视为迈向生产的第一步。

体系结构

下图描绘了此方法的体系结构:

显示登陆区域中 Azure Spring Apps 工作负载的体系结构的关系图。

此体系结构的典型用途包括:

  • 专用应用程序:在混合云环境中部署的内部应用程序。
  • 公共应用程序:面向外部的应用程序。

这些用例除安全性和网络流量规则的配置外都相似。

组件

以下各节介绍此体系结构的组成部分。 这些组成部分根据所有权责任进行划分,以帮助你确定与组织的平台团队共享的内容。 有关 Azure 服务的产品文档,请参阅相关资源部分。

应用程序团队拥有的资源

你的团队负责创建和维护以下资源。

  • Azure Spring Apps 标准在 Azure 中托管 Java Spring Boot 应用程序。

  • 应用程序网关 Standard_v2 是将传入 Web 流量路由到 Azure Spring Apps 的反向代理。 此 SKU 已集成 Azure Web 应用程序防火墙,用于检查流量中的 Open Web Application Security Project (OWASP) 漏洞。

  • Azure 虚拟机充当管理操作的跳转盒。

  • Azure Database for MySQL 存储应用程序数据。

  • Azure Key Vault 存储机密和配置,例如到数据库的连接字符串。

  • Log Analytics 是 Azure Monitor 的一项功能,也称为 Azure Monitor 日志。 Log Analytics 是存储来自应用程序和 Azure 服务的日志和指标的监视接收器。

  • Azure Application Insights 用作应用程序性能管理 (APM) 工具,用于收集所有应用程序监视数据并将其直接存储在 Log Analytics 中。

平台团队拥有的资源

此体系结构假定以下资源已存在。 组织的中心团队拥有并维护这些资源。 应用程序依赖于这些服务来减少操作开销并优化成本。

  • Azure 防火墙检查和限制出口流量。

  • Azure Bastion 提供对管理跳转框的安全访问。

  • Azure ExpressRoute 提供从本地到 Azure 基础结构的专用连接。

  • Azure DNS 提供了跨界名称解析。

  • Azure VPN 网关 将应用程序与本地网络中的远程团队连接。

应用程序注意事项

参考实现包括示例应用程序,其说明了 Azure Spring Apps 实例中托管的典型微服务应用程序。 以下各节提供了有关托管应用程序的详细信息。 有关更多信息,请参阅 PetClinic商店示例

服务发现

在微服务模式中,必须支持服务注册表功能来路由用户请求和服务到服务通信。

服务应该能够与其他服务进行通信。 生成新实例时,它们会被添加到注册表中,以便可以动态地发现它们。 在此体系结构中,托管 Spring Cloud 服务注册表 (OSS) 已为 Azure Spring Apps 启用。 此服务维护实时应用实例的注册表、启用客户端负载平衡,并从客户端分离服务提供程序,而无需依赖域名服务 (DNS)。

Azure Spring Apps 实例实现网关路由模式,该模式为外部流量提供单一入口点。 网关将传入请求路由到注册表中找到的活动服务实例。 在本设计中,模式是通过 Spring Cloud 网关的开放源代码实现来实现的。 它提供了包括身份验证和授权、复原功能以及速率限制的功能集。

配置服务器

对于微服务,配置数据必须与代码分离。 在此体系结构中,Azure Spring Apps Config Server 可通过支持本地存储和 Git 存储库的可插入存储库管理资源。

冗余

可以在建立 Azure Spring Apps 实例时使用可用性区域。

有了这一功能,Azure Spring Apps 可以自动将基本资源分布在基础 Azure 基础结构的逻辑部分中。 此分配提供更高级别的可用性,防止出现硬件故障或计划内维护事件。

区域冗余可确保基础虚拟机 (VM) 节点在所有可用性区域中均匀分布。 但区域冗余并不能保证应用实例的均匀分布。 如果应用实例因其所在区域出现故障而失败,Azure Spring Apps 会在另一个可用性区域的节点上为此应用创建一个新的应用实例。

如果在 Azure Spring Apps 中启用自己的资源(例如,自己的持久存储),请为资源启用区域冗余。 有关详细信息,请参阅如何在 Azure Spring Apps 中启用自己的持久性存储

并非所有地区都支持可用性区域。 若要查看哪些地区支持可用性区域,请参阅支持可用性区域的 Azure 区域

可伸缩性

Azure Spring Apps 提供现成自动缩放功能,使应用能够基于指标阈值或在特定时间范围内进行缩放。 当应用需要根据不断变化的要求进行纵向扩展或横向扩展时,建议使用自动缩放。

Azure Spring Apps 还支持使用 CPU、每个实例的内存/GB 和应用实例计数手动扩展应用程序。 这种类型的缩放适用于可能希望为某些应用执行的一次性缩放活动。 调整值以满足应用程序的缩放需求,并确保这些设置在每个属性的最大限制内。

重要

通过调整设置来手动缩放应用程序与 Azure 门户中自动缩放设置的手动缩放选项不同。

网络注意事项

在此设计中,工作负载依赖于平台团队拥有的资源(用于访问本地资源、控制出口流量等)。 有关详细信息,请参阅 Azure Spring Apps 登陆区域:网络拓扑和连接

网络拓扑

平台团队决定网络拓扑。 此体系结构假定使用中心辐射型拓扑。

中心虚拟网络

连接订阅包含由整个组织共享的中心虚拟网络。 此网络包含由平台团队拥有和维护的网络资源。 此体系结构包含以下平台团队资源:

  • Azure 防火墙,用于控制到 Internet 的出站流量。
  • Azure Bastion,提供对管理跳转框的安全访问。
辐射虚拟网络

应用程序登陆区域至少有一个预先预配的虚拟网络,其与中心网络对等。 你拥有此网络中的资源,例如用于路由和保护从 Internet 到 Azure Spring Apps 的入站 HTTP/s 连接的负载均衡器。

预先预配的虚拟网络和对等互连必须能够支持工作负载的预期增长。 估计虚拟网络大小,并定期与平台团队一起评估要求。 有关信息,请参阅虚拟网络要求

重要

平台团队

  • 在创建的虚拟网络上分配 Azure Spring Apps 资源提供程序 Owner 权限。
  • 为参与对等互连的虚拟网络提供不同的地址。
  • 分配足够大的 IP 地址空间以包含服务运行时和部署资源,并支持可伸缩性。

VNet 注入和子网划分

Azure Spring Apps 通过 VNET 注入过程部署到网络中。 此过程会将应用程序与 Internet、专用网络中的系统、其他 Azure 服务,甚至服务运行时隔离。 根据网络规则,允许或拒绝来自应用程序的入站和出站流量。

隔离是通过子网实现的。 你负责在辐射型虚拟网络中分配子网。 Azure Spring Apps 需要一个用于服务运行时的专用子网和一个用于 Java Spring Boot 应用程序的专用子网。

这两个子网必须专用于单一 Azure Spring Apps 实例。 多个实例不能共享同一个子网。

每个子网的最小大小为/28。 实际大小取决于 Azure Spring Apps 可以支持的应用程序实例的数量。 有关详细信息,请参阅使用较小的子网范围

警告

所选子网大小不能与现有虚拟网络地址空间重叠。 此大小也不应与任何对等互连或本地子网地址范围重叠。

网络控制措施

从 Internet 到辐射型虚拟网络的入站流量受到带有 Web 应用程序防火墙的 Azure 应用程序网关的限制。 Web 应用程序防火墙规则允许或拒绝 HTTP/s 连接。

网络内的流量通过使用子网上的网络安全组 (NSG) 进行控制。 NSG 根据配置的 IP 地址和端口筛选流量。 在此设计中,NSG 放置于所有子网上。 Azure Bastion 子网允许来自 Internet、网关服务、负载均衡器和虚拟网络的 HTTPS 流量。 仅允许从子网到虚拟网络的 RDP 和 SSH 通信。

专用链接用于控制 Azure Spring Apps 和其他 Azure 服务之间的连接,例如访问密钥保管库和数据库。 专用终结点放置于单独的子网中。

应用程序主机 DNS 记录应存储在 Azure 专用 DNS 中,以确保在地理失败期间持续可用。

尽管连接订阅具有专用 DNS 区域,但请创建自己的 Azure 专用 DNS 区域来支持专用终结点访问的服务。

重要

平台团队

  • 将 Azure 专用 DNS 区域委派给应用程序团队。
  • 在中心网络中,将 DNS 服务器值设置为默认值(Azure 提供),以支持应用程序团队管理的专用 DNS 区域。

必须限制来自虚拟网络的出站流量,以防止数据外泄攻击。 此流量通过集中式 Azure 防火墙(下一跃点)进行路由,其允许或拒绝使用完全限定的域名(FQDN)的流。

重要

平台团队

  • 为自定义路由创建 UDR。
  • 分配 Azure 策略,阻止应用程序团队创建没有新路由表的子网。
  • 向应用程序团队提供足够的基于角色的访问控制 (RBAC) 权限,以便他们可以根据工作负载的要求扩展路由。

标识和访问管理

工作负载的标识实现必须与组织最佳做法保持一致,以确保应用程序不会违反组织安全性或治理边界。 有关详细信息,请参阅 Azure Spring Apps 登陆区域:标识和访问管理

建议使用 Microsoft Entra ID 对与 Azure Spring Apps 实例交互的用户和服务进行身份验证。

建议的方法是为应用程序启用适用于 Azure 资源的 Microsoft Entra 托管标识,以支持应用对其他服务进行自我身份验证。 在此体系结构中,为了便于管理,使用了系统分配的托管标识。

对于授权,在授予权限时应用最小权限原则,使用 Azure 基于角色的访问控制 (RBAC)。

监视注意事项

Azure 登陆区域平台在管理订阅中提供共享的可观测性资源。 但是,建议预配自己的监视资源,以简化工作负载的总体管理。 有关详细信息,请参阅 Azure Spring Apps 登陆区域:监视操作

此体系结构创建以下资源:

  • Azure Application Insights 是应用程序性能监视 (APM) 解决方案,通过 Java 代理完全集成到服务中。 此代理可让你了解所有已部署的应用程序和依赖关系,而无需额外的代码。
  • Azure Log Analytics 工作区作为从 Azure 服务和应用程序收集的所有日志和指标的统一接收器。

配置 Azure Spring Apps 实例以将诊断日志从应用程序发送到已设置的 Log Analytics 工作区。 有关详细信息,请参阅监视应用程序端到端

收集其他 Azure 服务的日志和指标。 为跳转盒启用启动诊断,以便可以在虚拟机启动时捕获事件。

配置诊断设置以将所有其他 Azure 资源的资源日志发送到 Log Analytics 工作区。 在资源日志路由到目标之前,不会收集它们。 每个 Azure 资源需有自身的诊断设置。

来自多个工作区的数据关联

工作负载及其基础结构组件生成的日志和指标保存在工作负载的 Log Analytics 工作区中。 但是,由集中式服务(如 Active Directory 和 Azure 防火墙)生成的日志和指标会保存到由平台团队管理的中央 Log Analytics 工作区。 将来自不同接收器的数据进行关联可能会导致复杂性。

假设在用户流中,工作负载依赖于集中式服务。 部分数据可能在工作负载级别收集,并导出到与平台日志关联的中央 Log Analytics 工作区。

但是,由于数据量、格式互操作性或安全性约束等问题,其他条目可能只存在于工作负载的工作区中。 单一用户流的两个或多个工作区中存在的不相关日志条目,可能会使解决某些问题变得更加困难。 这些增加的复杂性需要团队协同工作,对应用程序事件进行故障排除。

要帮助进行这种类型的协作,需要熟悉组织设置的过程。 当发生安全性事件时,工作负载级别的管理员可能会被要求查看其系统的日志,以寻找恶意活动的迹象,或者将其日志的副本提供给事件处理程序进行进一步分析。 当工作负载管理员对应用程序问题进行故障排除时,他们可能需要平台管理员的帮助来关联来自企业网络、安全性或其他平台服务的日志条目。

重要

平台团队

  • 授予基于角色的访问控制 (RBAC) 以查询和读取相关平台资源的日志接收器。
  • AzureFirewallApplicationRuleAzureFirewallNetworkRuleAzureFirewallDnsProxy 启用日志。 应用程序团队需要监视来自应用程序的流量以及对 DNS 服务器的请求。
  • 为应用程序团队授予足够的权限来执行其操作。

有关详细信息,请参阅 Azure Spring Apps 登陆区域:监视操作

运行状况探测

Azure 应用程序网关使用运行状况探测来确保传入流量路由到响应后端实例。 建议使用 Azure Spring Apps 就绪情况、运行情况和启动探测。 如果出现失败,这些探测可以帮助实现正常终止。 有关详细信息,请参阅如何配置运行状况探测

安全注意事项

作为平台的一部分,集中式团队提供网络和标识控制。 然而,工作负载应该提供安全性,以减少攻击面。 有关详细信息,请参阅 Azure Spring Apps 登陆区域:安全性

静态数据

静态数据应当加密。 应用程序本身是无状态的。 任何数据都保存在外部数据库中,在此数据库中,体系结构使用 Azure Database for MySQL。 此服务对运行查询时创建的数据(包括备份和临时文件)进行加密。

传输中的数据

传输中的数据应当加密。 用户浏览器和 Azure 应用程序网关之间的流量必须加密,以确保在传输过程中不会发生更改。 在此体系结构中,Azure 应用程序网关仅接受 HTTPS 流量并协商 TLS 握手。 此检查是通过应用程序网关子网上的 NSG 规则强制执行的。 TLS 证书在部署期间直接加载。

从应用程序网关到 Azure Spring Apps 实例的流量被重新加密,以确保只有安全流量到达应用程序。 Azure Spring Apps 服务运行时接收该流量并充当 TLS 终止点。 从这时起,应用程序内的服务间通信不会加密。 然而,与其他 Azure PaaS 服务和服务运行时的通信是通过 TLS 进行的。

可以选择通过 Azure Spring Apps 实现端到端 TLS 通信。 考虑此权衡。 这可能会对延迟和操作产生负面影响。

应检查传输中的数据是否存在漏洞。 Web 应用程序防火墙与应用程序网关集成,并进一步检查阻止流量的 OWASP 漏洞。 可以配置 Web 应用程序防火墙来检测、监视和记录威胁警报。 或者,可以设置此服务来阻止规则检测到的入侵和攻击。

DDOS 保护

分布式拒绝服务 (DDoS) 可能会使系统的请求负担过重,从而导致系统瘫痪。 在基础结构级别为所有 Azure 服务启用了基本 DDoS 保护,以抵御此类攻击。 考虑升级到 Azure DDoS 防护服务,以利用监控、警报和应用程序的能力设置阈值等。 有关更多信息,请参阅 Azure DDoS 防护服务常见问题

机密管理

Microsoft 的零信任安全方法要求将机密、证书和凭据存储在安全的保管库中。 建议的服务为 Azure Key Vault。

根据 Azure 服务和意图,还有其他存储机密的方法。 此体系结构实现以下方法:

  • 证书在部署期间加载。
  • 到 MySQL 的连接是使用服务连接器实现的。

成本优化策略

由于分布式系统设计的特性,基础结构的扩展成为现实。 这种现实会导致意外的不可控成本。 Azure Spring Apps 使用可缩放的组件构建,因此可以满足需求并优化成本。 此体系结构的基础是 Azure Kubernetes 服务 (AKS)。 此服务旨在降低管理 Kubernetes 的复杂性和运营开销,其中包括提高群集的运营成本效率。

可以将不同的应用程序和应用程序类型部署到 Azure Spring Apps 的单个实例。 该服务支持由指标或计划触发的应用程序的自动缩放,可提高利用率和成本效益。

还可以使用 Application Insights 和 Azure Monitor 降低运营成本。 利用综合性日志记录解决方案提供的可见性来实现自动化,以实时扩展系统的组件。 还可以分析日志数据,以显示应用程序代码中的低效情况,对其加以解决来改善系统的整体成本和性能。

方案部署

Azure Spring Apps 登陆区域 GitHub 存储库中提供了此参考体系结构的部署。 部署使用 Terraform 模板。

此存储库中的项目提供了可以对环境进行自定义的基础。 此实现创建具有共享资源的中心网络,例如用于说明目的的 Azure 防火墙。 此分组可以映射到单独的登陆区域订阅,以保持工作负载和平台功能的分离。

要部署体系结构,请按照分步说明进行操作。

Enterprise 层的 VMware 支持

如果想要为实时部署提供托管 VMware Tanzu® 支持,请考虑升级到 Azure Spring Apps Enterprise 层。 VMware Tanzu® 服务注册表是为 Azure Spring Apps 集成的,允许服务发现和注册。

对于网关路由,可以切换到 VMware Spring Cloud 网关。 它提供了包括身份验证和授权、复原功能以及速率限制的功能集。

在 Enterprise 层,Tanzu 的应用程序配置服务可以管理从一个或多个 Git 存储库中定义的属性填充的 Kubernetes 本机 ConfigMap 资源。

此层还支持其他 VMware 服务。 有关详细信息,请参阅 Azure 市场中的企业层

参考实现支持 Azure Spring Apps 企业 SKU 作为部署选项。 在此选项中,存在一些体系结构更改。 它使用 Azure Database for PostgreSQL 灵活服务器的实例,该实例使用 Azure虚拟网络集成和 Azure Cache for Redis 通过专用终结点进行部署。 示例应用程序是 Fitness Store 应用

后续步骤

有关此体系结构中使用的 Azure 服务的产品文档,请参阅以下文章:

有关其他实现方案,请参阅以下文章: