博客 | NGINX

使用生产级 Kubernetes 降低复杂性

NGINX-F5-horiz-black-type-RGB 的一部分
Jenn Gile 缩略图
詹妮弗·吉尔
2021 年 2 月 5 日发布

编辑– 这篇文章是10 篇系列文章的一部分:

  1. 使用生产级 Kubernetes 降低复杂性(本博文)
  2. 如何通过高级流量管理提高 Kubernetes 的弹性
  3. 如何提高 Kubernetes 中的可见性
  4. 使用流量管理工具保护 Kubernetes 的六种方法
  5. 选择入口控制器的指南,第 1 部分: 确定您的需求
  6. 选择入口控制器的指南,第 2 部分: 风险与未来保障
  7. 选择入口控制器的指南,第 3 部分: 开源与…… 默认与…… 商业的
  8. 选择入口控制器的指南,第 4 部分: NGINX 入口控制器选项
  9. 如何选择服务网格
  10. 在动态 Kubernetes 云环境中对 NGINX Ingress 控制器进行性能测试

您还可以下载完整的博客作为免费的电子书 -将 Kubernetes 从测试带到生产

2020 年是我们大多数人永远不会忘记的一年。 学校、企业和公共服务的突然关闭使我们突然与社区隔绝,并对我们的安全和财务稳定产生了不确定性。 现在想象一下这件事发生在 2000 年,甚至 2010 年。 会有什么不同? 技术。 如果没有我们认为理所当然的高质量数字服务(医疗保健、流媒体视频、远程协作工具),疫情将会是截然不同的体验。 是什么让 2020 年的技术与过去几十年如此不同? 容器和微服务

微服务架构(通常使用容器Kubernetes )通过缩短数字体验的上市时间来促进业务增长和创新。 无论是与传统架构一起使用还是作为独立应用,这些现代应用技术都能实现卓越的可扩展性和灵活性、更快的部署,甚至节省成本。

2020 年之前,我们发现大多数客户已经开始采用微服务作为其数字化转型战略的一部分,但疫情真正加速了应用程序的现代化。 我们在 2020 年对 NGINX 用户的调查发现,60% 的受访者在生产中使用微服务,高于 2019 年的 40%,而且容器的受欢迎程度是其他现代应用技术的两倍多。

Kubernetes 是管理容器化应用的事实标准,云原生计算基金会 (CNCF) 的 2020 年调查证实了这一点,该调查发现 91% 的受访者正在使用 Kubernetes — 其中 83% 用于生产。 在采用 Kubernetes 时,许多组织已经做好了进行重大架构变革的准备,但却对大规模运行现代应用技术对组织的影响感到惊讶。 如果您正在运行 Kubernetes,那么您可能已经遇到了以下三个关键业务障碍:

  • 文化
    即使应用程序团队采用敏捷开发和 DevOps 等现代方法,他们通常仍受康威定律的约束,该定律指出“组织设计的系统反映了其自身的沟通结构”。 换句话说,分布式应用是由独立运作但共享资源的分布式团队开发的。 虽然这种结构非常适合让团队快速运转,但它也鼓励建立孤岛。 后果包括沟通不畅(这会产生自身的后果)、安全漏洞、工具蔓延、不一致的自动化实践以及团队之间的冲突。
  • 复杂
    为了实施企业级微服务技术,组织必须拼凑一套提供可见性、安全性和流量管理的关键组件。 通常,团队使用基础设施平台、云原生服务和开源工具来满足这一需求。 虽然每种策略都有其适用之处,但也存在可能导致复杂性的缺点。 而且,单个组织内的不同团队往往会选择不同的策略来满足相同的要求,从而导致“运营债务”。 此外,团队会在某个时间点选择流程和工具,并继续使用它们,而不管使用容器部署和运行现代微服务驱动的应用的需求如何变化。

    CNCF 云原生交互式景观很好地说明了支持基于微服务的应用所需基础设施的复杂性。 组织需要熟练掌握各种不同的技术,其后果包括基础设施锁定、影子 IT、工具蔓延,以及负责维护基础设施的人员的陡峭的学习曲线。

  • 安全
    云原生应用和传统应用的安全要求存在很大差异,因为隔离安全等策略在 Kubernetes 中不可行。 庞大的生态系统和容器化应用程序的分布式特性意味着攻击面更大,而对外部 SaaS应用的依赖意味着员工和外部人员有更多机会注入恶意代码或泄露信息。 此外,文化和复杂性领域中概述的后果(尤其是工具蔓延)会直接影响现代应用程序的安全性和弹性。 使用生态系统中的不同工具来解决同一个问题不仅效率低下,而且还给 SecOps 团队带来了巨大的挑战,他们必须学会如何正确配置每个组件。

解决方案: 生产级 Kubernetes

与大多数组织问题一样,克服 Kubernetes 挑战的答案是技术和流程的结合。 在这篇文章的剩余部分中,我们将重点关注技术组件,但请密切关注未来有关流程和其他主题的博客。

