Skip to content

Latest commit

 

History

History
220 lines (192 loc) · 3.74 KB

readme.md

File metadata and controls

220 lines (192 loc) · 3.74 KB

Chapter 9

Example 9-1: backend-service-resolver.yaml

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceResolver
metadata:
  name: backend
spec:
  subsets:
    v1:
      filter: 'Service.Meta.version == v1'
    v2:
      filter: 'Service.Meta.version == v2'

Example 9-2: backend-service-resolver.hcl

Kind          = "service-resolver"
Name          = "backend"
Subsets = {
  v1 = {
    Filter = "Service.Meta.version == v1"
  }
  v2 = {
    Filter = "Service.Meta.version == v2"
  }
}

Example 9-3: backend-service-splitter.yaml

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceSplitter
metadata:
  name: backend
spec:
  splits:
    - weight: 100
      serviceSubset: v1
    - weight: 0
      serviceSubset: v2

Example 9-4: backend-service-splitter.hcl

Kind = "service-splitter"
Name = "backend"
Splits = [
  {
    Weight        = 100
    ServiceSubset = "v1"
  },
  {
    Weight        = 0
    ServiceSubset = "v2"
  }
]

Example 9-5: backend-v2-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-v2
  labels:
    app: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
      version: v2
  template:
    metadata:
      labels:
        app: backend
        version: v2
      annotations:
        consul.hashicorp.com/connect-inject: "true"
        consul.hashicorp.com/service-meta-version: "v2"
    spec:
      containers:
        - name: backend
          image: ghcr.io/consul-up/birdwatcher-backend:1.0.0
          env:
            - name: BIND_ADDR
              value: "0.0.0.0:7000"
            - name: TRACING_URL
              value: "http://jaeger-collector.default:9411"
            - name: VERSION
              value: "v2"
          ports:
            - containerPort: 7000
          readinessProbe:
            httpGet:
              port: 7000
              path: /healthz
            periodSeconds: 5

Example 9-6: backend-v2.hcl

service {
  name = "backend"
  id = "backend-v2"
  port = 7001

  meta {
    version = "v2"
    prometheus_port = "20203"
  }

  connect {
    sidecar_service {
      port = 22001
      proxy {
        config {
          envoy_prometheus_bind_addr = "0.0.0.0:20203"
        }
      }
    }
  }

  checks = [
    {
      name = "Health endpoint"
      http = "http://localhost:7001/healthz"
      interval = "10s"
      timeout = "1s"
    }
  ]
}

Example 9-7: backend-v2.service

[Unit]
Description="Backend service v2"
Requires=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/backend
Restart=on-failure

Environment=BIND_ADDR=0.0.0.0:7001
Environment=TRACING_URL="http://localhost:9411"
Environment=VERSION=v2

[Install]
WantedBy=multi-user.target

Example 9-8: backend-v2-sidecar-proxy.service

[Unit]
Description="Backend v2 sidecar proxy service"
Requires=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/consul connect envoy -sidecar-for backend-v2 \
  -admin-bind 127.0.0.1:19003
Restart=on-failure

[Install]
WantedBy=multi-user.target

Example 9-9: backend-service-router.yaml

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: backend
spec:
  routes:
    - match:
        http:
          queryParam:
              - name: canary
                exact: "true"
      destination:
        serviceSubset: v2

Example 9-10: backend-service-router.hcl

Kind   = "service-router"
Name   = "backend"
Routes = [
  {
    Match = {
      HTTP = {
        QueryParam = [
          {
            Name = "canary"
            Exact = "true"
          }
        ]
      }
    }
    Destination = {
      ServiceSubset = "v2"
    }
  }
]