Usando Istio + Kiali para executar e renderizar uma implantação Canary

Artigos neste ciclo
- Implantação Canary no Kubernetes nº 1: Gitlab CI
- Implantação Canary no Kubernetes nº 2: lançamentos de Argo
- (Este artigo)
- Implantação Canary com Jenkins-X, Istio e Flagger
Implantação canário
, , Canary deployments Kubernetes.
Istio

: istio-proxy.
frontend-nginx backend python. nginx backend . yamls:
, . readme .
Deployment
Deployment , 2 , Istio sidecar :

Istio Gateway Loadbalancer namespace istio-system
:

IP, , frontend backend :
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
frontend.istio-test
hosts .
Mesh Kiali
Istio Tracing, Grafana, Prometheus Kiali ( . readme ). , Kiali :
istioctl dashboard kiali # admin:admin

Kiali Mesh
, 100% frontend service, label v1, nginx-, backend service, backend label v1.
Kiali Istio Mesh. .
Canary Deployment
k8s deployments, v1 v2. Istio v2.
1: 10%
VirtualService istio.yaml:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10

, 10% v2.
2: 50%
50%:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
...
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 50
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 50

3: 100%
Canary deployment v2:

Canary
, v2 10% . , v2, , ?
, HTTP :
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- headers:
canary:
exact: "canary-tester"
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
curl v2 :

1/10:

Canary
, v2 frontend backend. , 10% v2:

, frontend v1 v2 1/10 backend v1 v2.
frontend-v2 backend-v2, v1? 1/10 frontend, backend-v2 sourceLabels
:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
...
- match:
- sourceLabels:
app: frontend
version: v2
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
, :

Canary
Canary deployment , k8s deployments. , . , .
Istio . , , HPAs (Horizontal Pod Autoscalers — ) Canary .
Istio Kiali . Spinnaker Istio Canary-.