在GKE上使用nginx入口控制器时,负载平衡器的不健康节点

在GKE上使用nginx入口控制器时,负载平衡器的不健康节点,nginx,kubernetes,google-kubernetes-engine,kubernetes-health-check,gke-networking,Nginx,Kubernetes,Google Kubernetes Engine,Kubernetes Health Check,Gke Networking,我已经设置了nginx入口控制器 入口运行良好,我可以访问defaultbackend服务以及我自己的服务 但在查看Google云控制台中创建的对象时,特别是自动创建的负载平衡器对象,我注意到其他节点的运行状况检查失败: 这是因为入口控制器进程仅在一个节点上运行,因此它是唯一通过运行状况检查的节点吗? 如何使其他节点通过?您的假设是正确的。健康节点实际上是运行nginx pod的节点 您正在使用的指南将服务配置为externalTrafficPolicy:Local() 该策略将kube代理配

我已经设置了nginx入口控制器

入口运行良好,我可以访问
defaultbackend
服务以及我自己的服务

但在查看Google云控制台中创建的对象时,特别是自动创建的负载平衡器对象,我注意到其他节点的运行状况检查失败:

这是因为入口控制器进程仅在一个节点上运行,因此它是唯一通过运行状况检查的节点吗?
如何使其他节点通过?

您的假设是正确的。健康节点实际上是运行nginx pod的节点

您正在使用的指南将服务配置为
externalTrafficPolicy:Local
()

该策略将kube代理配置为从不将服务的流量路由到其到达的节点之外。因此,当负载平衡器流量到达没有nginx pod的节点时,运行状况检查失败,负载平衡器停止向它们发送流量


这种配置的优点是避免了额外的网络跳到nginx吊舱。如果您需要更多的节点来处理流量,您可以确保也有nginx pod在那里运行。如果您不介意额外的网络跳数,您也可以更改
externalTrafficPolicy

Hmm我不确定将
externalTrafficPolicy
设置为
Cluster
会如何使其他节点健康。因此,当运行状况检查在没有nginx-pod的节点上运行时,它会导致请求进行跳跃,直到它到达带有nginx-pod的节点,从而使原始节点健康?这是正确的。外部通信的正常行为是每个节点打开相同的端口。然后,流量遵循kube proxy设置的iptables规则,到达与服务选择器匹配的任何节点上的一个特定pod。这是否也意味着,如果只有一个节点(运行nginx入口控制器的节点),负载平衡实际上不会与
externalTrafficPolicy:Local发生可以接受传入连接吗?如果您想将IP列入白名单(使用
本地
保留原始源IP),但同时又有LB的好处,这感觉有点像是一个阻碍。这是正确的。我的答复的最后一段谈到这一点。通过在群集中的其他节点上运行nginx副本,您可以获得跳过额外网络跃点的好处,并且仍然可以获得负载平衡;谢谢根据您的其他建议,我放大了入口控制器以匹配节点数,LB中的所有健康检查都是绿色的。我担心所有副本都会在同一个节点上结束,但到目前为止,它工作得很好。非常感谢,@coreypobrien