博客 | NGINX

使用 NGINX 在 Kubernetes 中平衡 TCP 和 UDP 流量

NGINX-F5-horiz-black-type-RGB 的一部分
Amir Rawdat 缩略图
阿米尔·罗达特
2022 年 6 月 7 日发布

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

除了 HTTP 流量外,NGINX Ingress Controller 还可以对 TCP 和 UDP 流量进行负载平衡,因此您可以使用它来管理基于这些协议的各种应用和实用程序的流量,其中包括:

  • MySQL、LDAP 和 MQTT – 许多流行应用使用的基于 TCP 的应用程序
  • DNS、系统日志和 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 端口(监听器)。 请注意,每个 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 资源用例拓扑图

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

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

在此示例中,DevOps 工程师使用 MySQL 客户端来验证配置是否正常工作,MySQL 部署中的rawdata_content_schema数据库中的表列表的输出证实了这一点。

$ echo “显示表” | mysql –h <外部 IP 地址> -P <端口> -u <用户> –p rawdata_content_schema输入密码: <密码> Tables_in_rawdata_content_schema 作者 帖子

UDP 流量的 TransportServer 资源配置类似;有关完整示例,请参阅 GitHub 上 NGINX Ingress Controller 存储库中的基本 TCP/UDP 负载平衡。 高级 NGINX 用户可以使用stream-snippets ConfigMap 键通过本机 NGINX 配置扩展 TransportServer 资源,如 repo 中的“支持 TCP/UDP 负载平衡”示例所示。

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

这篇文章摘录自我们的综合电子书《使用 NGINX 管理 Kubernetes 流量》: 实用指南今天免费下载

立即免费试用基于 NGINX Plus 的 NGINX Ingress Controller 30 天,或者联系我们讨论您的用例


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