ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช Istio ื‘ืืžืฆืขื•ืช Kubernetes ื‘ื™ื™ืฆื•ืจ. ื—ืœืง 1

ืžื”ื• Istio? ื–ื•ื”ื™ ืžื” ืฉื ืงืจื Service mesh, ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ืžื•ืกื™ืคื” ืฉื›ื‘ืช ื”ืคืฉื˜ื” ืขืœ ื’ื‘ื™ ื”ืจืฉืช. ืื ื• ืžื™ื™ืจื˜ื™ื ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื‘ืืฉื›ื•ืœ ืื• ื—ืœืง ืžืžื ื” ื•ืžื‘ืฆืขื™ื ืื™ืชื• ืกื˜ ืžืกื•ื™ื ืฉืœ ืคืขื•ืœื•ืช. ืื™ื–ื” ืžื”ื? ืœื“ื•ื’ืžื”, ืื ื• ืžื‘ืฆืขื™ื ื ื™ืชื•ื‘ ื—ื›ื, ืื• ืฉืื ื• ืžื™ื™ืฉืžื™ื ืืช ื’ื™ืฉืช ืžืคืกืง ื”ื—ืฉืžืœ, ืื ื• ื™ื›ื•ืœื™ื ืœืืจื’ืŸ "ืคืจื™ืกื” ืงื ืจื™ืช", ืœื”ืขื‘ื™ืจ ื—ืœืงื™ืช ืืช ื”ืชืขื‘ื•ืจื” ืœื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืฉื™ืจื•ืช, ืื• ืฉื ื•ื›ืœ ืœื”ื’ื‘ื™ืœ ืื™ื ื˜ืจืืงืฆื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช ื•ืœืฉืœื•ื˜ ื‘ื›ืœ ื”ื ืกื™ืขื•ืช ืžื”ืืฉื›ื•ืœ ืœ- ืจืฉืช ื—ื™ืฆื•ื ื™ืช. ืืคืฉืจ ืœื”ื’ื“ื™ืจ ื›ืœืœื™ ืžื“ื™ื ื™ื•ืช ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื ืกื™ืขื•ืช ื‘ื™ืŸ ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืฉื•ื ื™ื. ืœื‘ืกื•ืฃ, ื ื•ื›ืœ ืœืงื‘ืœ ืืช ื›ืœ ืžืคืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ื”ืจืฉืช ื•ืœื”ืคื•ืš ืืช ื”ืื•ืกืฃ ื”ืžืื•ื—ื“ ืฉืœ ืžื“ื“ื™ื ืœืฉืงื•ืฃ ืœื—ืœื•ื˜ื™ืŸ ืœื™ื™ืฉื•ืžื™ื.

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

ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช Istio ื‘ืืžืฆืขื•ืช Kubernetes ื‘ื™ื™ืฆื•ืจ. ื—ืœืง 1

ืขื™ืงืจื•ืŸ ื”ืคืขื•ืœื”

Istio ืžื•ืจื›ื‘ ืžืฉื ื™ ืื–ื•ืจื™ื ืขื™ืงืจื™ื™ื - ืžื™ืฉื•ืจ ื”ื‘ืงืจื” ื•ืžื™ืฉื•ืจ ื”ื ืชื•ื ื™ื. ืžื™ืฉื•ืจ ื”ื‘ืงืจื” ืžื›ื™ืœ ืืช ื”ืžืจื›ื™ื‘ื™ื ื”ืขื™ืงืจื™ื™ื ื”ืžื‘ื˜ื™ื—ื™ื ืืช ื”ืคืขื•ืœื” ื”ื ื›ื•ื ื” ืฉืœ ื”ืฉืืจ. ื‘ื’ืจืกื” ื”ื ื•ื›ื—ื™ืช (1.0) ืœืžื˜ื•ืก ื”ื‘ืงืจื” ืฉืœื•ืฉื” ืžืจื›ื™ื‘ื™ื ืขื™ืงืจื™ื™ื: ื˜ื™ื™ืก, ืžื™ืงืกืจ, ืžืฆื•ื“ื”. ืœื ื ืฉืงื•ืœ ืืช Citadel, ื™ืฉ ืฆื•ืจืš ืœื”ืคื™ืง ืื™ืฉื•ืจื™ื ื›ื“ื™ ืœื”ื‘ื˜ื™ื— TLS ื”ื“ื“ื™ ื‘ื™ืŸ ืฉื™ืจื•ืชื™ื. ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื”ืžื›ืฉื™ืจ ื•ื”ืžื˜ืจื” ืฉืœ ืคื™ื™ืœื•ื˜ ื•ืžื™ืงืกืจ.

ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช Istio ื‘ืืžืฆืขื•ืช Kubernetes ื‘ื™ื™ืฆื•ืจ. ื—ืœืง 1

