【问题标题】:Unhealthy nodes for load balancer when using nginx ingress controller on GKE在 GKE 上使用 nginx 入口控制器时负载均衡器的节点不健康
【发布时间】:2018-06-19 05:50:57
【问题描述】:

我在this guide之后设置了nginx入口控制器。

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

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

这是因为入口控制器进程只在一个节点上运行,所以它是唯一通过健康检查的节点? 如何让其他节点通过?

【问题讨论】:

    标签: nginx kubernetes google-kubernetes-engine kubernetes-health-check gke-networking


    【解决方案1】:

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

    您使用的指南使用externalTrafficPolicy: Local.(https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/gce-gke/service.yaml) 配置服务

    该策略将 kube-proxy 配置为永远不会将服务的流量路由到它到达的节点之外。因此,当负载均衡器流量到达没有 nginx pod 的节点时,健康检查失败,负载均衡器停止向它们发送流量。

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

    【讨论】:

    • 嗯,我不确定我是否遵循将externalTrafficPolicy 设置为Cluster 将如何使其他节点健康。那么当健康检查在没有 nginx pod 的节点上运行时,会导致请求进行跳跃,直到到达有 nginx pod 的节点,从而使原始节点健康?
    • 没错。外部流量的正常行为是每个节点都打开相同的端口。然后,流量遵循 kube-proxy 设置的 iptables 规则,到达与服务选择器匹配的任何节点上的特定 pod。
    • 如果只有 1 个节点(运行 nginx 入口控制器的节点)可以接受传入连接,这是否也意味着 externalTrafficPolicy: Local 实际上并没有发生负载平衡?如果您想将 IP 列入白名单(使用 Local 保留原始源 IP),但又想获得 LB 的好处,这感觉有点像个炫耀。
    • 没错。我回答的最后一段解决了这个问题。通过在集群中的其他节点上运行 nginx 副本,您可以获得跳过额外网络跃点的好处,并且仍然可以获得负载平衡。
    • 知道了;谢谢!根据您的其他建议 here,我扩展了我的入口控制器以匹配节点数量,并且 LB 中的所有运行状况检查都是绿色的。我担心所有副本最终都会在同一个节点上,但到目前为止它工作得很好。非常感谢,@coreypobrien
    猜你喜欢
    • 2020-07-29
    • 2019-08-05
    • 2021-05-23
    • 1970-01-01
    • 2021-04-20
    • 2021-05-21
    • 2020-01-12
    • 2022-01-03
    • 2019-06-28
    相关资源
    最近更新 更多