Kubernetes Nginx Ingress设置代理TCP端口
- 2025-10-20 18:10:00
- 丁国栋
- 原创 21
如果想使用 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后进行测试和验证。
--
发表评论