ืฉืืืืฉ ื-Istio+Kiali ืืื ืืืคืขืื ืืืืืืืฉ ืคืจืืกื ืงื ืจืืช
ืืืืจืื ืืกืืจื ืื
ืคืจืืกื ืงื ืจืืช ื-Kubernetes #1: Gitlab CI ืคืจืืกื ืงื ืจืืช ื-Kubernetes #2: ืืฉืงืืช ืืจืื - (ืืืืืจ ืืื)
- ืคืจืืกื ืงื ืจืืช ืืืืฆืขืืช Jenkins-X Istio Flagger
ืคืจืืกื ืงื ืจืืช
ืื ื ืืงืืืื ืฉืืชื ืงืืจื
Istio
ืืื ืื ื ืื ืืืื ืฉืืงืจืืืช ืืืืืจ ืืื ืืชื ืืืจ ืืืืข ืื ืื Istio. ืื ืื, ืื ืืชื ืืืื ืืงืจืื ืขื ืื
ืืงืฉื ืืืืื ืื
ืื ืชืจืืื ืืืื ืฉื ื ืืืืืื: ืืืคืืืงืฆืื ืฉืื ื ื- istio-proxy.
ื ืฉืชืืฉ ืืืคืืืงืฆืืืช ืืืืงื ืคืฉืืื ืขื frontend-nginx ื-backend python pods. ืืคืื nginx ืคืฉืื ืืคื ื ืื ืืงืฉื ืืชืจืืื ืืงืฆื ืืืืืจื ืืืขืืื ืืคืจืืงืกื. ืคืจืืื ื ืืชื ืืืฆืื ื-yamls ืืืืื:
ืืคืขืืช ืืืฉืื ืืืืืงื ืืขืฆืื
ืื ืืชื ืจืืฆื ืืืืช ืืขืงืืืช ืืืืืื ืฉืื ืืืืฉืชืืฉ ืืืืฉืื ืืืืืงื ืืื ืืขืฆืื, ืจืื
ืคืจืืกื ืจืืฉืื ืืช
ืืืฉืจ ืื ื ืืฉืืงืื ืืช ืืคืจืืกื ืืจืืฉืื ื, ืื ื ืจืืืื ืฉืืชืจืืืืื ืฉื ืืืคืืืงืฆืื ืฉืื ื ืืฉ ืจืง 2 ืืืืืืช, ืืืืืจ, Istio Sidecar ืืืืืง ืืืืฉื:
ืืื ืื ื ืื ืจืืืื ืืช Istio Gateway Loadbalancer ืืืจืื ืืฉืืืช istio-system
:
ืืืฆืืจ ืชื ืืขื
ืื ื ื ืฉืชืืฉ ื-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 ืืงืืืื (ืจืื ืืืื ืืคืจืืื).
istioctl dashboard kiali # admin:admin
ืงืืืื ืืืืืื ืช ืืช ืืชื ืืขื ืื ืืืืืช ืืจื Mesh
ืืคื ืฉืื ื ืืืืืื ืืจืืืช, 100% ืืืชื ืืขื ืขืืืจืช ืืฉืืจืืช ื-frontend, ืืืืืจ ืืื ื-frontend pods ืขื ืืชืืืืช v1, ืืืืืื ืฉืื ื ืืฉืชืืฉืื ืืคืจืืงืกื nginx ืคืฉืื ืฉืื ืชื ืืงืฉืืช ืืฉืืจืืช ื-backend, ืืฉืจ ืืชืืจื ืืคื ื ืืืชื ื-backend pods ืขื ืชืืืืช v1.
Kiali ืขืืื ืืฆืืื ืขื Istio ืืืกืคืง ืคืชืจืื ืขืืืื Mesh ืืงืืคืกื. ืคืฉืื ื ืืืจ.
ืคืจืืกื ืงื ืจืืช
ืืงืฆื ืืืืืจื ืฉืื ื ืืืจ ืืืื ืฉืชื ืคืจืืกืืช k8s, ืืืช ืขืืืจ v1 ืืืืช ืขืืืจ v2. ืขืืฉืื ืื ืื ื ืจืง ืฆืจืืืื ืืืืื ืืืืกืืื ืืืขืืืจ ืืืื ืืกืืื ืฉื ืืงืฉืืช ื-v2.
ืฉืื 1: 10%
ืืื ืื ืฉืื ืื ื ืฆืจืืืื ืืขืฉืืช ืืื ืืืชืืื ืืช ืืืฉืงื ืฉื ื-VirtualService ืคื ืืื
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% ืืืืงืฉืืช ืื ืืชืืืช ืืืจืกื 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
ืฉืื 3: 100%
ืืขืช ืืคืจืืกื ืฉื Canary ืืืืื ืืืืืฉื ืืฉืืื ืืื ืืชืขืืืจื ืืืคื ืืช ืืืจืกื 2:
ืืืืงืช ืงื ืจื ืืืืคื ืืื ื
ื ื ืื ืฉืื ื ืฉืืืืื ืืขืช 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 ืขื ืืื ืฉืืืืช ืืืืชืจืช:
ืืงืฉืืช ืืื ืืืชืจืช ืขืืืื ืืื ืขื ืขื ืืื ืืืืก ืฉื 1/10:
ืงื ืจื ืืฉืชื ืืจืกืืืช ืชืืืืืช
ืืขืช ื ืฉืงืื ืืช ืืืคืฉืจืืช ืฉืื ืืฉ ืื ื ืืจืกื v2 ืื ืขืืืจ ืืืืืช ืืื ืขืืืจ ืืงืฆื ืืืืืจื. ืขืืืจ ืฉื ืืื, ืฆืืื ื ืฉ-10% ืืืชื ืืขื ืฆืจืืืื ืืขืืืจ ืืืจืกื 2:
ืื ื ืจืืืื ืฉ-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, ืื ืืืืฆืขืืช ืฉืชื ืคืจืืกืืช K8s. ืฉื ืฉืืื ื ืืืืก ืืืงืฉืืช ืขื ืืื ืฉืื ืื ืืกืคืจ ืืืขืชืงืื. ืืืฉื ืื ืขืืืืช, ืื ืืฉ ืื ืืกืจืื ืืช ืจืฆืื ืืื.
Istio ืืืคืฉืจ ืืงืืืข ืืช ืืืก ืืืงืฉืืช ืืื ืงืฉืจ ืืืกืคืจ ืืืขืชืงืื. ืืฉืืขืืช ืืืืจ ืืื, ืืืฉื, ืฉืื ื ืืืืืื ืืืฉืชืืฉ ื-HPAs (Horizontal Pod Autoscalers) ืืืื ืฆืืจื ืืืืืืจ ืืืชื ืืืชืื ืืืฆื ืื ืืืื ืฉื ืืคืจืืกื ืืงื ืจืืช.
ืกื ืืื
Istio ืขืืื ืืฆืืื ืืืฉืืืืฉ ืื ืืื ืขื ืงืืืื ืืืฆืจ ืฉืืืื ืืืง ืืืื. ืืื ืืจืฉืืืช ืชืืืื ืืขื ืืื ืฉืื ืืื ืฉืืืื ืฉื Spinnaker ืขื Istio ืืืืืืืฆืื ืื ืืชืื ืงื ืจื.
ืืงืืจ: www.habr.com