ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืฉื™ืžื•ืฉ ื‘-Istio+Kiali ื›ื“ื™ ืœื”ืคืขื™ืœ ื•ืœื”ืžื—ื™ืฉ ืคืจื™ืกื” ืงื ืจื™ืช

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืžืืžืจื™ื ื‘ืกื“ืจื” ื–ื•

  1. ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #1: Gitlab CI
  2. ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #2: ื”ืฉืงื•ืช ืืจื’ื•
  3. (ื”ืžืืžืจ ื”ื–ื”)
  4. ืคืจื™ืกื” ืงื ืจื™ืช ื‘ืืžืฆืขื•ืช Jenkins-X Istio Flagger

ืคืจื™ืกื” ืงื ืจื™ืช

ืื ื• ืžืงื•ื•ื™ื ืฉืืชื” ืงื•ืจื ื—ืœืง ืจืืฉื•ืŸ, ืฉื ื”ืกื‘ืจื ื• ื‘ืงืฆืจื” ืžื”ืŸ ืคืจื™ืกื•ืช Canary ื•ื”ืจืื ื• ื›ื™ืฆื“ ืœื™ื™ืฉื ืื•ืชืŸ ื‘ืืžืฆืขื•ืช ืžืฉืื‘ื™ Kubernetes ืกื˜ื ื“ืจื˜ื™ื™ื.

Istio

ื•ืื ื—ื ื• ืžื ื™ื—ื™ื ืฉื‘ืงืจื™ืืช ื”ืžืืžืจ ื”ื–ื” ืืชื” ื›ื‘ืจ ื™ื•ื“ืข ืžื” ื–ื” Istio. ืื ืœื, ืื– ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขืœ ื–ื” ื›ืืŸ.

ื‘ืงืฉื” ืœืžื‘ื—ื ื™ื

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื›ืœ ืชืจืžื™ืœ ืžื›ื™ืœ ืฉื ื™ ืžื™ื›ืœื™ื: ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื•- istio-proxy.

ื ืฉืชืžืฉ ื‘ืืคืœื™ืงืฆื™ื™ืช ื‘ื“ื™ืงื” ืคืฉื•ื˜ื” ืขื frontend-nginx ื•-backend python pods. ื”ืคื•ื“ nginx ืคืฉื•ื˜ ื™ืคื ื” ื›ืœ ื‘ืงืฉื” ืœืชืจืžื™ืœ ื”ืงืฆื” ื”ืื—ื•ืจื™ ื•ื™ืขื‘ื•ื“ ื›ืคืจื•ืงืกื™. ืคืจื˜ื™ื ื ื™ืชืŸ ืœืžืฆื•ื ื‘-yamls ื”ื‘ืื™ื:

ื”ืคืขืœืช ื™ื™ืฉื•ื ื”ื‘ื“ื™ืงื” ื‘ืขืฆืžืš

ืื ืืชื” ืจื•ืฆื” ืœืœื›ืช ื‘ืขืงื‘ื•ืช ื”ื“ื•ื’ืžื” ืฉืœื™ ื•ืœื”ืฉืชืžืฉ ื‘ื™ื™ืฉื•ื ื”ื‘ื“ื™ืงื” ื”ื–ื” ื‘ืขืฆืžืš, ืจืื” ืคืจื•ื™ืงื˜ readme.

ืคืจื™ืกื” ืจืืฉื•ื ื™ืช

ื›ืืฉืจ ืื ื• ืžืฉื™ืงื™ื ืืช ื”ืคืจื™ืกื” ื”ืจืืฉื•ื ื”, ืื ื• ืจื•ืื™ื ืฉื‘ืชืจืžื™ืœื™ื ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื™ืฉ ืจืง 2 ืžื›ื•ืœื•ืช, ื›ืœื•ืžืจ, Istio Sidecar ื‘ื“ื™ื•ืง ืžื™ื•ืฉื:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื•ืื ื—ื ื• ื’ื ืจื•ืื™ื ืืช Istio Gateway Loadbalancer ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช istio-system:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื™ื™ืฆื•ืจ ืชื ื•ืขื”

