ื ืืฆื Istio + Kiali ืฆื ืงืึทืืขืจ ืืื ืืืืืฉืืืึทืืืื ืึท ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื

ืึทืจืืืงืืขื ืืื ืืขื ืกืขืจืืข
- (ืื ืืจืืืงื)
- ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื ื ืืฆื Jenkins-X Istio Flagger
ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื
ืืืจ ืืึธืคื ืืืจ ืืืืขื ืขื , ืืื ืืืจ ืืขืงืืฆืขืจ ืืขืจืงืืขืจื ืืืึธืก ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ืฅ ืืขื ืขื ืืื ืืขืืืืื ืืื ืฆื ืื ืกืืจืืืขื ื ืืื ืืื ื ืึธืจืืึทื Kubernetes ืจืขืกืืจืกื.
ืืกืืืึธ
ืืื ืืืจ ืืืขืจื ืขืืขื ืึทื ืืืจื ืืืืขื ืขื ืืขื ืึทืจืืืงื ืืืจ ืฉืืื ืืืืกื ืืืึธืก Istio ืืื. ืืืื ื ืืฉื, ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืืขืื ืืื .
ืึทืคึผืคึผืืืงืึทืืืึธื ืคึฟืึทืจ ืืขืกืฅ

ืืขืืขืจ ืคึผืึธื ืึผืืื ืฆืืืื ืงืึทื ืืืื ืขืจื: ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืกืืืึธ-ืคึผืจืึธืงืกื.
ืืืจ ืืืขืื ื ืืฆื ืึท ืคึผืฉืื ืคึผืจืึธืืข ืึทืคึผืืึทืงืืืฉืึทื ืืื ืคืจืึธื ืืขื ื-nginx ืืื ืืึทืงืขื ื ืคึผืืืืึธื ืคึผืึธืืก. ืื nginx ืคึผืึธื ืืืขื ืคืฉืื ืจืืืขืจืขืงื ืืขืืขืจ ืืงืฉื ืฆื ืื ืืึทืงืขื ื ืคึผืึธื ืืื ืึทืจืืขื ืืื ืึท ืคึผืจืึทืงืกื. ืืขืืึทืืืก ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืื ืื ืคืืืืขื ืืข ืืึทืืึทืื:
ืืืืคื ืื ืคึผืจืึธืืข ืึทืคึผืืึทืงืืืฉืึทื ืืื
ืืืื ืืืจ ืืืืื ืฆื ื ืึธืืคืึธืืื ืืืื ืืืืฉืคึผืื ืืื ื ืืฆื ืืขื ืคึผืจืึธืืข ืึทืคึผืืึทืงืืืฉืึทื ืืื, ืืขื .
ืขืจืฉื ืืืคึผืืืืืึทื ื
ืืืขื ืืืจ ืงืึทืืขืจ ืืขืจ ืขืจืฉืืขืจ ืืืคึผืืืืืึทื ื, ืืืจ ืืขื ืึทื ืื ืคึผืึธืืก ืคืื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืึธืื ืืืืื 2 ืงืึทื ืืืื ืขืจื, ืืึธืก ืืื, ืื Istio ืกืืืืงืึทืจ ืืื ืคึผืื ืงื ืืืคึผืืึทืืขื ืึทื:

ืืื ืืืจ ืืืื ืืขื 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 ืฆื ืืื ืืืขืจ ืืึธืกืฅ ืืขืงืข.
ืืขื ืืขืฉ ืืืจื Kiali
ืืืจ ืืึธืื ืืื ืกืืึทืืืจื ืื ืคึผืจืึธืืข ืึทืคึผืืึทืงืืืฉืึทื ืืื Istio ืฆืืืืืขื ืืื ืืจืืืกืื ื, ืืจืึทืคืึทื ืึท, ืคึผืจืึธืืขืืืขืืก ืืื ืงืืึทืื (ืืขื ืืืืืืขืจ ืคึฟืึทืจ ืืขืืึทืืืก). ). ืืขืจืืืขืจ ืืืจ ืงืขื ืขื ื ืืฆื Kiali ืืืจื:
istioctl dashboard kiali # admin:admin

