使用域名时Ingress无法路由TCP请求的问题排查
问题描述
在Azure Kubernetes集群中运行着一个ActiveMQ应用Pod,并已配置Ingress Controller来路由流量到该应用。另一台服务器上的应用需要向其发送TCP请求:
- 使用Ingress负载均衡器IP或ActiveMQ Service的负载均衡器IP(
tcp://<IP>:61616)可以正常连接; - 使用映射到Ingress IP的域名(
tcp://amq.test.com:61616)时,出现“Error connecting to amq.test.com”错误。
已按照TCP路由方案配置相关资源,以下是具体配置文件:
已配置的YAML文件
Service.yaml(default命名空间)
apiVersion: v1 kind: Service metadata: labels: app: activemq name: activemq spec: ports: - name: "61616" port: 61616 targetPort: 61616 - name: "8161" port: 8161 targetPort: 8161 selector: io.kompose.service: activemq status: loadBalancer: {}
ingress_route.yaml(default命名空间)
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: dev-activemq-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" # nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - host: amq.test.com http: paths: - path: / pathType: Prefix backend: service: name: activemq port: number: 8161
tcp-service-configmap.yaml(ingress-basic命名空间)
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-basic data: 61616: "default/activemq:61616"
nginx-ingress Service 新增配置(ingress-basic命名空间)
- name: proxied-tcp-61616 nodePort: 31453 port: 61616 protocol: TCP targetPort: 61616
Ingress Controller Deployment 新增配置(ingress-basic命名空间)
- args: - /nginx-ingress-controller - --tcp-services-configmap=ingress-basic/tcp-services
可能的问题排查与解决方案
域名解析验证
执行nslookup amq.test.com或dig amq.test.com,确认域名是否正确解析到Ingress负载均衡器的IP。如果解析错误,检查DNS记录配置;如果解析延迟,清空本地DNS缓存后重试。Ingress端口配置校验
- 执行
kubectl get svc -n ingress-basic,查看nginx-ingress Service的PORT列表中是否包含61616:31453/TCP,确认端口转发配置已生效。 - 查看Ingress Controller Pod日志:
kubectl logs <ingress-controller-pod-name> -n ingress-basic,确认是否成功加载tcp-servicesConfigMap,无报错信息。
- 执行
Azure负载均衡器端口开放检查
登录Azure门户,找到Ingress对应的负载均衡器,检查入站规则是否允许TCP协议的61616端口流量从外部访问。网络连通性测试
在发送请求的服务器上执行telnet amq.test.com 61616或nc -zv amq.test.com 61616,测试端口是否可达。如果不可达,排查服务器出站防火墙、Azure网络安全组(NSG)是否存在阻断61616端口的规则。ActiveMQ监听配置确认
进入ActiveMQ Pod内部执行netstat -tulpn,确认61616端口的监听地址为0.0.0.0(而非仅localhost),确保Pod可以接收Ingress转发的流量。
内容的提问来源于stack exchange,提问作者ashwin_somnath
相关产品推荐
相关产品推荐

