Istio 子集是关于什么的

What's Istio Subsets all about

任何人都可以用简单的方式解释 istio 子集和目标规则,并解释他们试图通过引入子集来解决的问题。

DestinationRule 是一种资源,在路由发生在 Service 之后添加额外的路由策略,例如假设您有以下服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  selector:
    app: my-service
  ports:
    - name: http
      protocol: TCP
      port: 80

这个 Service 可以路由到多个资源,它会选择任何包含标签 app: my-service 的 pod,这意味着您可以拥有例如同一服务的不同版本 运行 并行使用每个部署。

现在,使用 DestinationRule 您可以在此基础上添加额外的路由策略,子集意味着您的 pods 的一部分,您可以通过标签识别它,例如:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service-ab
spec:
  host: my-service.default.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN
  subsets:
  - name: a-test
    labels:
      version: v3
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN

DestinationRule 对所有流向名为 a-test 的子集的流量使用循环负载平衡策略,该子集由带有标签(版本:v3)的端点(例如,pods)组成.这对于 A/B 测试等场景很有用,或者让您的多个版本并行服务 运行。

此外,您可以为子集指定自定义 TrafficPolicies,这将覆盖在服务级别定义的 TrafficPolicies。