Pilot ื”ื•ื ืจื›ื™ื‘ ื”ื‘ืงืจื” ื”ืขื™ืงืจื™ ืฉืžืคื™ืฅ ืืช ื›ืœ ื”ืžื™ื“ืข ืขืœ ืžื” ืฉื™ืฉ ืœื ื• ื‘ืืฉื›ื•ืœ - ืฉื™ืจื•ืชื™ื, ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœื”ื ื•ื›ืœืœื™ ื”ื ื™ืชื•ื‘ (ืœื“ื•ื’ืžื”, ื›ืœืœื™ื ืœืคืจื™ืกื” ืงื ืจื™ืช ืื• ื—ื•ืงื™ ืžืคืกืง ื–ืจื).

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

ืžื™ืฉื•ืจ ื”ื ืชื•ื ื™ื ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช ืžื™ื›ืœื™ ืคืจื•ืงืกื™ ืฆื“ื“ื™ื™ื. ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืขื•ืฆืžื” ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืคืจื•ืงืกื™ ืฉืœื™ื—. ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ืื•ืชื• ื‘ื™ื™ืฉื•ื ืื—ืจ, ื›ื’ื•ืŸ nginx (nginmesh).

ืขืœ ืžื ืช ืฉืื™ืกื˜ื™ื• ืชืขื‘ื•ื“ ื‘ืฉืงื™ืคื•ืช ืžื•ื—ืœื˜ืช ืœื™ื™ืฉื•ืžื™ื, ืงื™ื™ืžืช ืžืขืจื›ืช ื”ื–ืจืงื” ืื•ื˜ื•ืžื˜ื™ืช. ื”ืžื™ืžื•ืฉ ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ ืžืชืื™ื ืœื’ืจืกืื•ืช Kubernetes 1.9+ (ืžื•ื˜ืฆื™ื•ื ื™ admission webhook). ืขื‘ื•ืจ Kubernetes ื’ืจืกืื•ืช 1.7, 1.8 ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘-Initializer.

ืžื™ื›ืœื™ Sidecar ืžื—ื•ื‘ืจื™ื ืœ-Pilot ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ GRPC, ื”ืžืืคืฉืจ ืœืš ืœื™ื™ืขืœ ืืช ืžื•ื“ืœ ื”ื“ื—ื™ืคื” ืœืฉื™ื ื•ื™ื™ื ื”ืžืชืจื—ืฉื™ื ื‘ืืฉื›ื•ืœ. GRPC ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื‘-Envoy ืžืื– ื’ืจืกื” 1.6, ื‘-Istio ื”ื•ื ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ืžืื– ื’ืจืกื” 0.8 ื•ื”ื•ื ืคื™ื™ืœื•ื˜-ืกื•ื›ืŸ - ืขื•ื˜ืฃ ื’ื•ืœืื ื’ ืžืขืœ ืฉืœื™ื— ืฉืžื’ื“ื™ืจ ืืคืฉืจื•ื™ื•ืช ื”ืฉืงื”.

ืคื™ื™ืœื•ื˜ ื•ืžื™ืงืกืจ ื”ื ืจื›ื™ื‘ื™ื ื—ืกืจื™ ืžืฆื‘ ืœื—ืœื•ื˜ื™ืŸ, ื›ืœ ื”ืžืฆื‘ ื ืฉืžืจ ื‘ื–ื™ื›ืจื•ืŸ. ื”ืชืฆื•ืจื” ืขื‘ื•ืจื ืžื•ื’ื“ืจืช ื‘ืฆื•ืจื” ืฉืœ ืžืฉืื‘ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืฉืœ Kubernetes, ื”ืžืื•ื—ืกื ื™ื ื‘-etcd.
Istio-agent ืžืงื‘ืœ ืืช ื›ืชื•ื‘ืชื• ืฉืœ ื”ื˜ื™ื™ืก ื•ืคื•ืชื— ืืœื™ื• ื–ืจื GRPC.

