博客 | NGINX

全新开源现代应用参考架构

NGINX-F5-horiz-black-type-RGB 的一部分
Damian Curry 缩略图
达米安·库里
2021 年 8 月 24 日发布

在 NGINX,我们在过去几年中一直在谈论使应用真正现代化和适应性的必要性——可移植、云原生、有弹性、可扩展且易于更新。 最近,出现了两个有助于促进现代应用程序的创建和交付的概念。 第一个是平台运营,其中企业级平台团队负责管理、维护、连接和保护开发和 DevOps 团队完成工作所需的所有工具。 第二个是左移,这意味着在开发生命周期的早期阶段将生产级安全性、网络和监控集成到应用中。 开发人员最终对过去属于 ITOps 的功能承担了更多的责任,但同时在如何实现这些功能方面拥有更多的选择和更多的独立性。

虽然这听起来不错,但实际上实施平台运营以及“左移”基础设施和运营工具却具有挑战性。 首先,越来越多的应用程序以高度分布式的方式部署在容器化的环境中,并使用越来越多的 Kubernetes 编排引擎之一。 公司还希望在多种环境中部署他们的应用程序,而不会因云之间以及云和本地环境之间的差异而受到困扰。

现代应用程序的“黄金映像”

正如他们应该的那样,我们的客户和社区继续请求我们帮助他们应对所面临的挑战。 他们想要所有的优点,但要将所有的部分——安全性、网络、可观察性和性能监控、扩展——结合在一起,需要真正的工作。 要使最终的平台足够强大以适应生产环境还需要做更多的工作。 他们想知道: “为什么没有一个针对现代应用程序的‘黄金镜像’,让我们可以从单个 repo 启动它?”

这是一个好问题,我们把它视为我们自己的挑战,以找到一个好的答案。 首先,我们以更具体的术语重新阐述了这个问题。 我们认为我们的客户和社区正在问这个问题: “您能否帮助我们将不同的软件产品集成为一个更具凝聚力的整体,调整堆栈以确定正确的配置和设置,并为我们节省工作和麻烦? 并且,您是否可以更轻松地在不同的云中运行应用,而无需由于底层服务和功能的差异而进行重大的配置更改?”

我们认为真正解决这些问题的解决方案将有利于整个社区 - 而不仅仅是我们在数百家企业的合作伙伴和所有主要的云供应商 - 真正的非零和胜利。 理想情况下,解决方案不是一个“玩具”,而是可靠、经过测试且可在 Kubernetes 环境中运行的实时生产应用中部署的代码。 坦率地说,我们希望任何人都能够直接从 GitHub 窃取我们的成果。

长话短说,今天在NGINX Sprint 2.0上我们宣布推出我们的解决方案:现代应用参考架构(MARA)的第一次迭代,这是一个用于现代应用的开源架构和部署模型。 我们希望您喜欢它、使用它、窃取它,甚至更好的是,修改它或分叉它以改进或定制它。 这篇文章介绍了我们所构建的内容以及它的工作原理。

NGINX 现代应用参考架构拓扑图
NGINX 现代应用参考架构

定义现代自适应applications

首先,让我们定义理想的现代、随需而变,感知可控的应用。 它可能由微服务组成,进行容器化,并遵循云原生设计原则(松散耦合、易于扩展、不受基础设施约束)——但不一定非得如此。 现代应用的精神之一就是专门设计架构以利用基础设施抽象。 这个定义很简单但很重要,因为它为所有参考架构建立了基本模板。

现代应用架构的关键支柱包括可移植性、可扩展性、弹性和灵活性。

  • 可移植性——可以轻松地在多种类型的设备和基础设施、公共云和本地部署应用。
  • 可扩展性——该应用程序可以快速无缝地扩大或缩小规模,以适应世界任何地方的需求激增或减少。
  • 弹性——应用程序可以优雅地故障转移到不同可用区域、云或数据中心中新启动的集群或虚拟环境。
  • 敏捷性——应用程序可以通过自动化 CI/CD 管道快速更新;在现代应用程序世界中,这也意味着更高的代码速度和更频繁的代码推送。

