【问题标题】:Kubernetes ingress controller strict round-robinKubernetes 入口控制器严格循环
【发布时间】:2021-07-30 15:31:27
【问题描述】:

我正在尝试在 Kubernetes 中设置一个入口控制器,它可以让我在同一服务中运行的两个(或多个)pod 之间进行严格的交替。

我的测试设置是单个 Kubernetes 节点,部署了两个 nginx pod。 然后使用 NodePort 服务公开部署。

然后我部署了一个入口控制器(我分别尝试了Kubernetes Nginx Ingress ControllerNginx Kubernetes Ingress Controller)并为 NodePort 服务创建了一个入口规则。

我在每个 nginx pod 上编辑了 index.html,使一个显示“SERVER A”,另一个显示“SERVER B”,然后运行一个脚本,然后 curls NodePort 服务 100 次。它每次greps "SERVER x",将其附加到一个输出文件,然后在最后计算每个的数量。

正如预期的那样,卷曲 NodePort 服务本身(它使用 kube-proxy),我得到了完全随机的结果——从 50:50 到 80:20 的任何时间都在 Pod 之间分割。

卷曲入口控制器,我总是在 50:50 和 49:51 之间得到一些拆分,这很棒——默认的循环分配运行良好。

但是,查看结果,我可以看到我已经连续 4 次卷曲同一服务器,但我需要强制执行严格的交替 A-B-A-B。我花了很多时间研究这个并尝试了不同的选项,但我找不到可以做到这一点的设置。请问大家有什么建议吗?

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

【问题讨论】:

  • 嘿!只是好奇,为什么需要在 de pod 之间进行特定的严格交替?
  • 好吧,也许不是需要,但我想要 :) 在生产中,调用我们的一项服务可能需要几分钟时间。该服务(当前)是单线程的,因此如果将两个或三个请求发送到同一个 pod,它们会排队并最终超时。我试图通过找出如何将入口控制器设置为严格的循环交替来弄清楚这些调用的分配逻辑是什么。

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

Nginx 默认行为类似于严格的round-robin。如果需要,您可以使用它在具有不同配置调整的 Nginx 入口上执行大多数测试。

还有其他选项,例如您可以使用 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 也是不错的选择。

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2021-04-17
    • 2020-02-10
    • 2018-07-22
    • 2018-10-29
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多