Code: Go Report Card Gateway API plugin CI

Social: Twitter Follow Slack

Argo Rollout Gloo Platform API Plugin

An Argo Rollouts plugin for Gloo Platform.

Quickstart

Install Argo Rollouts w/ downloaded Gloo Platform plugin (uses the vanilla quay.io/argoproj/argo-rollouts:latest image, which then downloads the Gloo Platform plugin on startup)

kubectl create ns argo-rollouts
kubectl apply -k ./deploy

Deploy the initial rollout state - 100% to green

kubectl apply -f ./examples/0-rollout-initial-state-green
kubectl argo rollouts dashboard &
open http://localhost:3100/rollouts

Add a rollout revision to perform a canary rollout to blue

kubectl apply -f ./examples/1-rollout-canary-blue

The rollout should progress to 10% blue and pause until manually promoted in the dashboard.

Argo Rollouts Plugin Installation

Requirements:

  1. Gloo Platform plugin the Argo Rollouts runtime container
  2. Register the plugin in the Argo Rollouts argo-rollouts-config ConfigMap
  3. Argo Rollouts RBAC to modify Gloo APIs

The plugin can be loaded into the controller runtime by building your own Argo Rollouts image, pulling it in an init container, or having the controller download it on startup. See Traffic Router Plugins for details.

See Kustomize patches in this repo for Argo Rollouts configuration examples.

Usage

Canary and stable services in the Rollout spec must refer to forwardTo destinations in routes that exist in one or more Gloo Platform RouteTables.

RouteTable and route selection is specified in the plugin config. Either a RouteTable label selector or a named RouteTable must be specified. RouteSelector is entirely optional; this is useful to limit matches to specific routes in a RouteTable if it contains any references to canary or stable services that you do not want to modify.

  strategy:
    canary:
      canaryService: canary
      stableService: stable
      trafficRouting:
        plugins:
          # the plugin name must match the name used in argo-rollouts-config ConfigMap
          solo-io/glooplatform:
            # select Gloo RouteTable(s); if both label and name selectors are used, the name selector
            # takes precedence
            routeTableSelector:
              # (optional) label selector
              labels:
                app: demo
              # filter by namespace
              namespace: gloo-mesh
              # (optional) select a specific RouteTable by name
              # name: rt-name
            # (optional) select specific route(s); useful to target specific routes in a RouteTable that has mutliple occurences of the canaryService or stableService 
            routeSelector:
              # (optional) label selector
              labels:
                route: demo-preview
              # (optional) select a specific route by name
              # name: route-name

Supported Gloo Platform Versions

  • All Gloo Platform versions 2.0 and newer

TODO