设计我们的参考架构

我们希望创建一个满足现代应用程序定义和部署模式的基本要求的平台。 除了技术目标之外,我们还希望阐明现代应用程序设计原则并鼓励我们的社区在 Kubernetes 上部署。 是的,我们希望提供“可窃取”的代码,供开发人员、DevOps 和平台运营团队使用、修改和改进。 简而言之,我们想要提供:

  • 一种易于部署、可用于生产的 Kubernetes 架构,它不是玩具
  • 重点介绍合作伙伴产品如何在 Kubernetes 上运行的平台
  • 一键轻松构建和部署 Kubernetes Ingress 控制器
  • 未来产品和联盟整合的测试环境
  • 可插入的部署框架
  • 单一开源源代码库可简化发现和采用

以下是我们为平台的第一个版本做出的设计和合作伙伴选择(有关下一个版本的计划,请参阅版本 2 中的更多集成和更多灵活性)。 我们坚信,让我们的参考应用程序包容合作伙伴是推动合作伙伴和社区参与的关键。

代码如何部署

要安装和部署示例应用,您需要发出一个命令来调用启动脚本,然后按指示的顺序执行以下 Pulumi 项目。 每个项目名称都映射到相对于存储库根目录的目录名。 有关详细信息,请参阅README

vpc - 定义并安装与 EKS 一起使用的 VPC 和子网 └─eks - 部署 EKS
└─ecr - 配置 ECR 以在 EKS 集群中使用
└─kic-image-build - 构建新的 NGINX Ingress Controller 映像
└─kic-image-push - 将上一步构建的镜像推送到 ECR
└─kic-helm-chart - 将 NGINX Ingress Controller 部署到 EKS
簇
└─logstore - 将弹性日志存储部署到 EKS 集群
└─logagent - 将 Elastic (filebeat) 日志代理部署到
EKS 集群
└─certmgr - 将 cert-manager.io Helm 图表部署到 EKS
簇
└─anthos - 将 Bank of Anthos应用到 EKS
簇

版本 2 中具有更多集成和更高灵活性

我们认识到,我们最初的努力可能无法提供您的 Kubernetes 环境所需的所有集成。 平台操作涉及智能(但不是无限)的选择。 为了让平台运营、DevOps 和开发团队更轻松地尝试并可能采用我们的新参考平台,我们计划在短期内进行许多改进,包括:

  • 建立 Digital Ocean、OpenShift、Rancher、vSphere 和其他 Kubernetes 环境
  • 与 NGINX Controller 集成> 来管理和监控 NGINX Plus Ingress Controller

    [编辑– NGINX 控制器现在是F5 NGINX 管理套件。]

  • NGINX App Protect提供开箱即用的配置
  • 与 F5 产品和服务(如BIG‑IP云服务Volterra)集成
  • NGINX 服务网格和基于 Istio 的Aspen Mesh集成
  • Terraform和其他自动化工具原生集成
  • 支持其他 CI/CD 选项
  • 为基础设施和应用服务部署单独或多个集群

我们希望我们的工作可以成为其他参考平台的框架和构建所有类型的差异化现代应用的“可窃取”的起点。 因为 Kubernetes 是一种非常强大的机制,既能用于构建现代应用,又能支持平台操作和左移文化,所以我们的参考架构越广泛、越可插入,就越好。 我们很高兴看到您、社区对我们工作的看法,更重要的是,您用它构建了什么。

开始使用参考架构

下载我们的参考平台并试用。 让我们知道您的想法以及您希望我们下一步构建什么。 非常欢迎拉取请求。 我们渴望与您合作,共同开发下一代现代的、适应性强的、可窃取的、为社区和所有开发人员带来回报的应用。

相关文章

这篇文章是系列文章的一部分。 随着我们不断增加 MARA 的功能,我们会在博客上发布详细信息:


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”