Google kubernetes负载平衡器不健康节点故障排除

Google kubernetes负载平衡器不健康节点故障排除,kubernetes,google-kubernetes-engine,kubernetes-helm,kubernetes-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Helm,Kubernetes Ingress,我想知道在排除Google负载平衡器为何会将集群内的节点视为不健康节点的故障时,应该采取哪些步骤 使用GoogleKubernetes,我有一个有3个节点的集群,所有部署都在运行就绪性和活动性检查。所有人都报告说他们是健康的 负载平衡器由helm nginx ingress制成: 它被用作集群内所有部署应用程序的单一入口 目视扫描入口控制器日志: kubectl logs <ingress-controller-name> 但是,使用谷歌控制台,我浏览到负载平衡器的详细信息,可以

我想知道在排除Google负载平衡器为何会将集群内的节点视为不健康节点的故障时,应该采取哪些步骤

使用GoogleKubernetes,我有一个有3个节点的集群,所有部署都在运行就绪性和活动性检查。所有人都报告说他们是健康的

负载平衡器由helm nginx ingress制成:

它被用作集群内所有部署应用程序的单一入口

目视扫描入口控制器日志:

kubectl logs <ingress-controller-name>
但是,使用谷歌控制台,我浏览到负载平衡器的详细信息,可以看到以下内容:

上面两个节点似乎有问题,尽管我找不到问题

此时,负载平衡器仍然通过第三个正常节点提供流量服务,但它偶尔会删除该节点,并显示以下内容:

此时,没有流量通过负载平衡器,因此节点上的所有应用程序都无法访问

任何帮助,我应该期待解决这将是伟大的

----19年11月17日编辑

以下是通过helm传递的nginx入口配置:

ingress:
  enabled: true
  rbac.create: true
  controller:
    service:
      externalTrafficPolicy: Local
      loadBalancerIP: ****
  configData:
    proxy-connect-timeout: "15"
    proxy-read-timeout: "600"
    proxy-send-timeout: "600"
    proxy-body-size: "100m"

这是预期的行为。使用配置服务,以便只有存在服务吊舱的节点才会接受流量。这意味着,任何没有接收服务流量的服务pod的节点都将丢弃数据包

GCP网络负载均衡器仍在向每个节点发送流量以测试运行状况。运行状况检查将使用服务节点端口。任何包含nginx loadbalancer吊舱的节点都将响应运行状况检查。任何没有nginx负载平衡器吊舱的节点都会丢弃数据包,因此检查失败

这只会导致某些节点显示为健康节点


对于nginx入口控制器,我建议使用默认值
cluster
,而不是将其更改为
local

,这是预期的行为。使用配置服务,以便只有存在服务吊舱的节点才会接受流量。这意味着,任何没有接收服务流量的服务pod的节点都将丢弃数据包

GCP网络负载均衡器仍在向每个节点发送流量以测试运行状况。运行状况检查将使用服务节点端口。任何包含nginx loadbalancer吊舱的节点都将响应运行状况检查。任何没有nginx负载平衡器吊舱的节点都会丢弃数据包,因此检查失败

这只会导致某些节点显示为健康节点


对于nginx入口控制器,我建议使用默认值
cluster
,而不是将其更改为
local

您是否对服务使用
externalTrafficPolicy:local
?考虑到整个过程都是有效的,并且你有1/3的健康节点,这是最有可能的罪魁祸首。@PatrickW我是肯定的-我已经编辑了问题,将其包括在上面-你认为哪里不对?为什么这会导致报告不健康节点?我还发现我没有使用:
controller.service.healthCheckNodePort
,读取我的设置可能需要哪些文档?“如果controller.service.type为NodePort或LoadBalancer,并且controller.service.externalTrafficPolicy设置为Local,则将其设置为kube代理将公开的托管运行状况检查端口…”由于您使用的是nginx ingress controller,您不需要使用NodePort。您是否对服务使用
externalTrafficPolicy:Local
?考虑到整个过程都是有效的,并且你有1/3的健康节点,这是最有可能的罪魁祸首。@PatrickW我是肯定的-我已经编辑了问题,将其包括在上面-你认为哪里不对?为什么这会导致报告不健康节点?我还发现我没有使用:
controller.service.healthCheckNodePort
,读取我的设置可能需要哪些文档?“如果controller.service.type为NodePort或LoadBalancer,并且controller.service.externalTrafficPolicy设置为Local,则将其设置为kube代理将公开的托管运行状况检查端口…”因为您使用的是nginx入口控制器,所以不需要使用NodePort
ingress:
  enabled: true
  rbac.create: true
  controller:
    service:
      externalTrafficPolicy: Local
      loadBalancerIP: ****
  configData:
    proxy-connect-timeout: "15"
    proxy-read-timeout: "600"
    proxy-send-timeout: "600"
    proxy-body-size: "100m"