容器化Django应用本地正常,GKE部署后返回"no healthy upstream"求助
Django应用GKE部署后返回"no healthy upstream"问题排查
问题现象
- 本地容器化运行Django应用完全正常,部署到Google Kubernetes Engine(GKE)后,通过内部负载均衡Ingress访问时仅返回
no healthy upstream错误 - 测试示例项目(仅注释
requirements.txt中的mysqlclient依赖,仅使用src/目录内容)也出现同样问题
日志对比
本地运行日志
(base) C:\Users\path\to\app>docker run -p 8080:8080 helloworld:1 [21/Feb/2024 10:54:17] "GET / HTTP/1.1" 200 3968 [21/Feb/2024 10:54:17] "GET /static/KE-hello-world.svg HTTP/1.1" 200 116030 [21/Feb/2024 10:54:17] "GET /static/cloud_bg.svg HTTP/1.1" 200 7213 [21/Feb/2024 10:54:17] "GET /static/kubernetes-engine-icon.png HTTP/1.1" 200 6967 [21/Feb/2024 10:54:19] "GET / HTTP/1.1" 200 3968
GCP工作负载日志
2024-02-21 12:03:40.613 CET Not Found: / 2024-02-21 12:03:40.613 CET [21/Feb/2024 11:03:40] "GET / HTTP/1.1" 404 2272
排查建议
- 核对Ingress健康检查配置:GKE内部负载均衡的健康检查路径需与Django应用的存活/就绪探针路径匹配。从GCP日志看
/路径返回404,说明集群内访问该路径时应用无法正常响应,需确认Django路由配置在集群环境下是否正确加载 - 检查Django环境变量:确保集群内已设置正确的
ALLOWED_HOSTS,避免因主机头不匹配导致请求被拒绝 - 验证Pod探针配置:存活探针和就绪探针的路径、端口是否正确,若探针失败,Pod会被标记为不健康,Ingress就会返回
no healthy upstream - 测试集群内直接访问:通过Pod IP或Service IP直接访问
/路径,确认是否返回404,排查是应用自身问题还是Ingress转发逻辑问题
内容的提问来源于stack exchange,提问作者Vulpo
相关产品推荐
相关产品推荐

