标签在 istio 的 DestinationRule 中的作用

Role of labels in istio's DestinationRule

我正在查看 istio 文档的 traffic management section

在一个DestinationRule示例中,它配置了几个服务子集。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3

我的问题(因为文档中并不清楚)是关于 spec.subsets.name.labels

的作用

这些labels指的是:

上述 labels 究竟位于何处(根据 k8s 清单)?

Istio 坚持 labeling paradigm on Kubernetes 用于识别集群内的资源。

由于这个特定的 DestinationRule 旨在确定,在网络级别,哪些后端将服务于请求,目标是 pods 在 Deployment 中而不是 Deployment 本身(因为这是一个抽象没有任何网络功能的资源)。

一个很好的例子是 Istio sample application repository:

Deployment 没有任何 version: v1 标签。但是,其中分组的 pods 确实:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tcp-echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tcp-echo
      version: v1
  template:
    metadata:
      labels:
        app: tcp-echo
        version: v1
    spec:
      containers:
      - name: tcp-echo
        image: docker.io/istio/tcp-echo-server:1.1
        imagePullPolicy: IfNotPresent
        args: [ "9000", "hello" ]
        ports:
        - containerPort: 9000

并且 DestinationRule 通过版本标签挑选这些对象:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: tcp-echo-destination
spec:
  host: tcp-echo
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2