问题描述
在使用 Kubernetes 集群中创建一个 nginx 服务的 Ingress 时,遇到了 “503 Service Temporarily Unavailable” 的问题。虽然使用端口转发可以打开网页,所以他认为服务应该是正常工作的。问题可能出现在配置 Ingress 上。他检查了选择器、不同的端口,但仍然找不出问题所在。他寻求帮助以解决这个问题。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
问题分析
“503 Service Temporarily Unavailable” 错误表明客户端请求未成功路由到正确的后端服务。在这种情况下,问题可能出现在 Ingress 配置中。根据用户的描述和回答,可能是服务端口的命名问题导致了这个错误。
解决方案
方案1: 修复服务端口命名问题
用户提供的配置中,Ingress 使用了 servicePort: http
,但服务的端口并没有被命名为 http
。解决这个问题的方法是将 Ingress 中的 servicePort
值改为正确的端口号,或者修改服务的端口名为 http
。以下是修复的步骤:
- 打开
ingress.yaml
文件。 - 在
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
,则需要确保服务配置中也使用了这个名字。
- 打开
service.yaml
文件。 - 在
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” 错误。
以上是基于你提供的问答数据和知识库的解决方案。如有版本差异或配置细节,请根据实际情况进行调整。
参考链接