ื›ืคื™ ืฉืืžืจืชื™, Istio ืžื™ื™ืฉืžืช ืืช ื›ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืงื•ืคื” ืœื—ืœื•ื˜ื™ืŸ ืœื™ื™ืฉื•ืžื™ื. ื‘ื•ื ื ืจืื” ืื™ืš. ื”ืืœื’ื•ืจื™ืชื ื”ื•ื ื›ื–ื”:

  1. ืคืจื™ืกืช ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืฉื™ืจื•ืช.
  2. ื‘ื”ืชืื ืœื’ื™ืฉืช ื”ื–ืจืงืช ืžื™ื›ืœ ื”ืฆื“, ืžื™ื›ืœ istio-init ื•ืžื™ื›ืœ istio-agent (ืฉืœื™ื—) ืžืชื•ื•ืกืคื™ื ื‘ืฉืœื‘ ื”ื—ืœืช ื”ืชืฆื•ืจื”, ืื• ืฉื ื™ืชืŸ ื›ื‘ืจ ืœื”ื›ื ื™ืก ืื•ืชื ื™ื“ื ื™ืช ืœืชื™ืื•ืจ ืฉืœ ื”ื™ืฉื•ืช Kubernetes Pod.
  3. ืžื™ื›ืœ istio-init ื”ื•ื ืกืงืจื™ืคื˜ ืฉืžื—ื™ืœ ืืช ื›ืœืœื™ iptables ืขืœ ื”ืคื•ื“. ื™ืฉื ืŸ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืœื”ื’ื“ืจืช ืชืขื‘ื•ืจื” ืฉืชื”ื™ื” ืขื˜ื•ืคื” ื‘ืžื™ื›ืœ istio-agent: ื”ืฉืชืžืฉ ื‘ื›ืœืœื™ ื”ืคื ื™ื™ื” ืžื—ื“ืฉ ืฉืœ iptables, ืื• TPROXY. ื‘ื–ืžืŸ ื”ื›ืชื™ื‘ื”, ื’ื™ืฉืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืขื ื›ืœืœื™ ื”ืคื ื™ื” ืžื—ื“ืฉ. ื‘-istio-init, ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืื™ื–ื• ืชืขื‘ื•ืจื” ื™ืฉ ืœื™ื™ืจื˜ ื•ืœืฉืœื•ื— ืœ- istio-agent. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœื™ื™ืจื˜ ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื”ื ื›ื ืกืช ื•ืืช ื›ืœ ื”ืชื ื•ืขื” ื”ื™ื•ืฆืืช, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”ืคืจืžื˜ืจื™ื -i ะธ -b ืœืชื•ืš ืžืฉืžืขื•ืช *. ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื™ืฆื™ืื•ืช ืกืคืฆื™ืคื™ื•ืช ืœื™ื™ืจื˜. ื›ื“ื™ ืœื ืœื™ื™ืจื˜ ืชืช-ืจืฉืช ืกืคืฆื™ืคื™ืช, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืื•ืชื” ื‘ืืžืฆืขื•ืช ื”ื“ื’ืœ -x.
  4. ืœืื—ืจ ื‘ื™ืฆื•ืข ืžื™ื›ืœื™ ื”-init, ืžื•ืคืขืœื™ื ื”ืขื™ืงืจื™ื™ื ืฉื‘ื”ื, ื›ื•ืœืœ ื”ื˜ื™ื™ืก-ืกื•ื›ืŸ (ื”ืฉืœื™ื—). ื”ื•ื ืžืชื—ื‘ืจ ืœื˜ื™ื™ืก ืฉื›ื‘ืจ ื ืคืจืก ื‘ืืžืฆืขื•ืช GRPC ื•ืžืงื‘ืœ ืžื™ื“ืข ืขืœ ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื•ืžื“ื™ื ื™ื•ืช ื”ื ื™ืชื•ื‘ ื”ืงื™ื™ืžื™ื ื‘ืืฉื›ื•ืœ. ืœืคื™ ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื•, ื”ื•ื ืžื’ื“ื™ืจ ืืช ื”ืืฉื›ื•ืœื•ืช ื•ืžืงืฆื” ืื•ืชื ื™ืฉื™ืจื•ืช ืœื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื•ืช ืฉืœื ื• ื‘ืืฉื›ื•ืœ Kubernetes. ื›ืžื• ื›ืŸ, ื™ืฉ ืœืฉื™ื ืœื‘ ืœื ืงื•ื“ื” ื—ืฉื•ื‘ื”: ืฉืœื™ื— ืžื’ื“ื™ืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืืช ื”ืžืื–ื™ื ื™ื (IP, ื–ื•ื’ื•ืช ื™ืฆื™ืื•ืช) ืฉื”ื•ื ืžืชื—ื™ืœ ืœื”ืื–ื™ืŸ ืœื”ื. ืœื›ืŸ, ื›ืืฉืจ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช ืœืชืจืžื™ืœ, ืžื ื•ืชื‘ื•ืช ืžื—ื“ืฉ ื‘ืืžืฆืขื•ืช ื›ืœืœื™ iptables ืœื”ืคื ื™ื” ืžื—ื“ืฉ ื‘-sidecar, ื”-envoy ื›ื‘ืจ ื™ื›ื•ืœ ืœืขื‘ื“ ืืช ื”ื—ื™ื‘ื•ืจื™ื ื”ืœืœื• ื‘ื”ืฆืœื—ื” ื•ืœื”ื‘ื™ืŸ ื”ื™ื›ืŸ ืœื”ืžืฉื™ืš ืœื”ืขื‘ื™ืจ ืืช ื”ืชืขื‘ื•ืจื”. ื’ื ื‘ืฉืœื‘ ื–ื” ื ืฉืœื— ืžื™ื“ืข ืœืžื™ืงืกืจ, ืขืœื™ื• ื ื‘ื—ืŸ ื‘ื”ืžืฉืš, ื•ื ืฉืœื—ื™ื ื˜ื•ื•ื—ื™ ืžืขืงื‘.

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืจืฉืช ืฉืœืžื” ืฉืœ ืฉืจืชื™ ืคืจื•ืงืกื™ ืฉืœ ืฉืœื™ื—ื™ื ืฉืื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืžื ืงื•ื“ื” ืื—ืช (Pilot). ื›ืœ ื”ื‘ืงืฉื•ืช ื”ื ื›ื ืกื•ืช ื•ื”ื™ื•ืฆืื•ืช ืขื•ื‘ืจื•ืช ื“ืจืš ื”ืฉืœื™ื—. ื™ืชืจื” ืžื›ืš, ืจืง ืชืขื‘ื•ืจืช TCP ืžื™ื™ืจื˜ืช. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉ-IP ืฉื™ืจื•ืช Kubernetes ื ืคืชืจ ื‘ืืžืฆืขื•ืช kube-dns ืขืœ UDP ืžื‘ืœื™ ืœืฉื ื•ืช. ืœืื—ืจ ืžื›ืŸ, ืœืื—ืจ ื”ื”ื—ืœื˜ื”, ื”ื‘ืงืฉื” ื”ื™ื•ืฆืืช ืžื™ื™ืจื˜ืช ื•ืžืขื•ื‘ื“ืช ืขืœ ื™ื“ื™ ื”ืฉืœื™ื—, ืฉื›ื‘ืจ ืžื—ืœื™ื˜ ืœืื™ื–ื• ื ืงื•ื“ืช ืงืฆื” ื™ืฉ ืœืฉืœื•ื— ืืช ื”ื‘ืงืฉื” (ืื• ืœื ืœืฉืœื•ื—, ื‘ืžืงืจื” ืฉืœ ืžื“ื™ื ื™ื•ืช ื’ื™ืฉื” ืื• ืžืคืกืง ื”ื—ืฉืžืœ ืฉืœ ื”ืืœื’ื•ืจื™ืชื).

