使用NGINX对Kubernetes中的TCP和UDP流量进行负载均衡

NGINX | 2022年6月07日

[编者按:本文摘自我们的综合电子书《使用F5 NGINX管理Kubernetes流量:实用指南》。立即免费下载。]

除了HTTP流量,NGINX Ingress Controller还可对TCP和UDP流量进行负载均衡,因此可用于管理基于这些协议的各种应用和实用工具的流量,包括:

  • MySQL、LDAP和MQTT,许多常用应用程序所使用的基于TCP的应用
  • DNS、syslog和RADIUS,供边缘设备和非事务型应用使用的基于UDP的实用工具

在以下情况下,使用NGINX Ingress Controller进行TCP和UDP负载均衡,也是将网络流量分配到Kubernetes应用的有效解决方案:

  • 使用端到端加密(EE2E),并由应用程序而非NGINX Ingress Controller处理加密和解密
  • 需要为基于TCP或UDP的应用提供高性能负载均衡
  • 您希望在将现有网络(TCP/UDP)负载均衡器迁移到Kubernetes环境时,尽量减少改动

NGINX Ingress Controller提供两种支持TCP/UDP负载均衡的NGINX Ingress资源:

  • GlobalConfiguration资源通常由集群管理员用于指定可供DevOps团队使用的TCP/UDP端口(listeners)。请注意,每个NGINX Ingress Controller部署只能有一个GlobalConfiguration资源。
  • TransportServer资源通常由DevOps团队用于为其应用配置TCP/UDP负载均衡。NGINX Ingress Controller仅侦听管理员在GlobalConfiguration资源中实例化的端口。这样可以避免端口冲突,并确保DevOps团队仅通过管理员预先确定为安全的端口向外部公共服务公开应用,从而提供额外一层安全保障。

下图展示了GlobalConfiguration和TransportServer资源的一个示例用例。在gc.yaml中,集群管理员在GlobalConfiguration资源中定义TCP和UDP侦听器。在ts.yaml中,DevOps工程师在TransportServer资源中引用TCP侦听器,将流量路由到MySQL部署。

GlobalConfiguration和TransportServer资源用例的拓扑图

The GlobalConfiguration resource in gc.yaml 中的GlobalConfiguration资源定义了两个侦听器:端口514上的UDP侦听器用于连接syslog服务,端口5353上的TCP侦听器用于连接MySQL服务。

正在加载代码示例…

Lines 6–8 of the TransportServer resource in ts.yaml中的TransportServer资源第6–8行按名称(gc.yaml中定义的TCP侦听器mysql-tcp)引用该侦听器,第9–14行定义了将TCP流量发送到上游mysql-db的路由规则。

正在加载代码示例…

在此示例中,DevOps工程师使用MySQL客户端验证配置是否正常工作。输出中列出了MySQL部署内rawdata_content_schema数据库中的表,表明配置已生效。

$ echo “SHOW TABLES” | mysql –h <external_IP_address> -P <port> -u <user> –p rawdata_content_schema Enter Password: <password>
Tables_in_rawdata_content_schema
authors
posts

UDP流量的TransportServer资源配置方式与此类似。有关完整示例,请参阅GitHub上的NGINX Ingress Controller存储库中的“基本TCP/UDP负载均衡”。高级NGINX用户可以使用stream-snippets ConfigMap键,通过原生NGINX配置扩展TransportServer资源,具体方法请参阅该存储库中的“TCP/UDP负载均衡支持”示例。

有关可在TransportServer资源中配置的功能的更多信息,请参阅NGINX Ingress Controller文档。

本文摘自我们的综合电子书《使用NGINX管理Kubernetes流量:实用指南》。立即免费下载。

立即开始30天免费试用,亲自体验基于NGINX Plus的NGINX Ingress Controller,或联系我们,讨论您的用例。


分享

关于作者

相关博客文章

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内容缓存方式的技巧。