博客 | NGINX

使用 NGINX 自动实现本地 Kubernetes 服务的 TCP 负载平衡

NGINX-F5-horiz-black-type-RGB 的一部分
Chris Akker 缩略图
克里斯·阿克
2023 年 8 月 22 日发布

您是一位现代应用程序开发人员。 您可以使用一组开源工具和一些商业工具来编写、测试、部署和管理新的应用程序和容器。 您已选择 Kubernetes 在开发、测试、暂存和生产环境中运行这些容器和 pod。 您已经了解微服务、云原生计算基金会和其他现代行业标准的架构和概念。

在这次旅程中,你发现 Kubernetes 确实很强大。 但你可能也对它有多么困难、不灵活和令人沮丧感到惊讶。 实施和协调路由器、防火墙、负载均衡器和其他网络设备的变更和更新可能会变得非常困难——尤其是在您自己的数据中心! 这足以让开发人员流泪。

如何应对这些挑战与您在何处以及如何运行 Kubernetes(作为托管服务还是在本地)有很大关系。 本文讨论 TCP 负载均衡,这是部署选择影响易用性的关键领域。

使用托管 Kubernetes 实现 TCP 负载平衡(又称简易选项)

如果您使用像 Kubernetes 的公共云提供商这样的托管服务,那么大部分繁琐的网络事务都会为您处理。 只需一个命令( kubectl apply -f loadbalancer.yaml ),服务类型LoadBalancer就会为您提供公共 IP、DNS 记录和 TCP 负载均衡器。 例如,您可以配置 Amazon Elastic Load Balancer 以将流量分配到包含 NGINX Ingress Controller 的 pod,并且使用此命令时无需担心后端发生变化。 这非常简单,我们敢打赌您认为这是理所当然的!

使用本地 Kubernetes 实现 TCP 负载平衡(又称硬选项)

对于内部部署集群来说,情况则完全不同。 您或您的网络同行必须提供网络部分。 您可能会想,“为什么让用户使用我的 Kubernetes 应用如此困难?” 答案很简单,但有点令人震惊: 服务类型负载均衡器(集群的前门)实际上并不存在。

为了在集群之外公开您的应用和服务,您的网络团队可能需要票证、批准、程序,甚至安全审查——所有这些都需要在他们重新配置设备之前完成。 或者你可能需要自己做所有事情,从而减慢应用交付的速度。 更糟糕的是,您不敢更改任何 Kubernetes 服务,因为如果NodePort发生变化,流量可能会被阻塞! 我们都知道用户多么喜欢收到 500 错误。 你的老板可能更不喜欢它。

本地 TCP 负载平衡的更好解决方案: 适用于 Kubernetes 的 NGINX 负载均衡器

您可以使用我们的新项目将“困难选项”转变为“简单选项”: 适用于 Kubernetes 的 NGINX 负载均衡器。 这个免费项目是一个Kubernetes 控制器,它监视NGINX Ingress Controller并自动更新为负载均衡配置的外部NGINX Plus实例。 设计非常简单,安装和操作都很简单。 有了这个解决方案,您可以在本地环境中实施 TCP 负载均衡,确保立即检测到新的应用和服务并可用于流量 - 无需亲自动手。

架构与流程

Kubernetes 的 NGINX 负载均衡器位于 Kubernetes 集群内部。 它在 Kubernetes 上注册以监视 nginx-ingress 服务(NGINX Ingress Controller)。 当后端发生变化时,Kubernetes 的 NGINX 负载均衡器会收集 Worker IP 和 NodePort TCP 端口号,然后通过NGINX Plus API将 IP:ports 发送到 NGINX Plus。NGINX 上游服务器无需重新加载即可更新,NGINX Plus 会将流量负载平衡到正确的上游服务器和 Kubernetes NodePort。 可以添加额外的 NGINX Plus 实例来实现高可用性

NGINX 负载均衡器运行图

Kubernetes 上运行的 NGINX 负载均衡器快照

下面的屏幕截图中有两个窗口演示了 NGINX Loadbalancer for Kubernetes 的部署和运行:

  1. 服务类型– LoadBalancer(用于nginx-ingress
  2. 外部 IP – 连接到 NGINX Plus 服务器
  3. 端口- NodePort 映射到 443:30158 并匹配 NGINX 上游服务器(如 NGINX Plus实时仪表板所示)
  4. 日志– 表明 Kubernetes 的 NGINX 负载均衡器已成功将数据发送到 NGINX Plus

笔记: 在此示例中,Kubernetes 工作节点为 10.1.1.8 和 10.1.1.10

NGINX 负载均衡器在 Kubernetes 中的运行截图

立即开始

如果您对 Kubernetes 集群边缘的网络挑战感到沮丧,请尝试该项目并告诉我们您的想法。 NGINX Loadbalancer for Kubernetes 的源代码是开源的(根据 Apache 2.0 许可证),所有安装说明均可在 GitHub 上找到。  

如需提供反馈,请在 repo 中给我们留言或在NGINX 社区 Slack中给我们留言。


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