ื”ื‘ื ื• ืืช Pilot, ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื‘ื™ืŸ ืื™ืš ืžื™ืงืกืจ ืขื•ื‘ื“ ื•ืœืžื” ื”ื•ื ื ื—ื•ืฅ. ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืืช ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™ ืขื‘ื•ืจื• ื›ืืŸ.

ืžื™ืงืกืจ ื‘ืฆื•ืจืชื• ื”ื ื•ื›ื—ื™ืช ืžื•ืจื›ื‘ ืžืฉื ื™ ืจื›ื™ื‘ื™ื: istio-telemetry, istio-policy (ืœืคื ื™ ื’ืจืกื” 0.8 ื–ื” ื”ื™ื” ืจื›ื™ื‘ istio-mixer ืื—ื“). ืฉื ื™ื”ื ืžื™ืงืกืจื™ื ืฉื›ืœ ืื—ื“ ืžื”ื ืื—ืจืื™ ืขืœ ื”ืžืฉื™ืžื” ืฉืœื•. ื˜ืœืžื˜ืจื™ื™ืช Istio ืžืงื‘ืœืช ืžื™ื“ืข ืขืœ ืžื™ ื”ื•ืœืš ืœืืŸ ื•ืขื ืื™ืœื• ืคืจืžื˜ืจื™ื ืžืžื›ื•ืœื•ืช ื“ื™ื•ื•ื— ืฆื“ื“ื™ื•ืช ื“ืจืš GRPC. Istio-policy ืžืงื‘ืœ ื‘ืงืฉื•ืช ืฆ'ืง ื›ื“ื™ ืœื•ื•ื“ื ืฉื›ืœืœื™ ื”ืžื“ื™ื ื™ื•ืช ืžืชืงื™ื™ืžื™ื. ื‘ื“ื™ืงื•ืช ืžื“ื™ื ื™ื•ืช ืœื ืžื‘ื•ืฆืขื•ืช, ื›ืžื•ื‘ืŸ, ืขื‘ื•ืจ ื›ืœ ื‘ืงืฉื”, ืืœื ืžืื•ื—ืกื ื•ืช ื‘ืžื˜ืžื•ืŸ ืฉืœ ื”ืœืงื•ื— (ื‘ืžื›ื•ื ื™ืช ื”ืฆื“) ืœืžืฉืš ื–ืžืŸ ืžืกื•ื™ื. ื‘ื“ื™ืงื•ืช ื“ื™ื•ื•ื— ื ืฉืœื—ื•ืช ื›ื‘ืงืฉื•ืช ืืฆื•ื•ื”. ื‘ื•ืื• ื ืจืื” ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ื•ืื™ื–ื” ืคืจืžื˜ืจื™ื ื™ืฉ ืœืฉืœื•ื— ืžืขื˜ ืžืื•ื—ืจ ื™ื•ืชืจ.

