在NGINX,我们在过去几年中一直强调,需要让应用真正实现现代化并具备自适应能力,即可移植、云原生、有韧性、可扩展且易于更新。最近,有两个有助于构建和交付现代应用的概念日益受到关注。第一个是平台运维,即由企业级平台团队统一管理、维护、连接并保护开发和DevOps团队工作所需的所有工具。第二个是左移,即在开发生命周期的早期阶段,将生产级安全、网络和监控功能集成到应用中。开发人员需要承担更多过去由ITOps负责的职能,但同时也能以更多选择和更高自主性决定具体如何实现这些职能。
这些理念听起来不错,但在实际实施中,推行Platform Ops以及将基础设施和运维工具“左移”并非易事。首先,越来越多的应用采用高度分布式方式部署在容器化环境中,并使用数量不断增加的Kubernetes编排引擎之一。企业还希望在多个环境中部署应用,同时避免受困于不同云之间以及云环境与本地环境之间的差异。
现代应用的“黄金镜像”
客户和社区不断向我们寻求帮助,以应对他们面临的挑战,这也是理所当然的。他们希望获得所有这些优势,但要将安全、网络、可观测性和性能监控、扩展等各个部分整合起来,需要投入大量精力。要让由此构建的平台足够稳健,能够用于生产环境,还需要付出更多努力。他们不禁要问:“为什么没有一种可从单个代码仓库启动的现代应用‘黄金镜像’?”
这是一个好问题,我们也将其视为自身的挑战,努力给出令人满意的答案。首先,我们用更具体的方式重新表述了这个问题。我们认为,客户和社区真正想问的是:“能否帮助我们将不同的软件产品整合成一个更协调的整体,调优技术栈以确定合适的配置和设置,从而省去相关工作和麻烦?能否让应用更轻松地在不同云环境中运行,而不必因底层服务和功能的差异对配置进行重大更改?”
我们认为,真正解决这些问题的方案将惠及整个社区,而不仅仅是我们在数百家企业和各大云服务提供商中的合作伙伴。这将真正实现多方共赢。理想情况下,该方案不应只是一个“玩具”,而应是可靠、经过测试,并可随时部署到Kubernetes环境中实际生产应用的代码。坦率地说,我们希望任何人都能直接从GitHub上拿走我们的成果并加以利用。
长话短说,今天,我们在NGINX Sprint 2.0上宣布推出我们的解决方案:Modern Apps Reference Architecture(MARA)的首个版本。这是一种面向现代应用的开源架构和部署模型。我们希望大家喜欢它、使用它、直接拿来用,更希望大家通过修改或创建分支来改进或定制它。本文将介绍我们构建的内容及其工作原理。
NGINX现代应用参考架构
定义现代自适应应用
首先,我们来定义理想的现代自适应应用。它可能由微服务组成,采用容器化部署,并遵循云原生设计原则(松耦合、易于扩展、不依赖特定基础设施),但这些并非必要条件。现代应用的理念之一,是通过专门的架构设计来充分利用基础设施抽象。这一定义简单明了,却十分重要,因为它为所有参考架构确立了基本模板。
现代应用架构的关键支柱包括可移植性、可扩展性、韧性和敏捷性。
- 可移植性:可轻松将应用部署到多种类型的设备和基础设施,包括公有云和本地环境。
- 可扩展性,无论身处世界何地,应用都可以快速、无缝地扩缩容,以应对需求激增或下降。
- 韧性:应用可以平稳故障转移到不同可用区、云或数据中心中新启动的集群或虚拟环境。
- 敏捷性:应用可通过自动化CI/CD流水线快速更新;在现代应用领域,这也意味着代码迭代速度更快,代码推送更频繁。
设计参考架构
我们希望创建一个平台,满足现代应用定义和部署模式的基本要求。除了实现技术目标,我们还希望展示现代应用设计原则,并鼓励社区在Kubernetes上进行部署。此外,我们希望提供可供开发人员、DevOps和平台运维团队直接借鉴、试用、修改和改进的代码。简而言之,我们希望提供:
- 一种易于部署、可用于生产环境的Kubernetes架构,而非仅供演示的玩具
- 一个展示合作伙伴产品如何在Kubernetes上运行的平台
- 一键轻松构建和部署Kubernetes Ingress控制器
- 用于未来产品及合作伙伴集成的测试环境
- 可插拔的部署框架
- 单一开源代码仓库,简化发现和采用流程
以下是我们为平台第1版确定的设计和合作伙伴策略(有关下一版本的规划,请参阅“第2版:更多集成,更高灵活性”)。我们坚信,让参考应用广泛接纳合作伙伴,是促进合作伙伴和社区共同参与的关键。
- 开源开发:https://github.com/nginxinc/kic-reference-architectures/;我们与NGINX/F5社区合作构建了该代码库
- 部署目标:Amazon Elastic Kubernetes Service(EKS)
- 基础设施即代码自动化:Python和Pulumi,可接受Terraform配置方案以及使用几乎所有主流编程语言编写的自动化脚本
- Ingress Controller镜像:预构建的NGINX Plus,供订阅用户使用;预构建的NGINX Open Source,可从DockerHub获取;这两个版本也都可以从源代码构建
- 日志管理(存储和分析):Elastic,因为它深受用户欢迎
- 性能监控和仪表板:Prometheus和Grafana
- 持续开发(CD):Spinnaker
- TLS:cert-manager
- 演示应用:Google Bank of Anthos
代码部署方式
要安装和部署示例应用程序,只需运行一条命令来调用启动脚本,随后系统会按所示顺序执行以下Pulumi项目。每个项目名称都对应于相对于存储库根目录的一个目录名称。有关详细信息,请参阅README。
vpc - Defines and installs VPC and subnets to use with EKS └─eks - Deploys EKS
└─ecr - Configures ECR for use in EKS cluster
└─kic-image-build - Builds new NGINX Ingress Controller image
└─kic-image-push - Pushes image built in previous step to ECR
└─kic-helm-chart - Deploys NGINX Ingress Controller to EKS
cluster
└─logstore - Deploys Elastic log store to EKS cluster
└─logagent - Deploys Elastic (filebeat) logging agent to
EKS cluster
└─certmgr - Deploys cert-manager.io Helm chart to EKS
cluster
└─anthos - Deploys Bank of Anthos application to EKS
cluster版本 2:集成更丰富,灵活性更高
我们认识到,初期成果可能无法提供Kubernetes环境所需的全部集成。平台运维强调明智选择,但并非无限选择。为了便于平台运维、DevOps和开发团队试用并考虑采用我们的新参考平台,我们计划在近期进行多项改进,包括:
- 搭建Digital Ocean、OpenShift、Rancher、vSphere及其他Kubernetes环境
- 与NGINX Controller>集成,以管理和监控NGINX Plus Ingress Controller[编辑:NGINX Controller现已更名为F5 NGINX Management Suite。]
- 为NGINX App Protect提供开箱即用的配置
- 与F5产品和服务集成,例如BIG‑IP、Cloud Services和Volterra
- 与NGINX Service Mesh和基于Istio的Aspen Mesh集成
- 原生集成Terraform及其他自动化工具
- 支持其他CI/CD选项
- 为基础设施和应用服务部署独立集群或多个集群
我们希望,这项工作能够成为其他参考平台的框架,并为构建各类差异化现代应用提供一个可供借鉴的起点。Kubernetes不仅是构建现代应用的强大机制,也有助于增强平台运维能力并推动安全左移文化,因此,我们的参考架构越具扩展性和可插拔性,就越能发挥价值。我们期待了解社区对这项工作的看法,更期待看到大家以此构建出怎样的成果。
开始使用参考架构
下载我们的参考平台,亲自体验一下。欢迎告诉我们您的想法,以及希望我们接下来构建哪些内容。我们非常欢迎拉取请求。我们期待与您携手打造新一代现代、灵活且可供借鉴的应用,为社区和所有开发者持续创造价值。
相关文章
本文是系列文章的一部分。随着我们不断为MARA添加新功能,我们会在博客中发布详细信息:
相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
