我正在尝试在Kubernetes中设置一个入口控制器,它将在同一服务中运行的两个(或更多)Pod之间给予严格的交替。
我的测试设置是一个Kubernetes节点,部署了两个nginx pod。然后使用NodePort服务公开部署。
然后,我部署了一个入口控制器(我分别尝试了Kubernetes Nginx Ingress Controller和Nginx Kubernetes Ingress Controller),并为NodePort服务创建了一个入口规则。
我在每个nginx pod上编辑了index.html,这样一个显示“SERVER A”,另一个显示“SERVER B”,并运行了一个脚本,然后curl
s NodePort服务100次。它每次都grep
s“SERVER x”,将其附加到输出文件中,然后在最后计算每个文件的数量。
正如预期的那样, curl NodePort服务本身(它使用kube-proxy),我得到了完全随机的结果--pod之间从50:50到80:20的任何分裂。
curl ingress控制器,我始终得到50:50和49:51之间的分裂,这是伟大的-默认的循环分发工作得很好。
然而,查看结果,我可以看到我已经连续 curl 了同一台服务器4次,但我需要强制执行严格的交替A-B-A-B。我已经花了相当多的研究这一点,并尝试了不同的选择,但我找不到一个设置,将这样做。有人有什么建议吗?
我宁愿坚持使用我试过的一个入口控制器,但我愿意尝试不同的控制器,如果它能满足我的需要的话。
2条答案
按热度按时间tyky79it1#
Nginx默认行为类似于round-robinonly。您可以使用它在Nginx Ingress上执行大多数测试,如果需要,可以使用不同的配置调整。
还有其他选项,例如您可以使用Istio****服务网格。
只需更改配置,即可根据需要对流量进行负载平衡
阅读更多:https://istio.io/latest/docs/reference/config/networking/destination-rule/
&https://istio.io/latest/docs/reference/config/networking/destination-rule/#LoadBalancerSettings
然而,我建议只有当有一个大型集群实现2-3个服务时才使用
service mesh
,最好使用Nginx****ingress或haproxy-ingress也是不错的选择。kmbjn2e32#
看起来有两个版本的入口控制器。
1.哪个K8S社区一直在维护https://github.com/kubernetes/ingress-nginx
第二个似乎在添加
nginx.org/lb-method: “round_robin”
后执行严格的循环调度(仍在测试),而第一个在副本之间执行50:50聚合负载平衡。在我看来,这是一个重要的区别,但与许多混淆的名称,他们之间的差异可以阅读here
我在@hiiamelliott的评论的帮助下撰写了这个答案。