使用NGINX自动为本地部署的Kubernetes服务实现TCP负载均衡

NGINX | 2023年8月22日

您是一名现代应用开发者,使用一系列开源工具,也可能使用一些商业工具,来编写、测试、部署和管理新的应用和容器。您选择使用Kubernetes,在开发、测试、预发布和生产环境中运行这些容器和Pod。您认同微服务、Cloud Native Computing Foundation以及其他现代行业标准的架构和理念。

在这一过程中,您会发现Kubernetes确实功能强大。但它的复杂、僵化和令人沮丧,可能也让您感到意外。实施并协调路由器、防火墙、负载均衡器及其他网络设备的变更和更新,可能会让人难以招架,尤其是在您自己的数据中心!这足以让开发人员崩溃。

如何应对这些挑战,很大程度上取决于在何处以及以何种方式运行Kubernetes(采用托管服务还是本地部署)。本文将探讨TCP负载均衡,这是部署选择影响易用性的一个关键领域。

使用托管式Kubernetes实现TCP负载均衡(也称为简便方案)

如果使用公有云提供商等为Kubernetes提供的托管服务,大部分繁琐的网络工作都会由服务商代为处理。只需运行一条命令(kubectl apply -f loadbalancer.yaml),Service类型LoadBalancer即可提供公有IP、DNS记录和TCP负载均衡器。例如,可以配置Amazon Elastic Load Balancer,将流量分发到包含NGINX Ingress Controller的Pod。运行此命令后,即使后端发生变化,也无需担心。操作如此简单,甚至可能让人习以为常!

使用本地部署的Kubernetes进行TCP负载均衡(也称为困难方案)

对于本地部署的集群,情况则完全不同。您或网络团队的同事必须提供所需的网络组件。您可能会疑惑:“为什么让用户访问我的Kubernetes应用如此困难?”答案很简单,却有些出人意料:作为集群入口的LoadBalancer类型Service实际上并不存在。

要让集群外部能够访问应用和Service,网络团队可能会要求先提交工单、获得批准、完成相关流程,甚至通过安全审查,然后才会重新配置设备。或者,您可能需要独自完成所有工作,导致应用交付进度极其缓慢。更糟的是,您甚至不敢更改任何Kubernetes Service,因为一旦NodePort发生变化,流量就可能被阻断!大家都知道,用户可不喜欢遇到500错误。您的老板可能更不喜欢。

更出色的本地部署TCP负载均衡解决方案:NGINX Loadbalancer for Kubernetes

借助我们的新项目,您可以将“困难选项”变为“简单选项”:NGINX Loadbalancer for Kubernetes。这个免费项目是一个Kubernetes控制器,可监控NGINX Ingress Controller,并自动更新已配置用于负载均衡的外部NGINX Plus实例。该项目设计简洁,易于安装和运维。部署此解决方案后,您可以在本地环境中实现TCP负载均衡,确保系统立即检测到新的应用和服务并将流量转发给它们,全程无需人工干预。

架构和流程

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

NGINX Loadbalancer运行示意图

NGINX Loadbalancer for Kubernetes 实际运行概览

以下屏幕截图中的两个窗口展示了NGINX Loadbalancer for Kubernetes部署并运行的情况:

  1. 服务类型:LoadBalancer(用于nginx-ingress)
  2. 外部 IP,连接到 NGINX Plus 服务器
  3. 端口:NodePort 映射到 443:30158,并与 NGINX 上游服务器相匹配(如 NGINX Plus 实时仪表板所示)
  4. 日志,表示NGINX Loadbalancer for Kubernetes正在成功向NGINX Plus发送数据

注意:在此示例中,Kubernetes工作节点的IP地址为10.1.1.8和10.1.1.10

NGINX Loadbalancer for Kubernetes实际运行界面的屏幕截图

立即开始

如果Kubernetes集群边缘的网络问题让您感到困扰,不妨试用此项目,并告诉我们您的想法。NGINX Loadbalancer for Kubernetes的源代码已根据Apache 2.0许可证开源,所有安装说明均可在GitHub上查看。

如需提供反馈,请在代码仓库中留言,或通过NGINX Community Slack向我们发送消息。


分享

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。