【问题标题】:Locality LoadBalacing not working on IstioLocality LoadBalacing 在 Istio 上不起作用
【发布时间】:2022-04-27 16:29:26
【问题描述】:

我们有一个带有约 100 个节点的 kubernetes 集群,并且希望启用 Locality LoadBalancing 功能。由于我们的区域间数据流量太高,这将为我们每年节省多达 7 万美元。

我已经关注docs 并像这样设置 istio configmap:

 ...
  meshNetworks: {}


  localityLbSetting:
    enabled: true
    distribute:
    - from: us-east-1/us-east-1a/*
      to:
        "us-east-1/us-east-1a/*": 100
    - from: us-east-1/us-east-1b/*
      to:
        "us-east-1/us-east-1b/*": 100
...

然后部署了 2 个应用,其中一个只是响应部署节点的区域(我们使用的是 VirtualService),另一个只是执行请求。

来自 us-east-1a 中节点的请求应该只能由同一区域中的节点回复,对吧?

但这并没有发生。

我们也尝试在 Pilot pod 中设置这个变量:

PILOT_ENABLE_LOCALITY_LOAD_BALANCING

当我从部署在区域“us-east-1a”中的一个 pod 获取日志时,它会显示来自两个区域的回复。

Istio 版本:1.2.8

Kubernetes 版本:1.14

感谢任何帮助!谢谢!

【问题讨论】:

  • 您使用什么平台/基础设施?
  • 我使用的是 AWS,我的 kubernetes 配置了 KOPS
  • @panicked 我有同样的问题,我的 Kubernetes 集群是使用 kops 和 istio 部署的。你解决了吗?
  • 是的,我做到了。正在请求的服务,是的,正在执行请求的 pod 的服务,也必须有一个服务。

标签: kubernetes istio


【解决方案1】:

恐怕您的配置在'distribute' 模式下'Locality Load Balancing' 功能上下文中区域/区域之间的'Locality' 权重无效。

您的 istio-pilot 的日志应该会以类似于以下警告的形式为您提供线索:

<timestamp> warn    failed to read mesh configuration, using default: 1 error occurred:
    * locality weight must not be in range [1, 100]

我认为您无法在 Istio 文档的任何地方找到它的文档,但可以在 here 找到权重验证背后的逻辑。

【讨论】:

  • 总和不超过100。所有to 权重的总和(在每个 中分配from - to 组合)应为100
【解决方案2】:

来自@panicked 的comment

生成请求的 pod(src pod)本身也必须属于 K8s 服务,即使该服务不直接参与请求。


顺便说一句,K8s recommends:

如果运营商的目标不是跨区域和区域分配负载,而是限制故障转移的区域性以满足其他运营要求,则运营商可以设置“故障转移”策略而不是“分布”策略。

distribute 似乎工作得很好。 对于failover(和failoverPriority),您还定义了must outlierDetection

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2020-07-21
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多