pkaramol
pkaramol

Reputation: 19402

Role of labels in istio's DestinationRule

I am going through the traffic management section of istio 's documentation.

In a DestinationRule example, it configures several service subsets.

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

My question (since it is not clear on the documentation) is about the role of spec.subsets.name.labels

Do these labels refer to:

or

Where exactly (in terms of k8s manifests) do the above labels reside?

Upvotes: 2

Views: 696

Answers (1)

yyyyahir
yyyyahir

Reputation: 2322

Istio sticks to the labeling paradigm on Kubernetes used to identify resources within the cluster.

Since this particular DestinationRule is intended to determine, at network level, which backends are to serve requests, is targeting pods in the Deployment instead of the Deployment itself (as that is an abstract resource without any network features).

A good example of this is in the Istio sample application repository:

The Deployment doesn't have any version: v1 labels. However, the pods grouped in it does:

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

And the DestinationRule picks these objects by their version label:

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

Upvotes: 2

Related Questions