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

Azure Kubernetes 服务上的 WordPress

用于 Redis 的 Azure 缓存
Azure Front Door
Azure Kubernetes 服务 (AKS)
Azure 负载均衡器
Azure NetApp 文件

本文介绍了用于在 Azure 上托管大型存储密集型 WordPress 安装的容器解决方案。 该解决方案可最大程度地提高可伸缩性和安全性。 关键组件包括 Azure Front DoorAzure Kubernetes 服务 (AKS)Azure NetApp 文件

体系结构

AKS WordPress 部署的体系结构图。Azure NetApp 文件可存储静态内容。专用终结点提供对其他服务的访问。

下载此体系结构的 Visio 文件

注意

可以通过实现不特定于任何具体 WordPress 托管方法的提示和建议来扩展此解决方案。 有关部署 WordPress 安装的常规提示,请参阅 Azure 上的 WordPress

数据流

  • 用户可通过已启用 Azure Web 应用程序防火墙的 Azure Front Door 访问前端网站。
  • Azure Front Door 使用 Azure 负载均衡器的内部实例作为源。 内部负载均衡器是 AKS 的隐藏组件。 Azure Front Door 可检索未缓存的任何数据。
  • 内部负载均衡器会将入口流量分配到 AKS 中的 Pod。
  • Azure 密钥保管库可存储私钥等机密,即 X.509 证书。
  • WordPress 应用程序将使用专用终结点访问 Azure Database for MySQL 的灵活服务器实例。 WordPress 应用程序会从此托管数据库服务中检索动态信息。
  • 所有静态内容托管在 Azure NetApp 文件中。 该解决方案将 Astra Trident 容器存储接口 (CSI) 驱动程序与 NFS 协议配合使用。

组件

  • Azure Front Door 是一种新式云内容分发网络。 作为分布式服务器网络,Azure Front Door 可有效地向用户提供 Web 内容。 通过将缓存的内容存储在靠近最终用户的接入点位置中的边缘服务器上,内容分发网络可以在最大程度上减少延迟。
  • 借助 Azure 虚拟网络,已部署的资源可以彼此通信、与 Internet 通信、与本地网络通信。 虚拟网络提供了隔离和分段。 它们还可以筛选和路由流量,并可以在不同位置之间建立连接。 在此解决方案中,两个网络将通过虚拟网络对等互连进行连接。
  • Azure DDoS 防护提供了增强的 DDoS 缓解功能。 将这些功能与应用程序设计最佳做法相结合时,它们将有助于抵御 DDoS 攻击。 应在外围虚拟网络上启用 DDoS 防护。
  • 网络安全组可使用一组安全规则,以根据源或目标 IP 地址、端口及协议允许或拒绝入站或出站网络流量。 在此方案的子网中,网络安全组规则会限制应用程序组件之间的流量。
  • 负载均衡器会根据规则和运行状况探测结果来分配入站流量。 负载均衡器提供了低延迟和高吞吐量。 通过将流量分散到多个服务器,负载均衡器可提高传输控制协议 (TCP) 和用户数据报协议 (UDP) 应用程序的可伸缩性。 在此方案中,负载均衡器将流量从内容分发网络分发到前端 Web 服务器。
  • AKS 是一项完全托管的 Kubernetes 服务,可以使用它来轻松部署、管理和缩放容器化应用程序。
  • Azure NetApp 文件提供了完全托管的性能密集型和对延迟敏感的存储解决方案。 在此解决方案中,Azure NetApp 文件将托管所有 WordPress 内容,以便所有 Pod 有权访问数据。
  • Azure Cache for Redis 是一种内存中数据存储。 可以使用 Azure Cache for Redis 在此解决方案中托管键值缓存。 该缓存在所有 Pod 之间共享,并用于 WordPress 性能优化插件。
  • 密钥保管库可存储密码、证书和密钥并控制对它们的访问。
  • Azure Database for MySQL - 灵活服务器是基于开放源代码 MySQL 数据库引擎的关系数据库服务。 灵活服务器部署选项是一种完全托管的服务,可提供对数据库管理功能和配置设置的精细控制和灵活性。 在此方案中,Azure Database for MySQL 负责存储 WordPress 数据。

备选方法

  • 可以使用 AKS 群集中的自承载 Pod 作为缓存,而不是使用 Azure Cache for Redis 托管服务。
  • 可以使用 Rook-Ceph 存储 等自承载解决方案,而不是使用 Azure NetApp 文件等托管存储解决方案。 有关详细信息,请参阅如何在 Azure Kubernetes 服务上使用 Rook Ceph

