您现在的位置是:首页 >技术杂谈 >K8s 生产环境问题汇总及解决方案(持续更新 ing)网站首页技术杂谈
K8s 生产环境问题汇总及解决方案(持续更新 ing)
一、前端页面显示 503 Service Temporarily Unavailable
时间:2023-04-19 k8s 版本:v1.18.4
问题背景
Kubernetes 中的前端项目 Pod 运行正常,但访问通过 Ingress 代理的域名时页面出现“503 Service Temporarily Unavailable”的错误,查看 log 日志也无报错信息。
解决方案
我最初是 service.yaml 和 ingress.yaml 里的 name 名称为 gtp,然后我又修改为 gpt,在修改前没 kubectl delete 原来的资源,当我删除原来的为 gtp 名称的 ingress 和 service 资源后,前端页面就可以正常访问了。
原理
问题出在修改资源名称时未删除旧资源。当我将名称从 gtp
修改为 gpt
时,应该首先使用 kubectl delete
删除旧的资源(即原先的 Ingress 和 Service),然后再应用新的资源配置。如果没有删除旧资源,可能会导致以下问题:
-
Ingress 混淆:如果旧的 Ingress 和新的 Ingress 都存在,它们可能会争夺同一个域名和路径。这可能导致 Ingress 控制器在处理请求时混淆,从而选择错误的后端服务。当你删除了旧的 Ingress 资源后,Ingress 控制器开始将流量正确路由到新的后端服务。
-
后端服务冲突:类似地,如果旧的 Service 和新的 Service 都存在且监听相同的端口,可能会导致端口冲突或 Kubernetes 无法正确将流量路由到预期的后端服务。删除旧的 Service 资源后,Ingress 控制器可以将流量路由到正确的后端服务。
总之,当你修改资源名称时,务必确保先删除旧资源,以避免出现混淆和冲突。在应用新的资源配置之前,使用 kubectl delete
删除旧资源,然后再使用 kubectl apply
应用新资源配置。这样可以确保 Ingress 控制器将流量正确路由到新的后端服务。