> 文章列表 > K8s 生产环境问题汇总及解决方案(持续更新 ing)

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),然后再应用新的资源配置。如果没有删除旧资源,可能会导致以下问题:

  1. Ingress 混淆:如果旧的 Ingress 和新的 Ingress 都存在,它们可能会争夺同一个域名和路径。这可能导致 Ingress 控制器在处理请求时混淆,从而选择错误的后端服务。当你删除了旧的 Ingress 资源后,Ingress 控制器开始将流量正确路由到新的后端服务。

  2. 后端服务冲突:类似地,如果旧的 Service 和新的 Service 都存在且监听相同的端口,可能会导致端口冲突或 Kubernetes 无法正确将流量路由到预期的后端服务。删除旧的 Service 资源后,Ingress 控制器可以将流量路由到正确的后端服务。

        总之,当你修改资源名称时,务必确保先删除旧资源,以避免出现混淆和冲突。在应用新的资源配置之前,使用 kubectl delete 删除旧资源,然后再使用 kubectl apply 应用新资源配置。这样可以确保 Ingress 控制器将流量正确路由到新的后端服务。