Which is invoked first Virtual Service or Destinationrule?

1/20/2020

I have a confusion between Virtual Service and Destinationrule on which one is executed first? Let’s say I have below configs,

Destinationrule -

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: movies
  namespace: aio
spec:
  host: movies
  subsets:
  - labels:
      version: v1
    name: version-v1
  - labels:
      version: v2
    name: version-v2
---

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: movies
  namespace: aio
spec:
  hosts:
  - movies
  http:
  - route:
    - destination:
        host: movies
        subset: version-v1
      weight: 10
    - destination:
        host: movies
        subset: version-v2
      weight: 90
---

I read somewhere that, A VirtualService defines a set of traffic routing rules to apply when a host is addressed. DestinationRule defines policies that apply to traffic intended for service after routing has occurred. Does this mean Destinationrules are invoked after Virtualservices?

I have a small diagram, is my understanding correct?

enter image description here

-- John Seen
istio
kubernetes
openshift

1 Answer

1/20/2020

Yes,

According to istio documentation about DestinationRule:

DestinationRule defines policies that apply to traffic intended for a service after routing has occurred.

And for VirtualService:

A VirtualService defines a set of traffic routing rules to apply when a host is addressed.

There is an youtube video: Life of a Packet through Istio it explains in detail the order of processes that are applied to a packet going through the istio mesh.

-- Piotr Malec
Source: StackOverflow