Kubernetes入口控制器严格轮询

shyt4zoc  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(242)

我正在尝试在Kubernetes中设置一个入口控制器,它将在同一服务中运行的两个(或更多)Pod之间给予严格的交替。
我的测试设置是一个Kubernetes节点,部署了两个nginx pod。然后使用NodePort服务公开部署。
然后,我部署了一个入口控制器(我分别尝试了Kubernetes Nginx Ingress ControllerNginx 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。我已经花了相当多的研究这一点,并尝试了不同的选择,但我找不到一个设置,将这样做。有人有什么建议吗?

我宁愿坚持使用我试过的一个入口控制器,但我愿意尝试不同的控制器,如果它能满足我的需要的话。

tyky79it

tyky79it1#

Nginx默认行为类似于round-robinonly。您可以使用它在Nginx Ingress上执行大多数测试,如果需要,可以使用不同的配置调整
还有其他选项,例如您可以使用Istio****服务网格
只需更改配置,即可根据需要对流量进行负载平衡

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN
  subsets:
  - name: testversion
    labels:
      version: v3
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN

阅读更多: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****ingresshaproxy-ingress也是不错的选择。

kmbjn2e3

kmbjn2e32#

看起来有两个版本的入口控制器。
1.哪个K8S社区一直在维护https://github.com/kubernetes/ingress-nginx

  1. Nginx正在维护(开源和付费):https://github.com/nginxinc/kubernetes-ingress
    第二个似乎在添加nginx.org/lb-method: “round_robin”后执行严格的循环调度(仍在测试),而第一个在副本之间执行50:50聚合负载平衡。
    在我看来,这是一个重要的区别,但与许多混淆的名称,他们之间的差异可以阅读here
    我在@hiiamelliott的评论的帮助下撰写了这个答案。

相关问题