首页 文章

GKE上的Ingress仍处于“Backend unhealthy”的状态

提问于
浏览
0

鉴于:

  • 运行nginx的简单pod

  • 一个nodeport服务

  • 入口

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

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

入口显示为注释:

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

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

我们已经尝试删除入口,删除pod,升级pod,明确定义就绪探针,所有这些都没有任何结果变化 .

从上面的判断来看,由于某种原因(即使我们手动执行此操作(从群集内部的服务节点端口卷曲到节点端口),它仍然是失败的 Health 检查),它返回200&qa它是使用相同的容器图像正常工作) .

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

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

我们使用默认的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"

我假设是 Health 检查 . 我没有看到任何类似的日志用于失败的应用程序,也没有看到qa中的工作版本 . 因此,我认为 Health 检查最终会在某个地方完全不同,偶然的情况下,qa也会返回200.所以问题仍然存在:我在哪里可以看到 Health 检查所执行的实际请求?

同样对于这个特定的应用程序,我看到每个单独的pod每秒8次 Health 检查,这对我来说似乎有点多(配置的间隔是60秒) . 对于其他应用程序的 Health 检查是否可能最终在这个?

2 回答

  • 0

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

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

  • 0

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

    还需要找出:

    • 为什么端口不再自动添加?

    • 为什么我在访问日志中看不到运行状况检查?

    在任何情况下,我希望这可以帮助别人,因为我们浪费了大量的时间来发现这一点 .

    edit

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

相关问题