【发布时间】:2021-05-27 09:15:05
【问题描述】:
我正在尝试了解来自集群外部的调用的 Kubernetes 高可用性。 (对于我的新本地 Kubernetes 集群)
例如:桌面应用程序需要调用托管在 Kubernetes 中的服务。
我看到这可能发生的两种主要方式,NodePort 和 Ingress。
节点端口
NodePort 发生节点故障时会发生什么似乎相当明显。任何使用新离线节点作为其寻址节点的调用都将失败。如果您使用的是 NodePort,则需要确保您有某种方法可以检测到您正在使用的节点已关闭,并将流量转移到另一个节点。 (并恢复在您检测到停机之前发生的任何丢失的流量。)
这似乎是负载均衡器的工作。它可以进行健康监控并将流量发送到已启动的节点。
入口
我不太确定 Ingress 控制器和 Ingress 资源是如何工作的。这里似乎有一点魔力。 Ingress 控制器是否在后台使用 NodePort?我看到很多关于负载均衡器平衡器的假设,这些假设在我阅读的帖子中没有解释。是否预计在集群外部会有一个负载均衡器?
在哪种情况下,带有负载均衡器的 NodePort 和带有负载均衡器的 Ingress 有什么区别?负载均衡器向调用系统提供单个 URL,然后尽最大努力使调用到达启动的 Kubernetes 节点(通过 NodePort 或 Ingress 控制器)。 (这让我想知道,如果两者都确实需要负载平衡器来隐藏被调用的节点,为什么两者都存在。)
但是我再次感到困惑,因为您使用单个 URL 发送到 Ingress 资源,那么负载均衡器如何决定节点?
在我看来,Kubernetes 似乎只在集群内部具有高可用性。在集群外部,调用者的工作是通过您自己的 ping 系统或负载均衡器确保他们将要寻址的节点。
Kubernetes 是否有任何功能可以帮助减少节点停机时间?从解决集群的桌面应用程序的角度来看,而不是从保持服务正常运行的 pod 的角度来看。
【问题讨论】:
标签: kubernetes kubernetes-ingress