解决 Kubernetes 中 “503 Service Temporarily Unavailable” 的问题

62次阅读
没有评论

问题描述

在使用 Kubernetes 集群中创建一个 nginx 服务的 Ingress 时,遇到了 “503 Service Temporarily Unavailable” 的问题。虽然使用端口转发可以打开网页,所以他认为服务应该是正常工作的。问题可能出现在配置 Ingress 上。他检查了选择器、不同的端口,但仍然找不出问题所在。他寻求帮助以解决这个问题。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

问题分析

“503 Service Temporarily Unavailable” 错误表明客户端请求未成功路由到正确的后端服务。在这种情况下,问题可能出现在 Ingress 配置中。根据用户的描述和回答,可能是服务端口的命名问题导致了这个错误。

解决方案

方案1: 修复服务端口命名问题

用户提供的配置中,Ingress 使用了 servicePort: http,但服务的端口并没有被命名为 http。解决这个问题的方法是将 Ingress 中的 servicePort 值改为正确的端口号,或者修改服务的端口名为 http。以下是修复的步骤:

  1. 打开 ingress.yaml 文件。
  2. spec 下的 rules 字段中,将 servicePort 值改为正确的端口号或修改服务端口名为 http

修复后的示例 ingress.yaml 文件片段:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: vehement-horse-django
  labels:
    app.kubernetes.io/name: django
    helm.sh/chart: django-0.0.1
    app.kubernetes.io/instance: vehement-horse
    app.kubernetes.io/managed-by: Tiller
spec:
  rules:
    - host: something.com
      http:
        paths:
          - path: /
            backend:
              serviceName: vehement-horse-django
              servicePort: 80  # 正确的端口号或服务端口名

方案2: 配置正确的服务端口

如果你决定修改服务的端口名为 http,则需要确保服务配置中也使用了这个名字。

  1. 打开 service.yaml 文件。
  2. spec 下的 ports 中,将 name 值改为 http

修复后的示例 service.yaml 文件片段:

apiVersion: v1
kind: Service
metadata:
  name: vehement-horse-django
  labels:
    app.kubernetes.io/name: django
    helm.sh/chart: django-0.0.1
    app.kubernetes.io/instance: vehement-horse
    app.kubernetes.io/managed-by: Tiller
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
      name: http  # 修改为 http
  selector:
    app.kubernetes.io/name: django
    app.kubernetes.io/instance: vehement-horse

方案3: 验证服务是否正常运行

确保你的服务正常运行并且绑定到了正确的端口。使用 kubectl get services 命令来检查服务的端口和状态。

总结

在 Kubernetes 中,配置正确的服务端口和 Ingress 配置是确保应用程序正确路由的关键。修复服务端口命名问题或调整配置后,应该能够解决 “503 Service Temporarily Unavailable” 错误。

以上是基于你提供的问答数据和知识库的解决方案。如有版本差异或配置细节,请根据实际情况进行调整。

参考链接

正文完