如何配置Nginx-Ingress与DigitalOcean负载均衡转发TCP流量到Pod
Nginx Ingress TCP流量转发失败排查方案
核心配置错误点
- LoadBalancer Service的targetPort配置错误:你当前配置中LoadBalancer 9000端口的targetPort指向8998,而通过
tcp-servicesConfigMap配置TCP转发规则时,Ingress Nginx Pod会自动监听ConfigMap中定义的端口(也就是9000),你把流量转发到8998端口,Nginx Pod没有监听该端口,直接导致连接断开。
修正后的Service端口配置:- name: transmission-port port: 9000 targetPort: 9000 protocol: TCP - Ingress Nginx控制器未配置ConfigMap读取参数:默认状态下Ingress Nginx不会主动读取TCP服务配置,需要在控制器Deployment的启动参数中增加指定配置项,否则你创建的
tcp-servicesConfigMap不会生效。
执行命令查看当前控制器启动参数:
确认参数中存在kubectl get deployment ingress-nginx-controller -n ingress-nginx -o jsonpath='{.spec.template.spec.containers[0].args}'--tcp-services-configmap=ingress-nginx/tcp-services,如果没有则需要在Deployment配置中添加该参数,添加后控制器会自动重启加载配置。
其他需排查的常见问题
- 云服务商安全组/防火墙规则:DigitalOcean默认的负载均衡、节点安全组仅放行80、443端口入站,需要手动在控制台放行TCP 9000端口的入站流量,允许你需要的源IP段访问。
- 后端服务可用性验证:确认
staging命名空间下的speed-transmission-service服务运行正常,端口确实为9000,可在集群内执行如下命令测试连通性:kubectl run -it --rm --image=busybox net-test -- nc -zv speed-transmission-service.staging.svc.cluster.local 9000 - NetworkPolicy限制:检查集群内是否配置了NetworkPolicy规则,禁止了Ingress Nginx Pod到后端服务的9000端口访问,或者禁止了外部到Ingress Nginx 9000端口的访问。
- 控制器日志排查:执行如下命令查看Ingress Nginx控制器日志,确认是否存在配置加载错误、转发报错等信息:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
内容的提问来源于stack exchange,提问作者Adebari Olalekan
相关产品推荐
相关产品推荐

