GKE上的Ingress仍处于状态" Backend不健康"

时间:2018-05-31 09:48:50

标签: kubernetes google-kubernetes-engine kubernetes-ingress

假设:

  • 运行nginx的简单pod
  • 一个nodeport服务
  • 入口

从群集中调用 pod 时,我们会收到200响应代码

从群集中调用服务时,我们会收到200响应代码

入口显示为注释:

ingress.kubernetes.io/backends: '{"k8s-be-30606--559b9972f521fd4f":"UNHEALTHY"}'

最重要的是,我们有一个不同的kubernetes集群,具有完全相同的配置(除了命名空间dev vs qa& timestamps& assign ips& ports),其中一切正常。

我们已经尝试删除入口,删除pod,升级pod,明确定义就绪探针,所有这些都不会对结果产生任何影响。

从上面的判断来看,由于某些原因,pod的运行状况检查失败了(即使我们手动执行此操作(卷曲到节点内部ip +来自服务的节点端口)在群集内),它返回200& qa,它使用相同的容器图像正常工作。)

Stackdriver Logging(或其他地方)中是否有可用的日志,我们可以看到该运行状况检查正在执行的确切请求以及确切的响应代码是什么? (或者如果由于某种原因超时?)

有没有办法更多地了解Google流程中发生的事情?

我们使用默认的gke入口控制器。

其他一些信息: 与完全不同的应用程序进行比较时,我看到了大量的请求:

10.129.128.10 - - [31/May/2018:11:06:51 +0000] "GET / HTTP/1.1" 200 1049 "-" "GoogleHC/1.0"
10.129.128.8 - - [31/May/2018:11:06:51 +0000] "GET / HTTP/1.1" 200 1049 "-" "GoogleHC/1.0"
10.129.128.12 - - [31/May/2018:11:06:51 +0000] "GET / HTTP/1.1" 200 1049 "-" "GoogleHC/1.0"
10.129.128.10 - - [31/May/2018:11:06:51 +0000] "GET / HTTP/1.1" 200 1049 "-" "GoogleHC/1.0"

我假设是健康检查。我没有看到失败的应用程序和qa中的工作版本的类似日志。因此,我认为健康检查结果完全不同了。偶然的机会,它也会返回200.所以问题仍然存在:我在哪里可以看到健康检查所执行的实际请求?

对于这个特定的应用程序,我看到该单个pod有大约8次健康检查每秒,这对我来说似乎有点多(配置的间隔为60秒)。其他应用程序的运行状况检查是否可能在此结束?

2 个答案:

答案 0 :(得分:1)

GKE正在管理防火墙规则。由于某些原因,入口使用的新(节点)端口不再自动添加到此规则中。在控制台中将新端口手动添加到此规则后,后端服务变得健康。

仍然需要找出:

  • 为什么端口不再自动添加?
  • 为什么我在访问日志中看不到运行状况检查?

无论如何,我希望这可以帮助别人,因为我们浪费了大量的时间来发现这一点。

修改

错误结果是由无关的tls终止使用的无效证书(除了它由同一个控制器管理)入口。修复后,规则会再次自动更新。

答案 1 :(得分:0)

不幸的是,没有用户面对日志来显示运行状况检查请求的状态(可能是因为这会创建日志量)

关于第一个问题,GKE应该自动处理所有的防火墙规则,如果不是你的情况,那是因为节点版本的问题或特定的用户问题(在这种情况下我建议归档)谷歌在issue tracker

上的错误