Kiali ืืืืืฉืืืึทืืืืืื ืงืจืึทื ื ืคืึทืจืงืขืจ ืืืจื ืืขืฉ
ืืื ืืืจ ืงืขื ืขื ืืขื, 100% ืคืื ืื ืคืึทืจืงืขืจ ืืืื ืฆื ืื ืคืจืึธื ืืขื ื ืกืขืจืืืืก, ืืขืจื ืึธื ืฆื ืื ืคืจืึธื ืืขื ื ืคึผืึธืืก ืืื ืคืืจืืข ืื1, ืืืืึทื ืืืจ ื ืืฆื ืึท ืคึผืฉืื nginx ืคึผืจืึทืงืกื ืืืึธืก ืจืืืขืจืขืงืฅ ืจืืงืืืขืก ืฆื ืื ืืึทืงืขื ื ืกืขืจืืืืก, ืืืึธืก ืจืืืขืจืขืงืฅ ืืื ืฆื ืื ืืึทืงืขื ื ืคึผืึธืืก. ืืื ืคืืจืืข v1.
Kiali ืึทืจืืขื ืืจืืืก ืืื Istio ืืื ืืื ืึท ืืึธืงืกืขื ืืขืฉ ืจืขื ืืขืจืื ื ืืืืืื ื. ื ืึธืจ ืืจืืืก.
ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื
ืืื ืืืขืจ ืืึทืงืขื ื ืืื ืฉืืื ืฆืืืื ืง8ืก ืืืคึผืืืืืึทื ืฅ, ืืืื ืขืจ ืคึฟืึทืจ ืื 1 ืืื ืืืื ืขืจ ืคึฟืึทืจ ืื 2. ืืืฆื ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืืึธืื Istio ืฆื ืคืึธืจืืืก ืึท ืืืืขืจ ืคึผืจืึธืฆืขื ื ืคืื ืจืืงืืืขืก ืฆื ืื2.
ืฉืจืื 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%
ืืืฆื ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื ืงืขื ืขื ืืืื ืืขืืืืื ืืึทื ืฅ ืืื ืึทืืข ืคืึทืจืงืขืจ ืืื ืจืืืขืจืขืงืืื ืฆื ืื2:

ืืึทื ืืืึทืื ืคึผืจืืืืจื ืงืึทื ืึทืจื
ืืื ืก ืืึธืื ืืืจ ืืืฆื ืฉืืงื 2% ืคืื ืึทืืข ืจืืงืืืขืก ืฆื ืื ืื10 ืืึทืงืขื ื. ืืืึธืก ืืืื ืืืจ ืืืืื ืฆื ืืึทื ืืืึทืื ืคึผืจืืืืจื ืื 2 ืฆื ืืึทืื ืืืืขืจ ืึทื ืึทืืฅ ืึทืจืืขื ืืื ืืืจ ืืขืจืืืึทืจืื?
ืืืจ ืงืขื ืขื ืืืืื ืึท ืกืคึผืขืฆืืขื ืจืืืื ืืขืจืฉื ืืืืืจื ืืืืฃ ืืืืคึผ ืืขืืขืจื:
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ืืืฆื ื ืืฆื ืงืขืจื ืืืจ ืงืขื ืขื ืฆืืืื ืืขื ืึท v2 ืืขืื ืืืจื ืฉืืงื ืื ืืขืืขืจ:
![]()
ืจืืงืืืขืก ืึธื ืึท ืืขืืขืจ ืืืขื ื ืึธื ืืืื ืืขืืจืืื ืืืจื ืื 1/10 ืคืึทืจืืขืืืขื ืืฉ:

ืงืึทื ืึทืจื ืคึฟืึทืจ ืฆืืืื ืึธืคืขื ืืืง ืืืขืจืกืืขืก
ืืืฆื ืืืจ ืืืขืื ืืึทืืจืึทืืื ืื ืึธืคึผืฆืืข ืืื ืืืจ ืืึธืื ืืืขืจืกืืข ืื 2 ืคึฟืึทืจ ืืืืืข ืคืจืึธื ืืขื ื ืืื ืืึทืงืขื ื. ืคึฟืึทืจ ืืืืืข, ืืืจ ืกืคึผืขืฆืืคืืฆืืจื ืึทื 10% ืคืื ืื ืคืึทืจืงืขืจ ืืึธื ืืืื ืฆื ืื2:

