2017-07-07 22 views
0

的K8S文档也不是很清楚使用不同的服务类型时,用什么路由发生,导致我一连串的问题:NodePort,LoadBalance服务 - 路由会发生什么?

为了帮助这个问题,假设以下群集设置:

  • 3个节点:N_aN_bN_c
  • 1服务:S_1
  • 2豆荚:P_x1P_x2属于服务S_1的一部分
  • P_x1N_a
  • P_x2运行上N_b

1)在运行时使用NodePortS_1使用端口x,不要在集群中的所有节点作出端口x提供的服务?或者只运行构成该服务的运行pod的节点使端口x上的服务可用?所以在这两种情况下,N_aN_b将使端口x上的S_1可用,但是我可以在端口x上打N_c

2)使用NodePortS_1的是,如果我在端口xN_a,我将只被路由到P_x1(例如,吊舱的节点上本地运行的服务),或可我被路由到P_x2,那么关闭节点并再次通过网络?

3)如果我运行S_1LoadBalanced服务,将负载均衡配置的唯一请求路由到N_aN_b?当这些请求分别打到N_aN_b时,只能分别路由到吊舱P_x1P_x2?那么在网络上一跳,还是会与所有三个节点通信,并依靠它们进行第二级路由/负载平衡? (这看起来效率很低)。

4)Ingress控制器的功能是否与LoadBalanced服务有不同的路由选择(L7而不是L4)?

回答

0

1)是的。 NodePort在所有工作节点上打开一个端口。在创建服务时,将在所有工作节点上创建一个iptables规则。当任何节点上的pod访问此服务的IP时,pod所在物理节点上的iptables规则将相应地重定向其数据包。

2)两者。服务在所有关联的Pod上进行WRR负载平衡。

3)我做裸机部署,所以我不能回答这个问题。

4)Afaik,Ingress是LoadBalancer的替代品。您不必依赖云提供商的反向代理,而是部署自己在k8s群集中运行的Ingress。