Kubernetes Ingress 和节点故障
Kubernetes Ingress and Node Failure
我正在尝试了解来自集群外部的调用的 Kubernetes 高可用性。 (对于我的新本地 Kubernetes 集群)
例如:桌面应用程序需要调用 Kubernetes 中托管的服务。
我看到这可能发生的两种主要方式,NodePort 和 Ingress。
节点端口
在 NodePort 的节点故障期间会发生什么似乎相当明显。任何使用新离线节点作为它们正在寻址的节点的调用都将失败。如果您使用的是 NodePort,则需要确保您有某种方法可以检测到您正在使用的节点已关闭,并将流量转移到另一个节点。 (并恢复在您检测到停机时间之前发生的任何丢失的流量。)
这似乎是负载平衡器的工作。它可以进行健康监控并将流量发送到已启动的节点。
入口
我不太清楚 Ingress Controller 和 Ingress 资源是如何工作的。似乎这里有一点魔力。 Ingress 控制器是否在后台使用 NodePort?我看到很多关于负载均衡器的假设,这些假设在我阅读的帖子中没有解释。预计集群外会有负载均衡器吗?
在这种情况下,带负载均衡器的 NodePort 和带负载均衡器的 Ingress 有什么区别?负载均衡器向调用系统提供单个 URL,然后它会尽最大努力使调用到达已启动的 Kubernetes 节点(通过 NodePort 或 Ingress Controller)。 (这让我想问,如果两者都确实需要负载均衡器来隐藏被调用的节点,为什么两者都存在。)
但是我又很困惑,因为你使用单个URL发送到一个Ingress资源,那么负载均衡器是如何决定节点的?
在我看来,Kubernetes 似乎只在集群内部具有高可用性。从集群外部,调用者的工作是通过您自己的 ping 系统或负载均衡器确保他们将寻址的节点。
Kubernetes 是否有任何功能可以帮助解决节点停机时间问题? 从桌面应用程序处理集群的角度来看,而不是 pods 保持服务正常运行。
是的,你是对的,入口控制器将从集群中创建 LoadBalancer。
入口控制器将管理集群内的入口对象,您可以重定向流量并在集群内管理它。
Kubernetes 是否有任何功能可以帮助节点停机
运行 如果您的一个节点出现故障,则跨节点的多个副本将在另一个节点上的其他 PODs 启动并提供服务,直到旧的不健康节点恢复到正常状态。
抱歉,我不明白(在这种情况下,带负载均衡器的 NodePort 和带负载均衡器的 Ingress 之间有什么区别?)单个 URL 节点端口和入口部分。如果你想用简单的词来理解入口,你可以将其视为 NGINX。您可以使用不同的 SSL/TLS 证书定义多站点域和重定向规则。
这个问题有几个部分 - 依次回答。 Kubernetes 中的默认服务类型是 ClusterIP、NodePort 和 LoadBalancer。
什么是服务?
In Kubernetes, a Service is an abstraction which defines a logical set of Pods and a policy by which to access them (sometimes this pattern is called a micro-service).
基本上,它是 pods 集合前面的逻辑负载均衡器,由 pod 标签决定。
ClusterIP 是如何工作的?
ClusterIP 是一项内部服务,这意味着分配给该服务的 IP 地址在集群内部。它通过 kube-proxy 中的一些魔法起作用(如果您想了解更多信息,请阅读 documentation)。 Dead pods 会自动从负载平衡中移除。
NodePort 是如何工作的?
NodePort 是一种外部服务,它通过在主机中打开端口来工作。自动创建一个 ClusterIP (reference),通过更多的 kube-proxy 魔法,命中 NodePort 的流量被发送到 ClusterIP,ClusterIP 又被发送到适当的后端 pod。
您是正确的,如果您访问的节点的 NodePort 出现故障,您将无法访问您的应用程序。
traffic
|
v
-------------- -------------- --------------
| | | | | |
| NodePort | | NodePort | | NodePort |
| | | | | |
-------------- -------------- --------------
LoadBalancer 是如何工作的?
LoadBalancer 是一项外部服务,它通过在每个节点上打开的 NodePorts 之间负载平衡流量来工作。这意味着在创建 LoadBalancer 时,实际上会创建一个 NodePort。通常,这适用于云提供商:创建云提供商负载均衡器资源,将流量路由到每个节点上的 NodePorts。健康检查内置于云提供商负载平衡器中,以确定哪些节点已启动。
traffic
|
v
--------------------
| |
| Cloud Provider |
| Load Balancer |
| |
--------------------
|-----------------|------------------|
v v v
-------------- -------------- --------------
| | | | | |
| NodePort | | NodePort | | NodePort |
| | | | | |
-------------- -------------- --------------
入口控制器如何工作?
入口控制器(通常)是集群上的一个软件组件 运行,它提供 L7 路由(与 LoadBalancer 提供的 L4 路由相反)。通常,这会自动创建一个LoadBalancer服务,因为ingress controller是集群内部的一组pods运行
流程是这样的:
图片借自here。
请注意 pods 前面的绿色箭头实际上表示使用 ClusterIP 进行负载平衡。
外部流量应该用什么?
使用 LoadBalancer 或入口控制器。不要完全按照您描述的原因使用 NodePort:您无法知道节点已关闭。
我正在尝试了解来自集群外部的调用的 Kubernetes 高可用性。 (对于我的新本地 Kubernetes 集群)
例如:桌面应用程序需要调用 Kubernetes 中托管的服务。
我看到这可能发生的两种主要方式,NodePort 和 Ingress。
节点端口
在 NodePort 的节点故障期间会发生什么似乎相当明显。任何使用新离线节点作为它们正在寻址的节点的调用都将失败。如果您使用的是 NodePort,则需要确保您有某种方法可以检测到您正在使用的节点已关闭,并将流量转移到另一个节点。 (并恢复在您检测到停机时间之前发生的任何丢失的流量。)
这似乎是负载平衡器的工作。它可以进行健康监控并将流量发送到已启动的节点。
入口
我不太清楚 Ingress Controller 和 Ingress 资源是如何工作的。似乎这里有一点魔力。 Ingress 控制器是否在后台使用 NodePort?我看到很多关于负载均衡器的假设,这些假设在我阅读的帖子中没有解释。预计集群外会有负载均衡器吗?
在这种情况下,带负载均衡器的 NodePort 和带负载均衡器的 Ingress 有什么区别?负载均衡器向调用系统提供单个 URL,然后它会尽最大努力使调用到达已启动的 Kubernetes 节点(通过 NodePort 或 Ingress Controller)。 (这让我想问,如果两者都确实需要负载均衡器来隐藏被调用的节点,为什么两者都存在。)
但是我又很困惑,因为你使用单个URL发送到一个Ingress资源,那么负载均衡器是如何决定节点的?
在我看来,Kubernetes 似乎只在集群内部具有高可用性。从集群外部,调用者的工作是通过您自己的 ping 系统或负载均衡器确保他们将寻址的节点。
Kubernetes 是否有任何功能可以帮助解决节点停机时间问题? 从桌面应用程序处理集群的角度来看,而不是 pods 保持服务正常运行。
是的,你是对的,入口控制器将从集群中创建 LoadBalancer。
入口控制器将管理集群内的入口对象,您可以重定向流量并在集群内管理它。
Kubernetes 是否有任何功能可以帮助节点停机
运行 如果您的一个节点出现故障,则跨节点的多个副本将在另一个节点上的其他 PODs 启动并提供服务,直到旧的不健康节点恢复到正常状态。
抱歉,我不明白(在这种情况下,带负载均衡器的 NodePort 和带负载均衡器的 Ingress 之间有什么区别?)单个 URL 节点端口和入口部分。如果你想用简单的词来理解入口,你可以将其视为 NGINX。您可以使用不同的 SSL/TLS 证书定义多站点域和重定向规则。
这个问题有几个部分 - 依次回答。 Kubernetes 中的默认服务类型是 ClusterIP、NodePort 和 LoadBalancer。
什么是服务?
In Kubernetes, a Service is an abstraction which defines a logical set of Pods and a policy by which to access them (sometimes this pattern is called a micro-service).
基本上,它是 pods 集合前面的逻辑负载均衡器,由 pod 标签决定。
ClusterIP 是如何工作的?
ClusterIP 是一项内部服务,这意味着分配给该服务的 IP 地址在集群内部。它通过 kube-proxy 中的一些魔法起作用(如果您想了解更多信息,请阅读 documentation)。 Dead pods 会自动从负载平衡中移除。
NodePort 是如何工作的?
NodePort 是一种外部服务,它通过在主机中打开端口来工作。自动创建一个 ClusterIP (reference),通过更多的 kube-proxy 魔法,命中 NodePort 的流量被发送到 ClusterIP,ClusterIP 又被发送到适当的后端 pod。
您是正确的,如果您访问的节点的 NodePort 出现故障,您将无法访问您的应用程序。
traffic
|
v
-------------- -------------- --------------
| | | | | |
| NodePort | | NodePort | | NodePort |
| | | | | |
-------------- -------------- --------------
LoadBalancer 是如何工作的?
LoadBalancer 是一项外部服务,它通过在每个节点上打开的 NodePorts 之间负载平衡流量来工作。这意味着在创建 LoadBalancer 时,实际上会创建一个 NodePort。通常,这适用于云提供商:创建云提供商负载均衡器资源,将流量路由到每个节点上的 NodePorts。健康检查内置于云提供商负载平衡器中,以确定哪些节点已启动。
traffic
|
v
--------------------
| |
| Cloud Provider |
| Load Balancer |
| |
--------------------
|-----------------|------------------|
v v v
-------------- -------------- --------------
| | | | | |
| NodePort | | NodePort | | NodePort |
| | | | | |
-------------- -------------- --------------
入口控制器如何工作?
入口控制器(通常)是集群上的一个软件组件 运行,它提供 L7 路由(与 LoadBalancer 提供的 L4 路由相反)。通常,这会自动创建一个LoadBalancer服务,因为ingress controller是集群内部的一组pods运行
流程是这样的:
图片借自here。
请注意 pods 前面的绿色箭头实际上表示使用 ClusterIP 进行负载平衡。
外部流量应该用什么?
使用 LoadBalancer 或入口控制器。不要完全按照您描述的原因使用 NodePort:您无法知道节点已关闭。