ื”ืžื™ืงืกืจ ืืžื•ืจ ืœื”ื™ื•ืช ืจื›ื™ื‘ ื–ืžื™ืŸ ื‘ื™ื•ืชืจ ื”ืžื‘ื˜ื™ื— ืขื‘ื•ื“ื” ืœืœื ื”ืคืจืขื” ืขืœ ื”ืจื›ื‘ื” ื•ืขื™ื‘ื•ื“ ืฉืœ ื ืชื•ื ื™ ื˜ืœืžื˜ืจื™ื”. ื”ืžืขืจื›ืช ืžืชืงื‘ืœืช ื›ืชื•ืฆืื” ืžื›ืš ื›ืžืื’ืจ ืจื‘ ืจืžื•ืช. ื‘ืชื—ื™ืœื”, ื”ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื ื‘ืฆื“ ื”ืฆื“ ืฉืœ ื”ืžื›ื•ืœื•ืช, ืœืื—ืจ ืžื›ืŸ ื‘ืฆื“ ื”ืžื™ืงืกืจ, ื•ืœืื—ืจ ืžื›ืŸ ื ืฉืœื—ื™ื ืœืžื” ืฉื ืงืจื ืงืฆื” ื”ืžื™ืงืกืจ ื”ืื—ื•ืจื™. ื›ืชื•ืฆืื” ืžื›ืš, ืื ืื—ื“ ืžืžืจื›ื™ื‘ื™ ื”ืžืขืจื›ืช ื ื›ืฉืœ, ื”ืžืื’ืจ ื’ื“ืœ ื•ื ืฉื˜ืฃ ืœืื—ืจ ืฉื—ื–ื•ืจ ื”ืžืขืจื›ืช. ืžืขืจื‘ืœื™ื ืขื•ืจืคื™ื™ื ื”ื ื ืงื•ื“ื•ืช ืงืฆื” ืœืฉืœื™ื—ืช ื ืชื•ื ื™ ื˜ืœืžื˜ืจื™ื”: statsd, newrelic ื•ื›ื•'. ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ backend ืžืฉืœืš, ื–ื” ื“ื™ ืคืฉื•ื˜, ื•ื ืจืื” ืื™ืš ืœืขืฉื•ืช ืืช ื–ื”.

ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช Istio ื‘ืืžืฆืขื•ืช Kubernetes ื‘ื™ื™ืฆื•ืจ. ื—ืœืง 1

ืœืกื™ื›ื•ื, ื”ืกื›ื™ืžื” ืœืขื‘ื•ื“ื” ืขื istio-telemetry ื”ื™ื ื›ื“ืœืงืžืŸ.

  1. ืฉื™ืจื•ืช 1 ืฉื•ืœื— ื‘ืงืฉื” ืœืฉื™ืจื•ืช 2.
  2. ื‘ื™ืฆื™ืื” ืžืฉื™ืจื•ืช 1 ื”ื‘ืงืฉื” ืขื˜ื•ืคื” ื‘ืงืจื•ืŸ ืฆื“ ืžืฉืœื”.
  3. ืฉืœื™ื— Sidecar ืขื•ืงื‘ ืื—ืจ ืื•ืคืŸ ื”ืคื ื™ื™ื” ืฉืœ ื”ื‘ืงืฉื” ืœืฉื™ืจื•ืช 2 ื•ืžื›ื™ืŸ ืืช ื”ืžื™ื“ืข ื”ื“ืจื•ืฉ.
  4. ืœืื—ืจ ืžื›ืŸ ืฉื•ืœื— ืื•ืชื• ืœ- istio-telemetry ื‘ืืžืฆืขื•ืช ื‘ืงืฉืช ื“ื™ื•ื•ื—.
  5. Istio-telemetry ืงื•ื‘ืขืช ืื ื™ืฉ ืœืฉืœื•ื— ืืช ื”ื“ื•ื— ื”ื–ื” ืืœ ื”ืงืฆื” ื”ืื—ื•ืจื™, ืœืื™ืœื• ื•ืื™ื–ื” ื ืชื•ื ื™ื ื™ืฉ ืœืฉืœื•ื—.
  6. Istio-telemetry ืฉื•ืœื— ื ืชื•ื ื™ ื“ื•"ื— ืœ-backend ื‘ืžื™ื“ืช ื”ืฆื•ืจืš.

ื›ืขืช ื ืจืื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœืคืจื•ืก ืืช Istio ื‘ืžืขืจื›ืช, ื”ืžื•ืจื›ื‘ืช ืจืง ืžื”ืจื›ื™ื‘ื™ื ื”ืขื™ืงืจื™ื™ื (ืคื™ื™ืœื•ื˜ ื•-sidecar envoy).

ืจืืฉื™ืช, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืชืฆื•ืจื” ื”ืจืืฉื™ืช (ืจืฉืช) ืฉื”ืคื™ื™ืœื•ื˜ ืงื•ืจื:

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio
  namespace: istio-system
  labels:
    app: istio
    service: istio
data:
  mesh: |-

    # ะฟะพะบะฐ ั‡ั‚ะพ ะฝะต ะฒะบะปัŽั‡ะฐะตะผ ะพั‚ะฟั€ะฐะฒะบัƒ tracing ะธะฝั„ะพั€ะผะฐั†ะธะธ (pilot ะฝะฐัั‚ั€ะพะธั‚ envoyโ€™ะธ ั‚ะฐะบะธะผ ะพะฑั€ะฐะทะพะผ, ั‡ั‚ะพ ะพั‚ะฟั€ะฐะฒะบะฐ ะฝะต ะฑัƒะดะตั‚ ะฟั€ะพะธัั…ะพะดะธั‚ัŒ)
    enableTracing: false

    # ะฟะพะบะฐ ั‡ั‚ะพ ะฝะต ัƒะบะฐะทั‹ะฒะฐะตะผ mixer endpointโ€™ั‹, ั‡ั‚ะพะฑั‹ sidecar ะบะพะฝั‚ะตะนะฝะตั€ั‹ ะฝะต ะพั‚ะฟั€ะฐะฒะปัะปะธ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ั‚ัƒะดะฐ
    #mixerCheckServer: istio-policy.istio-system:15004
    #mixerReportServer: istio-telemetry.istio-system:15004

    # ัั‚ะฐะฒะธะผ ะฒั€ะตะผะตะฝะฝะพะน ะฟั€ะพะผะตะถัƒั‚ะพะบ, ั ะบะพั‚ะพั€ั‹ะผ ะฑัƒะดะตั‚ envoy ะฟะตั€ะตัะฟั€ะฐัˆะธะฒะฐั‚ัŒ Pilot (ัั‚ะพ ะดะปั ัั‚ะฐั€ะพะน ะฒะตั€ัะธะธ envoy proxy)
    rdsRefreshDelay: 5s

    # default ะบะพะฝั„ะธะณัƒั€ะฐั†ะธั ะดะปั envoy sidecar
    defaultConfig:
      # ะฐะฝะฐะปะพะณะธั‡ะฝะพ ะบะฐะบ rdsRefreshDelay
      discoveryRefreshDelay: 5s

      # ะพัั‚ะฐะฒะปัะตะผ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (ะฟัƒั‚ัŒ ะบ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ ะธ ะฑะธะฝะฐั€ัŽ envoy)
      configPath: "/etc/istio/proxy"
      binaryPath: "/usr/local/bin/envoy"

      # ะดะตั„ะพะปั‚ะฝะพะต ะธะผั ะทะฐะฟัƒั‰ะตะฝะฝะพะณะพ sidecar ะบะพะฝั‚ะตะนะฝะตั€ะฐ (ะธัะฟะพะปัŒะทัƒะตั‚ัั, ะฝะฐะฟั€ะธะผะตั€, ะฒ ะธะผะตะฝะฐั… ัะตั€ะฒะธัะฐ ะฟั€ะธ ะพั‚ะฟั€ะฐะฒะบะต tracing spanโ€™ะพะฒ)
      serviceCluster: istio-proxy

      # ะฒั€ะตะผั, ะบะพั‚ะพั€ะพะต ะฑัƒะดะตั‚ ะถะดะฐั‚ัŒ envoy ะดะพ ั‚ะพะณะพ, ะบะฐะบ ะพะฝ ะฟั€ะธะฝัƒะดะธั‚ะตะปัŒะฝะพ ะทะฐะฒะตั€ัˆะธั‚ ะฒัะต ัƒัั‚ะฐะฝะพะฒะปะตะฝะฝั‹ะต ัะพะตะดะธะฝะตะฝะธั
      drainDuration: 45s
      parentShutdownDuration: 1m0s

      # ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะธัะฟะพะปัŒะทัƒัŽั‚ัั REDIRECT ะฟั€ะฐะฒะธะปะฐ iptables. ะœะพะถะฝะพ ะธะทะผะตะฝะธั‚ัŒ ะฝะฐ TPROXY.
      #interceptionMode: REDIRECT

      # ะŸะพั€ั‚, ะฝะฐ ะบะพั‚ะพั€ะพะผ ะฑัƒะดะตั‚ ะทะฐะฟัƒั‰ะตะฝะฐ admin ะฟะฐะฝะตะปัŒ ะบะฐะถะดะพะณะพ sidecar ะบะพะฝั‚ะตะนะฝะตั€ะฐ (envoy)
      proxyAdminPort: 15000

      # ะฐะดั€ะตั, ะฟะพ ะบะพั‚ะพั€ะพะผัƒ ะฑัƒะดัƒั‚ ะพั‚ะฟั€ะฐะฒะปัั‚ัŒัั traceโ€™ั‹ ะฟะพ zipkin ะฟั€ะพั‚ะพะบะพะปัƒ (ะฒ ะฝะฐั‡ะฐะปะต ะผั‹ ะพั‚ะบะปัŽั‡ะธะปะธ ัะฐะผัƒ ะพั‚ะฟั€ะฐะฒะบัƒ, ะฟะพัั‚ะพะผัƒ ัั‚ะพ ะฟะพะปะต ัะตะนั‡ะฐั ะฝะต ะฑัƒะดะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒัั)
      zipkinAddress: tracing-collector.tracing:9411

      # statsd ะฐะดั€ะตั ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ ะผะตั‚ั€ะธะบ envoy ะบะพะฝั‚ะตะนะฝะตั€ะพะฒ (ะพั‚ะบะปัŽั‡ะฐะตะผ)
      # statsdUdpAddress: aggregator:8126

      # ะฒั‹ะบะปัŽั‡ะฐะตะผ ะฟะพะดะดะตั€ะถะบัƒ ะพะฟั†ะธะธ Mutual TLS
      controlPlaneAuthPolicy: NONE

      # ะฐะดั€ะตั, ะฝะฐ ะบะพั‚ะพั€ะพะผ ะฑัƒะดะตั‚ ัะปัƒัˆะฐั‚ัŒ istio-pilot ะดะปั ั‚ะพะณะพ, ั‡ั‚ะพะฑั‹ ัะพะพะฑั‰ะฐั‚ัŒ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ service discovery ะฒัะตะผ sidecar ะบะพะฝั‚ะตะนะฝะตั€ะฐะผ
      discoveryAddress: istio-pilot.istio-system:15007

ื›ืœ ืจื›ื™ื‘ื™ ื”ื‘ืงืจื” ื”ืขื™ืงืจื™ื™ื (ืžื™ืฉื•ืจ ื”ื‘ืงืจื”) ื™ืžื•ืงืžื• ื‘-namespace istio-system ื‘-Kubernetes.

ืœื›ืœ ื”ืคื—ื•ืช, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืจืง ืœืคืจื•ืก ืืช ื˜ื™ื™ืก. ื‘ืฉื‘ื™ืœ ื–ื” ืื ื—ื ื• ืžืฉืชืžืฉื™ื ืชืฆื•ืจื” ื›ื–ื•.

ื•ืื ื—ื ื• ื ื’ื“ื™ืจ ื‘ืื•ืคืŸ ื™ื“ื ื™ ืืช ื’ืœื’ืœ ื”ืฆื“ ื”ืžื–ืจื™ืง ืฉืœ ื”ืžื™ื›ืœ.

ืžื™ื›ืœ Init:

initContainers:
 - name: istio-init
   args:
   - -p
   - "15001"
   - -u
   - "1337"
   - -m
   - REDIRECT
   - -i
   - '*'
   - -b
   - '*'
   - -d
   - ""
   image: istio/proxy_init:1.0.0
   imagePullPolicy: IfNotPresent
   resources:
     limits:
       memory: 128Mi
   securityContext:
     capabilities:
       add:
       - NET_ADMIN