ืืืจ ืืขื ืึทื ืคืจืึธื ืืขื ื ืื 1 ืืื ืื 2 ืืืืืข ืคืึธืจืืืก ืคืึทืจืงืขืจ ืืื ืึท ืคืึทืจืืขืืืขื ืืฉ ืคืื 1/10 ืฆื ืืึทืงืขื ื ืื 1 ืืื ืื 2.
ืืืึธืก ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืคืึธืจืืืก ืคืึทืจืงืขืจ ืคึฟืื ืคืจืึธื ืืขื ื-v2 ืืืืื ืฆื ืืึทืงืขื ื-ืื2 ืืืืึทื ืขืก ืืื ื ืืฉื ืงืึทืืคึผืึทืืึทืืึทื ืืื ืื1? ืฆื ืืึธื ืืึธืก, ืืืจ ืฉืืขืื ืึท 1/10 ืคืึทืจืืขืืืขื ืืฉ ืคึฟืึทืจ ืื ืคืจืึธื ืืขื ื, ืืืึธืก ืงืึธื ืืจืึธืืก ืืืึธืก ืคืึทืจืงืขืจ ืงืืื ืฆื ืื ืืึทืงืขื ื-ืื 2 ืืื ืคืึทืจืืึทื ืืืื ื 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ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืืึทืงืืืขื ืืืึธืก ืืืจ ืืึทืจืคึฟื:

ืืืคืขืจืึทื ืกืื ืคืื ืื ืืึทื ืืึทื ืงืึทื ืึทืจื ืฆืืืึทื ื
ะ ืืขืจ ืขืจืฉืืขืจ ืืืื ืืืจ ืืึธืื ืืืจืืืขืงืึธืื ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื ืืึทื ืืืึทืื, ืืืื ื ืืฆื ืฆืืืื ืง8ืก ืืืคึผืืืืืึทื ืฅ. ืืึธืจื ืืืจ ืงืึทื ืืจืึธืืื ืื ืคืึทืจืืขืืืขื ืืฉ ืคืื ืจืืงืืืขืก ืืืจื ืืฉืึทื ืืื ื ืื ื ืืืขืจ ืคืื ืจืขืคึผืืึทืงืึทื. ืืขื ืฆืืืึทื ื ืึทืจืืขื, ืึธืืขืจ ืืื ืขืจื ืกื ืืืกืึทืืืืึทื ืืืืืฉืื.
Istio ืืืื ืขืก ืืขืืืขื ืฆื ืืึทืฉืืืืขื ืื ืคืึทืจืืขืืืขื ืืฉ ืคืื ืจืืงืืืขืก ืจืึทืืึทืจืืืึทืก ืคืื ืื ื ืืืขืจ ืคืื ืจืขืคึผืืึทืงืึทื. ืืขื ืืืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึทื ืืืจ ืงืขื ืขื ื ืืฆื HPAs (ืืึธืจืืืึธื ืืึทื ืคึผืึธื ืึทืืืึธืกืงืึทืืขืจ) ืืื ืืึธื ื ืื ืืึทืจืคึฟื ืฆื ืืืื ืงืึทื ืคืืืืขืจื ืืืื ืื ืงืจืึทื ื ืฉืืึทื ืคืื ืื ืงืึทื ืึทืจื ืืืคึผืืืืืึทื ื.
ืืึทื ืฅ
Istio ืึทืจืืขื ืืจืืืก ืืื ื ืืฆื ืขืก ืฆืืืึทืืขื ืืื Kiali ืืืื ืึท ืืืืขืจ ืฉืืึทืจืง ืงืึธืืืื ืึทืฆืืข. ืืืืึทืืขืจ ืืืืฃ ืืืื ืจืฉืืื ืคืื ืืื ืืขืจืขืกื ืืื ืงืึทืืืืื ืื ื Spinnaker ืืื Istio ืคึฟืึทืจ ืึธืืึทืืืืฉืึทื ืืื ืงืึทื ืึทืจื ืึทื ืึทืืืืืงืก.
ืืงืืจ: www.habr.com
