Kubernetes Ingress配置异常:访问test-service报Bad Gateway
排查Ingress访问test-service出现Bad Gateway的问题
1. 先确认后端服务与Pod的基础连通性
- 检查test-service是否关联到正常运行的Pod:
查看输出里的kubectl describe service test-serviceEndpoints字段,确认是否有Pod的IP列表。如果为空,说明标签匹配存在问题(从现有配置看标签规则是匹配的,但仍需实际验证)。 - 检查test-app Pod的运行状态:
确保所有Pod状态为kubectl get pods -l app=test-appRunning,且就绪探针(如果配置了)处于正常状态。如果Pod处于CrashLoopBackOff等异常状态,优先修复Pod启动问题。 - 在集群内部直接调用test-service验证服务可用性:
如果这里返回错误,说明后端服务本身存在问题(比如端口监听错误、应用未正常初始化),需先解决服务自身的问题。kubectl run -it --rm --image=busybox:1.36 curl-tester -- curl test-service:80
2. 检查Ingress路径转发配置
你的Ingress中/test/路径使用了pathType: Prefix,Nginx Ingress默认会把完整的请求路径(包括/test/)转发给test-service。如果test-app的服务是监听根路径/,那么后端收到的请求是/test/,而应用没有对应路由,会返回404,进而导致Ingress返回Bad Gateway。
解决方法:添加路径重写注解,修改Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: java-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: my-app http: paths: - path: / pathType: Prefix backend: service: name: java-app-service port: number: 80 - path: /test(/|$)(.*) pathType: Prefix backend: service: name: test-service port: number: 80
修改后应用配置:
kubectl apply -f your-ingress-file.yaml
3. 查看Ingress Controller日志定位具体错误
查看Nginx Ingress Controller的日志,获取更详细的错误细节:
kubectl logs -n ingress-nginx deployment/ingress-nginx-controller
如果日志中出现connect() failed (111: Connection refused),说明Ingress无法连接到test-service的后端Pod;如果出现upstream sent invalid response,说明后端服务返回了异常响应。
内容的提问来源于stack exchange,提问作者Antonio-93
相关产品推荐
相关产品推荐