方案详细信息

此示例方案适用于 WordPress 的大型存储密集型安装。 此部署模型可以缩放以满足站点流量高峰。

可能的用例

  • 使用 WordPress 作为内容管理系统的高流量博客
  • 使用 WordPress 的企业或电子商务网站

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

可靠性

可靠性可确保应用程序符合你对客户的承诺。 有关详细信息,请参阅可靠性支柱概述

在部署此解决方案时,请考虑以下建议:

  • 该解决方案使用 AKS 中的 Pod 和负载均衡器来分配入口流量。 此方法可提供高可用性,即使发生 Pod 失败也是如此。
  • 该解决方案支持多个区域、数据复制和自动缩放。 组件会将流量分配到 Pod。 使用运行状况探测,以便仅将流量分发到运行正常的 Pod。
  • 所有网络组件位于 Azure Front Door 前面。 使用此方法,在发生导致流量中断并影响最终用户访问的问题时,网络资源和应用程序可以复原。
  • Azure Front Door 是一项全球服务,支持部署在另一个区域中的虚拟机规模集。
  • 在使用 Azure Front Door 缓存所有响应时,可以获得少许可用性优势。 具体而言,如果源未响应,你仍然可以访问内容。 但缓存不提供完整的可用性解决方案。
  • 要提高可用性,请在配对区域之间复制 Azure NetApp 文件存储。 有关详细信息,请参阅使用 Azure NetApp 文件进行跨区域复制
  • 要提高 Azure Database for MySQL 的可用性,请按照可满足需求的高可用性选项进行操作。

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

在部署此解决方案时,请考虑采用以下最佳做法:

  • 使用 Azure Front Door 上的 Web 应用程序防火墙来帮助保护流入前端应用程序层的虚拟网络流量。 有关详细信息,请参阅 Azure Front Door 上的 Web 应用程序防火墙
  • 不允许出站 Internet 流量从数据库层流出。
  • 不允许对专用存储禁用公共访问,并禁用对资源的公共访问。 将专用终结点用于 Azure Database for MySQL、Azure Cache for Redis、密钥保管库和Azure 容器注册表。 有关详细信息,请参阅 Azure 专用链接

有关 WordPress 安全性的详细信息,请参阅常规 WordPress 安全性和性能提示Azure 安全性文档

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

在部署此解决方案时,请查看以下成本注意事项:

  • 流量预期(GB/月)。 流量是影响成本最大的因素。 你接收的流量的量决定了所需的 AKS 节点数以及出站数据传输的价格。 流量的量还与内容分发网络提供的数据量直接相关,其中出站数据传输成本更低。
  • 托管数据量。 请务必将托管的数据量考虑在内,因为 Azure NetApp 文件定价是基于预留容量的。 要优化成本,请保留数据所需的最小容量。
  • 写入百分比。 考虑你向网站写入多少新数据,以及存储这些数据的成本。 对于多区域部署,写入网站的新数据量与跨区域镜像的数据量相关联。
  • 静态内容与动态内容。 监视数据库存储性能和容量,以确定价格较低的 SKU 是否可以支持你的站点。 数据库可存储动态内容和内容分发网络缓存静态内容。
  • AKS 群集优化。 要优化 AKS 群集成本,请遵循 AKS 的常规提示操作,例如有关 VM 大小和 Azure 预留的指导。 有关详细信息,请参阅 AKS 成本优化

性能效率

性能效率是指工作负荷能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率要素概述

此方案使用 AKS 中的 Pod 来托管前端。 使用自动缩放功能,运行前端应用程序层的 Pod 数量可以自动缩放,以响应客户需求。 还可以根据已定义的计划进行缩放。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中应用程序的缩放选项

重要

为了实现最佳性能,必须装载使用 NFS 协议版本 4.1 的永久性卷。 以下 YAML 示例演示了如何为此目的配置 PersistentVolume 对象。 请注意 mountOptions 字段的值。

kind: PersistentVolume
...
    accessModes:
    - ReadWriteMany
    mountOptions:
    - vers=4.1
    nfs:
      server: xx.xx.xx.xx

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

  • Adrian Calinescu | 高级云解决方案架构师

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

后续步骤

产品文档:

Microsoft 培训模块: