Ingress-Nginx 转发 TCP 流量
January 10, 2024Less than 1 minute
Ingress-Nginx 转发 TCP 流量
Ingress-Nginx 默认只转发 HTTP 和 HTTPS。要转发裸 TCP(比如把 Logstash 的 5044 beats 端口暴露出去),得额外配一个 ConfigMap 并改 controller。下面以把 elk namespace 下 elk service 的 5044 端口转发出去为例。
1. 新增 tcp-services ConfigMap
在 ingress-nginx namespace 下创建。key 是要对外暴露的端口,value 是后端服务,格式 namespace/service:port:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
# '5044' 是要增加的端口
# 'elk/elk:5044' 是转发到的后端服务及端口,格式 namespace/service:port
'5044': 'elk/elk:5044'
2. 改 controller 的 Deployment
给 ingress-nginx controller 的容器加两处:
- 启动参数加上
--tcp-services-configmap=ingress-nginx/tcp-services - 容器 ports 里加 5044
3. 改 controller 的 Service
给 ingress-nginx-controller 的 Service 加 5044 端口,并指定一个宿主机(NodePort)端口,比如分配到 32698。
4. 重启 controller pod
重启后查看 controller,能看到新增的 5044 端口已生效。
5. 验证
用 tcp://<ingress-nginx-host-ip>:32698 访问,流量就会转发到 elk namespace 里 elk service 的 5044 端口。