ื•ืงืจื•ื ื™ืช ืฆื“:

       name: istio-proxy
       args:
         - "bash"
         - "-c"
         - |
           exec /usr/local/bin/pilot-agent proxy sidecar 
           --configPath 
           /etc/istio/proxy 
           --binaryPath 
           /usr/local/bin/envoy 
           --serviceCluster 
           service-name 
           --drainDuration 
           45s 
           --parentShutdownDuration 
           1m0s 
           --discoveryAddress 
           istio-pilot.istio-system:15007 
           --discoveryRefreshDelay 
           1s 
           --connectTimeout 
           10s 
           --proxyAdminPort 
           "15000" 
           --controlPlaneAuthPolicy 
           NONE
         env:
         - name: POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: POD_NAMESPACE
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
         - name: INSTANCE_IP
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
         - name: ISTIO_META_POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: ISTIO_META_INTERCEPTION_MODE
           value: REDIRECT
         image: istio/proxyv2:1.0.0
         imagePullPolicy: IfNotPresent
         resources:
           requests:
             cpu: 100m
             memory: 128Mi
           limits:
             memory: 2048Mi
         securityContext:
           privileged: false
           readOnlyRootFilesystem: true
           runAsUser: 1337
         volumeMounts:
         - mountPath: /etc/istio/proxy
           name: istio-envoy

ื›ื“ื™ ืฉื”ื›ืœ ื™ืชื—ื™ืœ ื‘ื”ืฆืœื—ื”, ืขืœื™ืš ืœื™ืฆื•ืจ ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot, ืฉืืช ื”ืชื™ืื•ืจื™ื ืฉืœื• ื ื™ืชืŸ ืœืžืฆื•ื ื›ืืŸ.

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

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

ื›ืžื• ื›ืŸ, ืœ-Istio (ืขื“ื™ื™ืŸ ื ื™ืกื™ื•ื ื™) ื™ืฉ ืืช ื”ื™ื›ื•ืœืช ืœืจื•ืฅ ืžื—ื•ืฅ ืœืืฉื›ื•ืœ ื•ื™ื›ื•ืœืช ืœืฆืคื•ืช ื•ืœืคืฉืคืฉ ื‘ื’ื™ืœื•ื™ ืฉื™ืจื•ืช ื‘ื™ืŸ ืžืกืคืจ ืืฉื›ื•ืœื•ืช Kubernetes. ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ื–ื” ื›ืืŸ.

ืขื‘ื•ืจ ื”ืชืงื ื” ืžืจื•ื‘ื” ืืฉื›ื•ืœื•ืช, ืฉื™ื ืœื‘ ืœืžื’ื‘ืœื•ืช ื”ื‘ืื•ืช:

  1. Pod CIDR ื•-Service CIDR ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื™ื™ื—ื•ื“ื™ื™ื ื‘ื›ืœ ื”ืืฉื›ื•ืœื•ืช ื•ืืกื•ืจ ืœื”ื ืœื—ืคื•ืฃ.
  2. ื›ืœ ื”-CIDR Pods ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื ื’ื™ืฉื™ื ืžื›ืœ CIDR Pods ื‘ื™ืŸ ืืฉื›ื•ืœื•ืช.
  3. ื›ืœ ืฉืจืชื™ ื”-API ืฉืœ Kubernetes ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื ื’ื™ืฉื™ื ื–ื” ืœื–ื”.

ื–ื”ื• ื”ืžื™ื“ืข ื”ืจืืฉื•ื ื™ ืฉื™ืขื–ื•ืจ ืœืš ืœื”ืชื—ื™ืœ ืขื Istio. ืขื ื–ืืช, ืขื“ื™ื™ืŸ ื™ืฉ ื”ืจื‘ื” ืžืœื›ื•ื“ื•ืช. ืœื“ื•ื’ืžื, ืชื›ื•ื ื•ืช ืฉืœ ื ื™ืชื•ื‘ ืชืขื‘ื•ืจื” ื—ื™ืฆื•ื ื™ืช (ืžื—ื•ืฅ ืœืืฉื›ื•ืœ), ื’ื™ืฉื•ืช ืœืื™ืชื•ืจ ื‘ืื’ื™ื ืฆื“ื“ื™ื•ืช, ื™ืฆื™ืจืช ืคืจื•ืคื™ืœื™ื, ื”ื’ื“ืจืช ืžื™ืงืกืจ ื•ื›ืชื™ื‘ืช backend ืฉืœ ืžื™ืงืกืจ ืžื•ืชืื ืื™ืฉื™ืช, ื”ื’ื“ืจืช ืžื ื’ื ื•ืŸ ืžืขืงื‘ ื•ืชืคืขื•ืœ ืฉืœื• ื‘ืืžืฆืขื•ืช ืฉืœื™ื—ืช.
ื›ืœ ื–ื” ื ืฉืงื•ืœ ื‘ืคืจืกื•ืžื™ื ื”ื‘ืื™ื. ืฉืืœ ืืช ืฉืืœื•ืชื™ืš, ืื ื™ ืื ืกื” ืœื›ืกื•ืช ืื•ืชืŸ.

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

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