ืื ื• ื ืฉืชืžืฉ ื‘-IP ื”ื‘ื ื›ื“ื™ ืœื™ืฆื•ืจ ืชื ื•ืขื” ืฉืชืชืงื‘ืœ ืขืœ ื™ื“ื™ ื”ืคื•ื“ื™ื ื”ืงื“ืžื™ื™ื ื•ืชื•ืขื‘ืจ ืืœ ื”ืคื•ื“ื™ื ื”ืื—ื•ืจื™ื™ื:

while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done

ื ื•ืกื™ืฃ ื’ื frontend.istio-test ืœืงื•ื‘ืฅ ื”ืžืืจื—ื™ื ืฉืœื ื•.

ื”ืฆื’ Mesh ื“ืจืš Kiali

ื”ืชืงื ื• ืืช ืืคืœื™ืงืฆื™ื™ืช ื”ื‘ื“ื™ืงื” ื•ืืช Istio ื™ื—ื“ ืขื Tracing, Grafana, Prometheus ื•ืงื™ืืœื™ (ืจืื” ืœืžื˜ื” ืœืคืจื˜ื™ื). ืคืจื•ื™ืงื˜ readme). ืœื›ืŸ ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืงื™ืืœื™ ื‘ืืžืฆืขื•ืช:

istioctl dashboard kiali # admin:admin

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืงื™ืืœื™ ืžื“ืžื™ื™ื ืช ืืช ื”ืชื ื•ืขื” ื”ื ื•ื›ื—ื™ืช ื“ืจืš Mesh

ื›ืคื™ ืฉืื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช, 100% ืžื”ืชื ื•ืขื” ืขื•ื‘ืจืช ืœืฉื™ืจื•ืช ื”-frontend, ื•ืœืื—ืจ ืžื›ืŸ ืœ-frontend pods ืขื ื”ืชื•ื•ื™ืช v1, ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ืคืจื•ืงืกื™ nginx ืคืฉื•ื˜ ืฉืžื ืชื‘ ื‘ืงืฉื•ืช ืœืฉื™ืจื•ืช ื”-backend, ืืฉืจ ื‘ืชื•ืจื• ืžืคื ื” ืื•ืชืŸ ืœ-backend pods ืขื ืชื•ื•ื™ืช v1.

Kiali ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ืขื Istio ื•ืžืกืคืง ืคืชืจื•ืŸ ืขื™ื‘ื•ื“ Mesh ื‘ืงื•ืคืกื”. ืคืฉื•ื˜ ื ื”ื“ืจ.

ืคืจื™ืกื” ืงื ืจื™ืช

ื”ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœื ื• ื›ื‘ืจ ื›ื•ืœืœ ืฉืชื™ ืคืจื™ืกื•ืช k8s, ืื—ืช ืขื‘ื•ืจ v1 ื•ืื—ืช ืขื‘ื•ืจ v2. ืขื›ืฉื™ื• ืื ื—ื ื• ืจืง ืฆืจื™ื›ื™ื ืœื”ื’ื™ื“ ืœืื™ืกื˜ื™ื• ืœื”ืขื‘ื™ืจ ืื—ื•ื– ืžืกื•ื™ื ืฉืœ ื‘ืงืฉื•ืช ืœ-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

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืื ื• ืจื•ืื™ื ืฉ-10% ืžื”ื‘ืงืฉื•ืช ืžื ื•ืชื‘ื•ืช ืœื’ืจืกื” 2.

ืฉืœื‘ 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

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืฉืœื‘ 3: 100%

ื›ืขืช ื”ืคืจื™ืกื” ืฉืœ Canary ื™ื›ื•ืœื” ืœื”ื™ื—ืฉื‘ ื›ืฉืœืžื” ื•ื›ืœ ื”ืชืขื‘ื•ืจื” ืžื•ืคื ื™ืช ืœื’ืจืกื” 2:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื‘ื“ื™ืงืช ืงื ืจื™ ื‘ืื•ืคืŸ ื™ื“ื ื™

