k8s文档并不十分清楚使用不同服务类型时路由会发生什么,这引出了一系列问题:
为了解决这个问题,请假设以下群集设置:
N_a
,N_b
,N_c
S_1
P_x1
,P_x2
属于服务的一部分S_1
P_x1
正在N_a
P_x2
正在N_b
1)使用NodePort
S_1
使用端口x
时,群集中的所有节点是否都可以在端口x
上使用该服务?或者只运行构成服务的pod的节点使端口x
上的服务可用?因此,在这两种情况下,N_a
和N_b
都会在端口S_1
上提供x
,但是我可以在端口N_c
上点击x
吗? / p>
2)NodePort
依旧使用S_1
,如果我在端口N_a
上点击x
,我只会被路由到P_x1
(例如,在Node上本地运行的该服务的pod,或者我可以路由到P_x2
,以便关闭节点并再次通过网络?
3)如果我将S_1
作为LoadBalanced
服务运行,那么负载均衡器是否只会将请求路由到N_a
和N_b
?在点击N_a
和N_b
时,这些请求仅分别路由到广告连接P_x1
和P_x2
?那么通过网络跳一跳,还是会与所有三个节点通信并依赖它们各自进行第二级路由/负载均衡? (这似乎效率很低)。
4)Ingress
控制器的路由功能(L7而不是L4除外)与LoadBalanced
服务的功能有何不同?
答案 0 :(得分:0)
1)是的。 NodePort在所有工作节点上打开一个端口。创建服务时,将在所有工作节点上创建iptables规则。当任何节点上的pod访问此服务的IP时,pod所在的物理节点上的iptables规则将相应地重定向其数据包。
2)两者。服务在所有关联的pod上进行WRR负载平衡。
3)我做裸机部署,所以我无法回答这个问题。
4)Afaik,Ingress是LoadBalancer的替代品。您可以部署在k8s群集中运行的自己的Ingress,而不是依赖云提供商的反向代理。