将流量路由到kubernetes群集
我有一个关于库伯内特斯网络的问题 我有一个微服务(比如numcruncherpod)运行在一个pod中,它通过端口将流量路由到kubernetes群集,kubernetes,Kubernetes,我有一个关于库伯内特斯网络的问题 我有一个微服务(比如numcruncherpod)运行在一个pod中,它通过端口9000为请求提供服务,并且我创建了一个类型为NodePort(numcrunchersvc)的对应服务,该服务公开的节点端口是30900 我的群集有3个具有以下IP的节点: 192.168.201.70 192.168.201.71 192.168.201.72 我将通过反向代理(nginx)将流量路由到集群。正如我在nginx中所理解的,我需要指定所有这些集群节点的ip来将流量路
9000
为请求提供服务,并且我创建了一个类型为NodePort
(numcrunchersvc)的对应服务,该服务公开的节点端口是30900
我的群集有3个具有以下IP的节点:
PS:我没有在任何云平台上运行群集。正确。您可以将交通路由到任何或所有K8仆从。如有必要,K8网络层将转发给相应的仆从 例如,如果您只运行一个pod,nginx很可能会对请求进行循环。当请求击中一个没有吊舱运行的仆从时,请求将被转发给有吊舱运行的仆从 如果您运行3个pod,每个minion上一个,那么请求将由从nginx获得请求的任何minion处理
如果您在每个仆从上运行多个pod,请求将循环到每个仆从,然后循环到该仆从上的每个pod 这个答案有点晚,也有点长,所以我在开始之前请求原谅。:) 对于未在云提供商上运行kubernetes群集的用户,有4种不同的选项可用于将群集内运行的服务公开给外部世界
类型的服务:NodePort
。这是最简单的默认设置。Kubernetes为您的服务分配一个随机端口。群集中的每个节点都侦听到此特定端口的流量,然后将该流量转发到支持该服务的任何一个POD。这通常由kube proxy处理,它使用循环策略利用iptables和负载平衡。通常,由于这种设置的用户体验并不完美,人们通常会添加一个外部“代理”服务器,如HAProxy、Nginx或httpd,以侦听单个IP上的流量并将其转发到这些后端之一。这是您,OP,描述的设置类型的服务:ExternalIP
。这与节点端口
服务相同,只是它还让kubernetes在所有kubernetes节点上添加一条附加规则,即“到达目的地IP==的所有流量也必须转发到pods”。这基本上允许您将任意IP指定为服务的“外部IP”。只要发往该IP的流量到达集群中的一个节点,它就会被路由到正确的pod。但是,作为集群管理员,您有责任将该流量传输到任何节点。这里的优点是,如果指定一个节点(例如一个主节点)的一个物理接口的IP,则不再需要运行haproxy/nginx设置。此外,您还将跳数减少了一个类型的服务:负载平衡器
。这种服务类型带来了与云提供商对等的裸机集群。一个功能齐全的loadbalancer提供程序能够从预定义的池中选择IP,自动将其分配给您的服务,并将其公布到网络,前提是配置正确。这是kubernetes在裸机上联网时最“无缝”的体验。大多数负载平衡器提供程序实现都使用BGP与上游L3路由器进行通信和播发。Metallb和kube router是两个适合这一细分市场的自由和开放源码软件项目LoadBalancer
提供程序与入口提供程序交互,这样您就不必手动配置入口网络从你的问题中,我了解到你想让nginx知道,给定一个pod,它在哪个节点是正确的?@JavierSalmeron不完全正确。即使来自nginx的流量到达任何节点,它也将被路由到相应的pod(即使pod没有在该节点上运行),但这将是一个额外的跃点。所以我猜LB本身是集群的一部分(比如使用服务类型入口)可能更好。