ื ื ื™ื— ืฉืื ื• ืฉื•ืœื—ื™ื ื›ืขืช 2% ืžื›ืœ ื”ื‘ืงืฉื•ืช ืœ-v10 backend. ืžื” ืื ื ืจืฆื” ืœื‘ื“ื•ืง ื™ื“ื ื™ืช ืืช 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 ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ื›ื•ืชืจืช:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื‘ืงืฉื•ืช ืœืœื ื›ื•ืชืจืช ืขื“ื™ื™ืŸ ื™ื•ื ืขื• ืขืœ ื™ื“ื™ ื”ื™ื—ืก ืฉืœ 1/10:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืงื ืจื™ ืœืฉืชื™ ื’ืจืกืื•ืช ืชืœื•ื™ื•ืช

ื›ืขืช ื ืฉืงื•ืœ ืืช ื”ืืคืฉืจื•ืช ืฉื‘ื” ื™ืฉ ืœื ื• ื’ืจืกื” v2 ื”ืŸ ืขื‘ื•ืจ ื”ื—ื–ื™ืช ื•ื”ืŸ ืขื‘ื•ืจ ื”ืงืฆื” ื”ืื—ื•ืจื™. ืขื‘ื•ืจ ืฉื ื™ื”ื, ืฆื™ื™ื ื• ืฉ-10% ืžื”ืชื ื•ืขื” ืฆืจื™ื›ื™ื ืœืขื‘ื•ืจ ืœื’ืจืกื” 2:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ืื ื• ืจื•ืื™ื ืฉ-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

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื:

ืคืจื™ืกื” ืงื ืจื™ืช ื‘-Kubernetes #3: Istio

ื”ื‘ื“ืœื™ื ืžื”ื’ื™ืฉื” ื”ืงื ืจื™ืช ื”ื™ื“ื ื™ืช

ะ’ ื”ื—ืœืง ื”ืจืืฉื•ืŸ ื‘ื™ืฆืขื ื• ืคืจื™ืกื” ื™ื“ื ื™ืช ืฉืœ Canary, ื’ื ื‘ืืžืฆืขื•ืช ืฉืชื™ ืคืจื™ืกื•ืช K8s. ืฉื ืฉืœื˜ื ื• ื‘ื™ื—ืก ื”ื‘ืงืฉื•ืช ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ืžืกืคืจ ื”ื”ืขืชืงื™ื. ื’ื™ืฉื” ื–ื• ืขื•ื‘ื“ืช, ืืš ื™ืฉ ืœื” ื—ืกืจื•ื ื•ืช ืจืฆื™ื ื™ื™ื.

Istio ืžืืคืฉืจ ืœืงื‘ื•ืข ืืช ื™ื—ืก ื”ื‘ืงืฉื•ืช ืœืœื ืงืฉืจ ืœืžืกืคืจ ื”ื”ืขืชืงื™ื. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื, ืœืžืฉืœ, ืฉืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘-HPAs (Horizontal Pod Autoscalers) ื•ืื™ืŸ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืื•ืชื ื‘ื”ืชืื ืœืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ืคืจื™ืกื” ื”ืงื ืจื™ืช.

ืกืš ื”ื›ืœ

Istio ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ื•ื”ืฉื™ืžื•ืฉ ื‘ื• ื™ื—ื“ ืขื ืงื™ืืœื™ ื™ื•ืฆืจ ืฉื™ืœื•ื‘ ื—ื–ืง ืžืื•ื“. ื”ื‘ื ื‘ืจืฉื™ืžืช ืชื—ื•ืžื™ ื”ืขื ื™ื™ืŸ ืฉืœื™ ื”ื•ื ืฉื™ืœื•ื‘ ืฉืœ Spinnaker ืขื Istio ืœืื•ื˜ื•ืžืฆื™ื” ื•ื ื™ืชื•ื— ืงื ืจื™.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”