我遵循了负载均衡器教程:https://cloud.google.com/container-engine/docs/tutorials/http-balancer当我使用Nginx图像时工作正常,当我尝试使用自己的应用程序映像时,虽然后端切换到不健康状态。
我的应用程序重定向到/(返回302),但我在pod定义中添加了livenessProbe
:
livenessProbe:
httpGet:
path: /ping
port: 4001
httpHeaders:
- name: X-health-check
value: kubernetes-healthcheck
- name: X-Forwarded-Proto
value: https
- name: Host
value: foo.bar.com
我的入口看起来像:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: foo
spec:
backend:
serviceName: foo
servicePort: 80
rules:
- host: foo.bar.com
服务配置是:
kind: Service
apiVersion: v1
metadata:
name: foo
spec:
type: NodePort
selector:
app: foo
ports:
- port: 80
targetPort: 4001
ingress describe ing
中的后端健康状况如下:
backends: {"k8s-be-32180--5117658971cfc555":"UNHEALTHY"}
并且入口的规则如下:
Rules:
Host Path Backends
---- ---- --------
* * foo:80 (10.0.0.7:4001,10.0.1.6:4001)
任何指针都非常受欢迎,我一直在努力工作几个小时而没有运气。
更新
我已将readinessProbe
添加到我的部署中,但似乎仍然出现了/并且入口仍然不健康。我的探测器看起来像:
readinessProbe:
httpGet:
path: /ping
port: 4001
httpHeaders:
- name: X-health-check
value: kubernetes-healthcheck
- name: X-Forwarded-Proto
value: https
- name: Host
value: foo.com
我将服务改为:
kind: Service
apiVersion: v1
metadata:
name: foo
spec:
type: NodePort
selector:
app: foo
ports:
- port: 4001
targetPort: 4001
UPDATE2
从readinessProbe
移除自定义标题后,它开始工作了!非常感谢。
答案 0 :(得分:28)
You need to add a readinessProbe (just copy your livenessProbe).
It's explained in the GCE L7 Ingress Docs。
健康检查
目前,所有服务后端必须满足以下任一要求才能传递从GCE负载均衡器发送给它的HTTP运行状况检查:1。响应200上的'/'。内容无关紧要。 2.在支持服务的pod上公开任意URL作为准备探测。
还要确保readinessProbe指向您向Ingress公开的同一端口。在你的情况下没问题,因为你只有一个端口,如果再添加一个端口,你可能会遇到麻烦。
答案 1 :(得分:3)
我遇到了同样的问题。跟随Tex的提示,但继续看到这个消息。事实证明,我必须在进入之前等待几分钟才能验证服务运行状况。如果有人要进行同样的操作并完成readinessProbe
和linvenessProbe
等所有步骤,请确保您的入口指向的服务是NodePort
,并等待几分钟直到黄色警告图标变为绿色警告图标。另外,检查StackDriver上的日志以更好地了解正在发生的事情。
答案 2 :(得分:3)
我认为值得注意的是,这是文档中一个非常重要的限制:
对Pod的readinessProbe所做的更改不会影响Ingress创建后的状态。
在添加我的readinessProbe之后,我基本上删除了我的入口(kubectl delete ingress <name>
),然后在一切恢复正常后不久,再次应用了yaml文件来重新创建它。
答案 3 :(得分:2)
在更新我的入口 readinessProbe 之后,我也遇到了完全相同的问题。
我可以看到黄色标记为 某些后端服务处于未知状态 的Ingress状态。 我等待了30分钟以上,但更改未反映出来。
超过24小时后,更改将反映出来,并且状态变为绿色。 我没有获得任何官方文档,但似乎是GCP Ingress资源中的错误。