由于 Kubernetes 是一项开源技术,因此有很多方法可以实现它。 虽然一些组织更喜欢推出自己的原始 Kubernetes,但许多组织发现 Amazon Elastic Kubernetes Service (EKS)、 Google Kubernetes Engine (GKE)、Microsoft Azure Kubernetes Service (AKS)、 Red Hat OpenShift Container PlatformRancher等服务提供的灵活性、规范性和支持的组合很有价值。

Kubernetes 平台可以轻松启动和运行;但它们注重的是服务的广度而不是深度。 因此,虽然您可以在一个地方获得所需的所有服务,但它们不太可能提供真正大规模生产准备所需的功能集。 也就是说,他们不专注于高级网络和安全,这就是我们看到 Kubernetes 让许多客户失望的地方。

为了使 Kubernetes 达到生产级水平,你需要按以下顺序添加三个组件:

  1. 可扩展的入口出口层,用于将流量传入和传出集群
    这是通过Ingress 控制器实现的,它是一种专门的负载均衡器,可以抽象出 Kubernetes 网络的复杂性并充当 Kubernetes 集群内服务与集群外部服务之间的桥梁。 当该组件包含可提高弹性(例如高级健康检查和 Prometheus 指标)、实现快速可扩展性(动态重新配置)和支持自助服务(基于角色的访问控制 [RBAC])的功能时,它就达到了生产级。

    Kubernetes 环境的拓扑图,其中通用 Ingress 控制器提供可扩展的入口-出口层

  2. 内置安全性可防范整个集群的威胁
    虽然集群外部的“粗粒度”安全性可能就足够了,但集群内部却需要“细粒度”安全性。 根据集群的复杂程度,您可能需要在三个位置部署灵活的Web应用防火墙(WAF):在 Ingress 控制器上、作为每个服务代理以及作为每个 pod 代理。 这种灵活性使您能够对敏感应用程序(例如计费)应用更严格的控制,而对风险较低的应用程序应用更宽松的控制。

    与通用 Ingress 控制器一起部署了 WAF 的 Kubernetes 环境拓扑图

  3. 可扩展的东西向流量层,用于优化集群内的流量
    一旦你的 Kubernetes应用的复杂性和规模超出了基本工具可以处理的程度,就需要这个第三个组件。 在此阶段,您需要一个服务网格,它是一种编排工具,可以为集群内的应用服务提供更细粒度的流量管理和安全性。 服务网格通常负责管理容器化应用之间的应用路由、提供和执行自主的服务到服务相互 TLS (mTLS) 策略,以及提供应用可用性和安全性的可见性。

    Kubernetes 环境的拓扑图,其中部署了 WAF 和通用 Ingress 控制器,以及提供可扩展东西层的服务网格

选择这些组件时,请优先考虑可移植性和可见性。 与平台无关的组件可降低复杂性并提高安全性,您的团队需要学习和保护的工具更少,并且可以根据您的业务需求更轻松地转移工作负载。 可见性和监控的重要性无论怎样强调都不为过。 与 Grafana 和 Prometheus 等流行工具的集成可为您的基础设施创建统一的“单一玻璃窗格”视图,确保您的团队在客户发现问题之前就发现问题。 此外,还有其他补充技术,这些技术对于生产级 Kubernetes 来说并不是必需的,但却是现代应用程序开发不可或缺的一部分。 例如,当组织准备对传统应用程序进行现代化改造时,第一步就是使用 API 网关构建微服务

NGINX 如何提供帮助

我们的 Kubernetes 解决方案与平台无关,并包含实现生产级 Kubernetes 所需的三个组件: NGINX Ingress Controller作为入口出口层, NGINX App Protect作为 WAF, NGINX Service Mesh作为东西层。

Kubernetes 环境的拓扑图,其中部署了 NGINX App Protect WAF、NGINX Ingress Controller 和 NGINX Service Mesh

这些解决方案可以在四个关键领域为您提供帮助,让 Kubernetes 成为您的最佳朋友:

  • 自动化 – 让您的应用更快、更安全地上市
    使用 NGINX Ingress Controller 的流量路由和应用程序入门功能以及 NGINX Service Mesh 的 NGINX Plus sidecar 自动部署来部署、扩展、保护和更新应用程序。
  • 安全——保护您的客户和企业免受现有和新出现的威胁
    通过在集群中的任何位置部署 NGINX App Protect,同时使用 NGINX Service Mesh 和 NGINX Ingress Controller 来管理和实施服务之间的端到端加密,减少潜在的故障点。
  • 性能——提供客户和用户期望的数字体验
    使用优于其他 WAF、Ingress 控制器和负载均衡器的 NGINX 解决方案,轻松处理流量高峰和安全威胁,而不会影响性能。
  • 洞察 – 发展您的业务并更好地服务客户
    从 NGINX Ingress Controller 和 NGINX Service Mesh 获得有关应用程序性能和可用性的有针对性的见解,并通过深度跟踪来了解请求在微服务应用程序中是如何处理的。

使用 NGINX 做好生产准备

NGINX Ingress Controller 提供30 天免费试用,其中包括 NGINX App Protect,可保护您的容器化应用程序。 我们建议添加始终免费的 NGINX Service Mesh(可在f5.com下载),以充分利用您的试用版。 今天,您可以将自己的许可证 (BYOL) 带到您选择的云中。


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