浏览 1.3k
原文作者:Amir Rawdat of F5
原文链接:使用 NGINX 在 Kubernetes 中对 TCP 和 UDP 流量进行负载均衡
转载来源:NGINX 官方网站
除了 HTTP 流量之外,NGINX Ingress Controller 还可以负载 TCP 和 UDP 流量,因此您可以使用它来管理基于以下协议的各种应用和实用程序的流量,它们包括:
在以下情况下,使用 NGINX Ingress Controller 进行 TCP 和 UDP 负载均衡也是一种将网络流量分发给 Kubernetes 应用的有效解决方案:
NGINX Ingress Controller 自带两个支持 TCP/UDP 负载均衡的 NGINX Ingress 资源:
下图描述了 GlobalConfiguration 和 TransportServer 资源的用例示例。在 gc.yaml 中,集群管理员在 GlobalConfiguration 资源中定义了 TCP 和 UDP 监听器。在 ts.yaml 中,DevOps 工程师在 TransportServer 资源中引用了 TCP 监听器,以便将流量路由到 MySQL Deployment。
gc.yaml 中的 GlobalConfiguration 资源定义了两个监听器:端口 514 的 UDP 监听器,用于连接 syslog 服务;端口 5353 的 TCP 监听器,用于连接 MySQL 服务。
1 apiVersion: k8s.nginx.org/v1alpha1
2 kind: GlobalConfiguration
3 metadata:
4 name: nginx-configuration
5 namespace: nginx-ingress
6 spec:
7 listeners:
8 - name: syslog-udp
9 port: 541
10 protocol: UDP
11 - name: mysql-tcp
12 port: 5353
13 protocol: TCP
在 ts.yaml 中,TransportServe 资源的第 6-8 行通过 name (mysql-tcp
) 引用了 gc.yaml 中定义的 TCP 监听器,第 9-14 行定义了将 TCP 流量发送到 mysql-db
upstream 的路由规则。
1 apiVersion: k8s.nginx.org/v1alpha1
2 kind: TransportServer
3 metadata:
4 name: mysql-tcp
5 spec:
6 listener:
7 name: mysql-tcp
8 protocol: TCP
9 upstreams:
10 - name: mysql-db
11 service: mysql
12 port: 3306
13 action:
14 pass: mysql-db
在这个例子中,DevOps 工程师使用 MySQL 客户端来验证配置是否有效,这可以通过 MySQL deployment 中的 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 用户可以使用原生 NGINX 配置(使用 stream-snippets
ConfigMap 键)扩展 TransportServer 资源,如仓库中的“支持 TCP/UDP 负载均衡”一例所示。
如欲详细了解您可以在 TransportServer 资源中配置的特性,请参阅 NGINX Ingress Controller 文档。
立即体验基于 NGINX Plus 的 NGINX Ingress Controller 的 30 天免费试用版,或者联系我们讨论您的用例。
想要更及时全面地获取 NGINX 相关的技术干货、互动问答、系列课程、活动资源?
请前往 NGINX 开源社区:
按点赞数排序
按时间排序