Kubernetes Nginx Ingress设置代理TCP端口

2025-10-20 18:10:00
丁国栋
原创 18
摘要:本文记录如何在Kubernetes中设置Nginx Ingress 反向代理TCP端口,例如监听22并反向代理22端口。

如果想使用 Nginx Ingress 监听并代理 TCP 端口需要几个步骤:

以常见的SSH 22端口举例:


  1. 有对应的后端服务,比如有一个Service监听这个TCP端口;
  2. 为 Nginx Ingress 创建一个 ConfigMap 配置 TCP端口对应的后端服务;
  3. 修改 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后进行测试和验证。


--


发表评论
博客分类