Kubernetes Nginx Ingress设置代理TCP端口
- 2025-10-20 18:10:00
- 丁国栋
- 原创 154
如果想使用 Nginx Ingress 监听并代理 TCP 端口需要几个步骤:
以常见的SSH 22端口举例:
- 有对应的后端服务,比如有一个Service监听这个TCP端口;
- 为 Nginx Ingress 创建一个 ConfigMap 配置 TCP端口对应的后端服务;
- 修改 Nginx Ingress 的Deployment或者DaemonSet 设置 --tcp-services-configmap 参数,并且添加一个hostPort端口配置用于将容器端口暴露到主机上;
假设后端服务是 命名空间 quickon-app 的 gitfox-20250828104927,查看这个Service,PORT 中有22/TCP端口。
Nginx Ingress 是部署在 quickon-system 命名空间下的 daemonset。
执行 kubectl create cm -n quickon-system tcp-services 创建一个名称为 tcp-services 的ConfigMap。
执行 kubectl edit cm -n quickon-system tcp-services 编辑并添加数据:
apiVersion: v1 data: "22": quickon-app/gitfox-20250828104927:22 kind: ConfigMap metadata: name: tcp-services namespace: quickon-system
修改Nginx Ingress容器参数
执行:kubectl edit daemonset -n quickon-system ingress-nginx-ingress-controller
containers:
- args:
- --default-backend-service=$(POD_NAMESPACE)/ingress-nginx-ingress-controller-default-backend
- --publish-service=quickon-system/ingress-nginx-ingress-controller
- --http-port=8080
- --https-port=8443
- --healthz-port=10254
- --election-id=ingress-controller-leader
- --controller-class=k8s.io/ingress-nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-ingress-controller
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services # 本次添加的新参数,tcp-services 与前面创建的 ConfigMap 名称相同。
- --watch-ingress-without-class=true
- --default-ssl-certificate=quickon-system/tls-haogs-cn
继续修改这个daemonset的hostPort:
name: controller
ports:
- containerPort: 8080
hostPort: 80
name: http
protocol: TCP
- containerPort: 8443
hostPort: 443
name: https
protocol: TCP
- containerPort: 10254
name: metrics
protocol: TCP
- containerPort: 22 # 本次新添加的配置,将容器端口22映射到主机端口22。
hostPort: 22
name: ssh
protocol: TCP
readinessProbe:
到这里就可以了,观察 Nginx Ingress Pod的状态,待Pod STATUS为 Running 且 READY后进行测试和验证。
--
发表评论