默认情况下,Istio使用循环负载平衡策略,其中实例池中的每个服务实例依次获得一个请求。Istio还支持以下模型,您可以在针对特定服务或服务子集的请求的目标规则中指定这些模型。

  • 随机:请求被随机转发到池中的实例
  • 权重:请求根据特定的百分比被转发到池中的实例。
  • 最小请求:请求被转发给请求数量最少的实例。

针对每个负载的详情信息,参考链接

1. Destination rule example

下面的示例目标规则使用不同的负载平衡策略为my-svc目标服务配置三个不同的子集:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: DestinationRule
  3. metadata:
  4. name: my-destination-rule
  5. spec:
  6. host: my-svc
  7. trafficPolicy:
  8. loadBalancer:
  9. simple: RANDOM
  10. subsets:
  11. - name: v1
  12. labels:
  13. version: v1
  14. - name: v2
  15. labels:
  16. version: v2
  17. trafficPolicy:
  18. loadBalancer:
  19. simple: ROUND_ROBIN
  20. - name: v3
  21. labels:
  22. version: v3

每个子集都是基于一个或多个标签定义的,在Kubernetes中,这些标签是附加到对象(如Pods)上的键/值对。这些标签在Kubernetes服务的部署中作为元数据应用,以识别不同的版本。

除了定义子集之外,此目标规则还具有针对此目标中的所有子集的默认流量策略,以及仅针对该子集覆盖该策略的特定于子集的策略。在subsets字段上定义的默认策略为v1和v3子集设置一个简单的随机负载均衡器。在v2策略中,循环负载均衡器在相应的子集字段中指定。