如何在Nginx Ingress中以TCP暴露RabbitMQ 5671端口并验证连接
通过Nginx Ingress暴露RabbitMQ 5671 TCP端口及验证方案
一、更新TCP服务映射ConfigMap
你已创建的tcp-services ConfigMap需要添加5671端口的转发规则,修改后配置如下:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: default data: 5672: "default/rabbitmq:5672" 5671: "default/rabbitmq:5671"
注:ConfigMap中服务名称需与你创建的ClusterIP Service(
rabbitmq)完全一致,修正之前配置里的rabbitmq-service笔误。
执行更新:
kubectl apply -f tcp-services.yaml
二、配置Nginx Ingress Controller加载TCP端口规则
若使用Helm部署Ingress Controller
在Helm values配置文件中添加TCP端口映射:
tcp: configMapNamespace: default ports: 5671: "default/rabbitmq:5671" 5672: "default/rabbitmq:5672"
升级Ingress Controller实例:
helm upgrade nginx-ingress ingress-nginx/ingress-nginx -f your-values.yaml
若手动部署Ingress Controller
修改Ingress Controller的Deployment,确保挂载tcp-services ConfigMap并开放5671端口:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-ingress-controller namespace: ingress-nginx spec: template: spec: containers: - name: nginx-ingress-controller ports: - name: tcp-5671 containerPort: 5671 hostPort: 5671 - name: tcp-5672 containerPort: 5672 hostPort: 5672 volumeMounts: - name: tcp-services mountPath: /etc/nginx/tcp-services volumes: - name: tcp-services configMap: name: tcp-services namespace: default
更新Deployment:
kubectl apply -f nginx-ingress-deployment.yaml
三、验证TCP端口连通性
- 检查Ingress Controller日志,确认配置加载成功:
kubectl logs -n ingress-nginx <nginx-ingress-pod-name> | grep 5671
若日志中出现upstream default_rabbitmq_5671相关内容,说明配置已生效。
- 测试端口连通性
- 使用
telnet测试基础TCP连通:
telnet my-host.com 5671
连接成功会进入交互界面,按Ctrl+]后输入quit退出。
- 使用
openssl测试AMQPS SSL握手:
openssl s_client -connect my-host.com:5671
若返回SSL证书信息及握手成功提示,说明AMQPS端口正常暴露。
- 使用RabbitMQ客户端工具验证业务连通:
rabbitmqadmin -H my-host.com -P 5671 --ssl --username <your-username> --password <your-password> list queues
若能列出RabbitMQ队列,说明端口转发完全正常。
注意:Nginx Ingress的TCP端口转发独立于HTTP Ingress规则,你之前创建的
rabbit-ingress规则仅用于HTTP服务(如RabbitMQ UI),TCP端口无需在Ingress规则中配置。
内容的提问来源于stack exchange,提问作者gowthamiviswa
相关产品推荐
相关产品推荐

