Configure Traffic Management Using Istio

Configure your Armory CD-as-a-Service deployment to use Istio for traffic management.

Before you begin

CD-as-a-Service does not configure proxy sidecar injection.

Create your Istio resources manifest

Create a manifest that defines your VirtualService and DestinationRule resources. Armory recommends one VirtualService with one DestinationRule for your deployment. CD-as-a-Service modifies these resources based on the canary strategy that you define in your deployment file. You can deploy these resources separately or as part of your CD-as-a-Service deployment.

Configure your CD-as-a-Service deployment

Configure your Istio resources in the trafficManagement.targets section of your deployment file.

trafficManagement:
  - targets: ["<target-name>"]
    istio:
    - virtualService:
        name: <VirtualService-metadata-name>
        httpRouteName: <VirtualService-http-route-name>
      destinationRule:
        name: <DestinationRule-metadata-name>               
        activeSubsetName: <VirtualService-http-route-destination-subset-name>
        canarySubsetName: <canary-subset-name>     
  • targets: (Optional) comma-delimited list of deployment targets; if omitted, CD-as-a-Service applies the traffic management configuration to all targets.

  • istio.virtualService: (Required)

    • istio.virtualService.name: The name of your VirtualService
    • istio.virtualService.httpRouteName: The name of the HTTPRoute defined in your VirtualService. This field is optional if you define only one HTTPRoute.
  • istio.destinationRule: Optional if you only define only one DestinationRule.

    • istio.destinationRule.name: The name of your DestinationRule
    • istio.destinationRule.activeSubsetName: The name of the subset configured in your VirtualService HTTPRoute destination. This subset is running the current version of your app. activeSubsetName is optional if you define only one active subset.
    • istio.destinationRule.canarySubsetName: (Optional) The name of the canary subset defined in your DestinationRule.

Example resources and deployment files

In this example, you deploy an app called “reviews”. You define your Istio resources in istio-resources.yaml and deploy that manifest as part of your app deployment.

CD-as-a-Service Deployment (deploy.yaml) Istio Resources (istio-resources.yaml)
version: v1
kind: kubernetes
application: reviews
targets: 
  dev:
    account: dev
    namespace: istiodemo
		strategy: strategy1 
manifests:
  - path: manifests/reviews.yaml
  - path: manifests/istio-resources.yaml
strategies:
  strategy1:
    canary: 
      steps:
        - setWeight:
            weight: 10
        - pause:
            untilApproved: true
        - setWeight:
            weight: 90
        - pause:
            untilApproved: true
trafficManagement:
  - targets: ["dev"]
    istio:
    - virtualService: 
        name: reviews 
        httpRouteName: http-route-reviews
      destinationRule: 
        name: reviews 
        activeSubsetName: stable
        canarySubsetName: canary # does not exist yet
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews.istiodemo.svc.cluster.local
        subset: stable
    name: http-route-reviews
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews.istiodemo.svc.cluster.local
  subsets:
  - name: stable
    labels:
      app: reviews

Mapping

Deployment Field (deploy.yaml) Deploy Line Istio Resources Field (istio-resources.yaml) Istio Line
virtualService.name 28 VirtualService.metadata.name 4
virtualService.httpRouteName 29 VirtualService.http.route.name 13
destinationRule.name 31 DestinationRule.metadata.name 18
destinationRule.activeSubsetName 32 VirtualService.http.route.destination.subset 12

What’s next


Last modified January 13, 2023: (d790310)