ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ื”ืขืจื”. ืชืจื’ื•ื: ืจืฉืชื•ืช ืฉื™ืจื•ืช ื‘ื”ื—ืœื˜ ื”ืคื›ื• ืœื ื•ืฉื ื—ื ื‘ืชืฉืชื™ืช ืฉืœ ื™ืžื™ื ื• ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ื ื‘ืขืงื‘ื•ืช ืืจื›ื™ื˜ืงื˜ื•ืจืช ืžื™ืงืจื•-ืฉื™ืจื•ืช. ื‘ืขื•ื“ ืฉ-Istio ืขืฉื•ื™ ืœื”ื™ื•ืช ืขืœ ื”ืจื“ืืจ ืฉืœ ืžื”ื ื“ืกื™ DevOps ืจื‘ื™ื, ืžื“ื•ื‘ืจ ื‘ืžื•ืฆืจ ื—ื“ืฉ ืœืžื“ื™, ืฉืืžื ื ืžื•ืจื›ื‘ ืžื‘ื—ื™ื ืช ื”ืชื›ื•ื ื•ืช ืฉื”ื•ื ืžืกืคืง, ืืš ื™ื›ื•ืœ ืœืงื—ืช ื”ืจื‘ื” ื–ืžืŸ ืœื”ื›ื™ืจ. ื”ืžื”ื ื“ืกืช ื”ื’ืจืžื ื™ืช ืจื™ื ื•ืจ ืžืืœื•ืงื•, ืฉืื—ืจืื™ืช ืขืœ ืžื—ืฉื•ื‘ ืขื ืŸ ืœืœืงื•ื—ื•ืช ื’ื“ื•ืœื™ื ื‘ื—ื‘ืจืช ื”ืชืงืฉื•ืจืช Orange Networks, ื›ืชื‘ื” ืกื“ืจื” ื ืคืœืื” ืฉืœ ื—ื•ืžืจื™ื ื”ืžืืคืฉืจื™ื ืœืฆืœื•ืœ ื‘ืžื”ื™ืจื•ืช ื•ื‘ืขื•ืžืง ืœืื™ืกื˜ื™ื•. ื”ื•ื ืžืชื—ื™ืœ ืืช ื”ืกื™ืคื•ืจ ืฉืœื• ื‘ืžื” ืฉืื™ืกื˜ื™ื• ื™ื›ื•ืœ ืœืขืฉื•ืช ื•ืื™ืš ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื–ื” ื‘ืžื”ื™ืจื•ืช ื‘ืžื• ืขื™ื ื™ืš.

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

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

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

ืžื ื”ืœ ืคืจื•ื™ืงื˜: ื›ืžื” ื–ืžืŸ ืœื•ืงื— ืœื”ื•ืกื™ืฃ ืชื›ื•ื ืช ืžืฉื•ื‘?
ืžืคืชื—: ืฉื ื™ ืกืคืจื™ื ื˜ื™ื.

MP: ืžื”?... ื–ื” ืคืฉื•ื˜ CRUD!
R: ื‘ื™ืฆื•ืข CRUD ื”ื•ื ื”ื—ืœืง ื”ืงืœ ื‘ืžืฉื™ืžื”, ืื‘ืœ ืื ื—ื ื• ืขื“ื™ื™ืŸ ืฆืจื™ื›ื™ื ืœืืžืช ื•ืœืืฉืจ ืžืฉืชืžืฉื™ื ื•ืฉื™ืจื•ืชื™ื. ืžื›ื™ื•ื•ืŸ ืฉื”ืจืฉืช ืื™ื ื” ืืžื™ื ื”, ืชืฆื˜ืจืš ืœื™ื™ืฉื ื‘ืงืฉื•ืช ื—ื•ื–ืจื•ืช, ื›ืžื• ื’ื ื“ืคื•ืก ืžืคืกืง ื‘ืœืงื•ื—ื•ืช. ื›ืžื• ื›ืŸ, ื›ื“ื™ ืœื•ื•ื“ื ืฉื›ืœ ื”ืžืขืจื›ืช ืœื ืงืจืกื”, ืคืกืงื™ ื–ืžืŸ ื• ืžื—ื™ืฆื•ืช (ืจืื” ื‘ื”ืžืฉืš ื”ืžืืžืจ ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ืฉื ื™ ื”ื“ืคื•ืกื™ื ืฉื”ื•ื–ื›ืจื•.), ื•ืขืœ ืžื ืช ืœืืชืจ ื‘ืขื™ื•ืช, ื ื™ื˜ื•ืจ, ืžืขืงื‘, [โ€ฆ]

MP: ืื”, ืื– ื‘ื•ื ื ื›ื ื™ืก ืืช ื”ืชื›ื•ื ื” ื”ื–ื• ืœืฉื™ืจื•ืช ื”ืžื•ืฆืจ.

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

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ืฉื™ื ืœื‘: ื”ืžืืžืจ ืžื ื™ื— ืฉื™ืฉ ืœืš ื™ื“ืข ื‘ืขื‘ื•ื“ื” ืขื Kubernetes. ืื—ืจืช, ืื ื™ ืžืžืœื™ืฅ ืœืงืจื•ื ื”ื”ื™ื›ืจื•ืช ืฉืœื™ ืขื Kubernetes ื•ืจืง ืื– ืœื”ืžืฉื™ืš ืœืงืจื•ื ืืช ื”ื—ื•ืžืจ ื”ื–ื”.

ืจืขื™ื•ืŸ ืื™ืกื˜ื™ื•

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

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ืชืขื‘ื•ืจืช ืจืฉืช ื‘-Kubernetes

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

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

ืืœื• ื”ืŸ ืจืง ื›ืžื” ืžื”ืืคืฉืจื•ื™ื•ืช (ื‘ืืžืช ืจืง ื›ืžื”!) ืœืกืงืจืŸ ืื•ืชืš. ืขื›ืฉื™ื• ื‘ื•ืื• ื ืฆืœื•ืœ ืœืคืจื˜ื™ื ื”ื˜ื›ื ื™ื™ื!

ืืจื›ื™ื˜ืงื˜ื•ืจื”

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

ืžื˜ื•ืก ื ืชื•ื ื™ื

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

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ื›ื™ืฆื“ ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื ื•ืฉื‘ื™ืจืช ืžืขื’ืœื™ื ืžื™ื•ืฉืžื™ื ื‘-Envoy

ืกื™ื›ื•ื:

  1. ืฉืึทื’ึฐืจึดื™ืจ (ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืคืจื•ืงืกื™ ื”ืžืžื•ืงื ื‘ืžื™ื›ืœ ืฆื“ื“ื™, ืฉืžื•ืคืฅ ื› ืžื•ืฆืจ ื ืคืจื“ - ืžืฉื•ืขืจ. ืชืจื’ื•ื) ืฉื•ืœื— ื‘ืงืฉื” ืœืžื•ืคืข ื”ืจืืฉื•ืŸ ืฉืœ ืฉื™ืจื•ืช B ื•ื ื›ืฉืœ.
  2. Envoy Sidecar ืžื ืกื” ืฉื•ื‘ (ื ืกื” ืฉื•ื‘). (1)
  3. ื”ื‘ืงืฉื” ืฉื ื›ืฉืœื” ืžื•ื—ื–ืจืช ืœ-proxy ืฉืงืจื ืœื”.
  4. ื–ื” ืคื•ืชื— ืืช ืžืคืกืง ื”ืžืขื’ืœ ื•ืžืชืงืฉืจ ืœืฉื™ืจื•ืช ื”ื‘ื ืขื‘ื•ืจ ื‘ืงืฉื•ืช ืขื•ืงื‘ื•ืช. (2)

ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืื™ื ืš ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ืช ื”-Resession ื”ื‘ืื”, ืื™ื ืš ืฆืจื™ืš ืœื‘ืฆืข ื™ื™ืฉื•ื ืžืฉืœืš ืฉืœ ืฉื‘ื™ืจืช ืžืขื’ืœื™ื ื•ื’ื™ืœื•ื™ ืฉื™ืจื•ืช ื‘ืฉืคืช ื”ืชื›ื ื•ืช X, Y ืื• Z. ื›ืœ ื–ื” ื•ืขื•ื“ ื–ืžื™ืŸ ืžืชื•ืš ืงื•ืคืกื” ื‘ืื™ืกื˜ื™ื• ื•ืื™ื ื” ื“ื•ืจืฉืช ืœื ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“.

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

ื•ืœื‘ืกื•ืฃ ืืชื” ืฉื•ืืœ: "ื”ืื ื–ื” ื ื™ืชืŸ ืœื”ืชืืžื” ืื™ืฉื™ืช?"

ืขื›ืฉื™ื• ืืชื ืžื•ื›ื ื™ื ืœืžืกืข ื™ืžื™ โ€“ ื•ื‘ื•ืื• ืœื”ื›ื™ืจ ืืช Control Plane.

ืžื˜ื•ืก ื‘ืงืจื”

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

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

ืฉืœื™ื—ื™ื (ื›ืœื•ืžืจ ืžื™ืฉื•ืจ ื ืชื•ื ื™ื) ืžื•ื’ื“ืจื™ื ืขื Kubernetes CRD (ื”ื’ื“ืจื•ืช ืžืฉืื‘ื™ื ืžื•ืชืืžื•ืช ืื™ืฉื™ืช) ืฉื”ื•ื’ื“ืจื• ืขืœ ื™ื“ื™ Istio ื•ืชื•ื›ื ื ื• ื‘ืžื™ื•ื—ื“ ืœืžื˜ืจื” ื–ื•. ืžื” ืฉื–ื” ืื•ืžืจ ืœืš ื”ื•ื ืฉื”ื ืจืง ืขื•ื“ ืžืฉืื‘ ื‘-Kubernetes ืขื ืชื—ื‘ื™ืจ ืžื•ื›ืจ. ืœืื—ืจ ื”ื™ืฆื™ืจื”, ื”ืžืฉืื‘ ื”ื–ื” ื™ื™ืงืœื˜ ืขืœ ื™ื“ื™ ืžื˜ื•ืก ื”ื‘ืงืจื” ื•ื™ื—ื•ืœ ืขืœ ืฉืœื™ื—ื™ื.

ืงืฉืจ ืฉื™ืจื•ืชื™ื ืœืื™ืกื˜ื™ื•

ืชื™ืืจื ื• ืืช ื”ืงืฉืจ ืฉืœ Istio ืœืฉื™ืจื•ืชื™ื, ืื‘ืœ ืœื ืœื”ื™ืคืš: ืื™ืš ื”ืฉื™ืจื•ืชื™ื ืงืฉื•ืจื™ื ืœืื™ืกื˜ื™ื•?

ืœืžืขืŸ ื”ืืžืช, ืฉื™ืจื•ืชื™ื ื™ื•ื“ืขื™ื ืขืœ ื ื•ื›ื—ื•ืชื• ืฉืœ ืื™ืกื˜ื™ื• ื›ืžื• ื’ื ื“ื’ื™ื ื™ื•ื“ืขื™ื ืขืœ ืžื™ื, ื›ืฉื”ื ืฉื•ืืœื™ื ืืช ืขืฆืžื: "ืžื” ื–ื” ืžื™ื ื‘ื›ืœืœ?".

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ืึดื™ื•ึผืจ ื•ื™ืงื˜ื•ืจื™ื” ื“ื™ืžื™ื˜ืจืืงื•ืคื•ืœื•ืก: ืื™ืš ืืชื” ืื•ื”ื‘ ืืช ื”ืžื™ื? - ืžื” ื–ื” ื‘ื›ืœืœ ืžื™ื?

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

ื“ื™ ืœืชื™ืื•ืจื™ื” - ื‘ื•ืื• ื ื•ืฆื™ื ืืช ื”ื™ื“ืข ื”ื–ื” ืœืคื•ืขืœ!

ืื™ืกื˜ื™ื• ื‘ืคื•ืขืœ

Istio ื“ื•ืจืฉ ืืฉื›ื•ืœ Kubernetes ืขื ืœืคื—ื•ืช 4 vCPUs ื•-8 GB ืฉืœ ื–ื™ื›ืจื•ืŸ RAM ื–ืžื™ืŸ. ื›ื“ื™ ืœื”ืขืœื•ืช ืืช ื”ืืฉื›ื•ืœ ื‘ืžื”ื™ืจื•ืช ื•ืœืขืงื•ื‘ ืื—ืจ ื”ื”ื•ืจืื•ืช ืžื”ืžืืžืจ, ืื ื™ ืžืžืœื™ืฅ ืœื”ืฉืชืžืฉ ื‘-Google Cloud Platform, ื”ืžืฆื™ืขื” ืžืฉืชืžืฉื™ื ื—ื“ืฉื™ื ื—ื™ื ื $300.

ืœืื—ืจ ื™ืฆื™ืจืช ื”ืืฉื›ื•ืœ ื•ื”ื’ื“ืจืช ื’ื™ืฉื” ืœ-Kubernetes ื“ืจืš ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ืžืกื•ืฃ, ืชื•ื›ืœ ืœื”ืชืงื™ืŸ ืืช Istio ื“ืจืš ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช ืฉืœ Helm.

ื”ืชืงื ืช ื”ื’ื”

ื”ืชืงืŸ ืืช ืœืงื•ื— Helm ื‘ืžื—ืฉื‘ ืฉืœืš ื›ืžืชื•ืืจ ื‘ ืชื™ืขื•ื“ ืจืฉืžื™. ื ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœื™ืฆื•ืจ ืชื‘ื ื™ื•ืช ืœื”ืชืงื ืช Istio ื‘ืกืขื™ืฃ ื”ื‘ื.

ื”ืชืงื ืช Istio

ื”ื•ืจื“ ืžืฉืื‘ื™ Istio ืž ื”ืžื”ื“ื•ืจื” ื”ืื—ืจื•ื ื” (ื”ืงื™ืฉื•ืจ ืฉืœ ื”ืžื—ื‘ืจ ื”ืžืงื•ืจื™ ืœื’ืจืกื” 1.0.5 ืฉื•ื ื” ืœื’ืจืกื” ื”ื ื•ื›ื—ื™ืช, ื›ืœื•ืžืจ 1.0.6 - ื‘ืขืจืš ืชืจื’ื•ื), ื—ืœืฅ ืืช ื”ืชื•ื›ืŸ ืœืกืคืจื™ื™ื” ืื—ืช, ืฉืืœื™ื” ืืชื™ื™ื—ืก [istio-resources].

ืœื–ื™ื”ื•ื™ ืงืœ ืฉืœ ืžืฉืื‘ื™ Istio, ืฆื•ืจ ืžืจื—ื‘ ืฉืžื•ืช ื‘ืืฉื›ื•ืœ K8s istio-system:

$ kubectl create namespace istio-system

ื”ืฉืœื ืืช ื”ื”ืชืงื ื” ืขืœ ื™ื“ื™ ื ื™ื•ื•ื˜ ืœืกืคืจื™ื™ื” [istio-resources] ื•ื”ืคืขืœืช ื”ืคืงื•ื“ื”:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

ืคืงื•ื“ื” ื–ื• ืชื•ืฆื™ื ืืช ืจื›ื™ื‘ื™ ื”ืžืคืชื— ืฉืœ Istio ืœืงื•ื‘ืฅ istio.yaml. ืฉื™ื ื™ื ื• ืœืขืฆืžื ื• ืืช ื”ืชื‘ื ื™ืช ื”ืกื˜ื ื“ืจื˜ื™ืช ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ื”ืคืจืžื˜ืจื™ื ื”ื‘ืื™ื:

  • global.mtls.enabled ืžื•ืชืงืŸ ื‘ false (ื›ืœื•ืžืจ, ืื™ืžื•ืช mTLS ืžื•ืฉื‘ืช - ื‘ืขืจืš ืชืจื’ื•ื)ื›ื“ื™ ืœืคืฉื˜ ืืช ืชื”ืœื™ืš ื”ื”ื™ื›ืจื•ื™ื•ืช ืฉืœื ื•;
  • tracing.enabled ืžืืคืฉืจ ืžืขืงื‘ ืื—ืจ ื‘ืงืฉื•ืช ืขื Jaeger;
  • kiali.enabled ืžืชืงื™ื ื” ืืช Kiali ืœืชื•ืš ืืฉื›ื•ืœ ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืฉื™ืจื•ืชื™ื ื•ืชืขื‘ื•ืจื”;
  • grafana.enabled ืžืชืงื™ืŸ ืืช Grafana ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืืช ื”ืžื“ื“ื™ื ืฉื ืืกืคื•.

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

$ kubectl apply -f istio.yaml

ื”ืชืงื ืช Istio ื‘ืืฉื›ื•ืœ ื”ื•ืฉืœืžื”! ื”ืžืชืŸ ืขื“ ืฉื›ืœ ื”ืชืจืžื™ืœื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช istio-system ืชื•ื›ืœ Running ืื• Completedืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”ืคืงื•ื“ื” ืœืžื˜ื”:

$ kubectl get pods -n istio-system

ื›ืขืช ืื ื• ืžื•ื›ื ื™ื ืœื”ืžืฉื™ืš ืœืกืขื™ืฃ ื”ื‘ื, ื‘ื• ื ืขืœื” ื•ื ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื”.

ืืจื›ื™ื˜ืงื˜ื•ืจืช ื™ื™ืฉื•ืžื™ื ืฉืœ ื ื™ืชื•ื— ืกื ื˜ื™ืžื ื˜ื™ื

ื”ื‘ื” ื ืฉืชืžืฉ ื‘ื“ื•ื’ืžื” ืฉืœ ืืคืœื™ืงืฆื™ื™ืช ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช ืฉืœ Sentiment Analysis ื”ืžืฉืžืฉืช ื›ื‘ืจ ืฉื”ื•ื–ื›ืจื” ืžืืžืจ ืžื‘ื•ื ืœ-Kubernetes. ื–ื” ืžื•ืจื›ื‘ ืžืกืคื™ืง ื›ื“ื™ ืœื”ืจืื•ืช ืืช ื”ืืคืฉืจื•ื™ื•ืช ืฉืœ ืื™ืกื˜ื™ื• ื‘ืคื•ืขืœ.

ื”ืืคืœื™ืงืฆื™ื” ืžื•ืจื›ื‘ืช ืžืืจื‘ืขื” ืฉื™ืจื•ืชื™ ืžื™ืงืจื•:

  1. ืฉื™ืจื•ืช SA-Frontend, ื”ืžืฉืจืช ืืช ื”ืืคืœื™ืงืฆื™ื” ื”ืงื“ืžื™ืช ื‘-Reactjs;
  2. ืฉื™ืจื•ืช SA WebApp, ื”ืžืฉืจืช ืฉืื™ืœืชื•ืช ื ื™ืชื•ื— ืกื ื˜ื™ืžื ื˜;
  3. ืฉื™ืจื•ืช SA Logicืฉืžื‘ืฆืขืช ืืช ืขืฆืžื” ื ื™ืชื•ื— ื”ืกื ื˜ื™ืžื ื˜;
  4. ืฉื™ืจื•ืช ืžืฉื•ื‘ SA, ื”ืžืงื‘ืœ ืžืฉื•ื‘ ืžื”ืžืฉืชืžืฉื™ื ืขืœ ื“ื™ื•ืง ื”ื ื™ืชื•ื— ืฉื‘ื•ืฆืข.

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ื‘ืชืจืฉื™ื ื–ื”, ื‘ื ื•ืกืฃ ืœืฉื™ืจื•ืชื™ื, ืื ื• ืจื•ืื™ื ื’ื ืืช Ingress Controller, ืืฉืจ ื‘-Kubernetes ืžื ืชื‘ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช ืœืฉื™ืจื•ืชื™ื ื”ืžืงื‘ื™ืœื™ื. Istio ืžืฉืชืžืฉ ื‘ืงื•ื ืกืคื˜ ื“ื•ืžื” ื›ื—ืœืง ืž-Ingress Gateway, ืฉืคืจื˜ื™ื• ื™ื’ื™ืขื• ื‘ื”ืžืฉืš.

ื”ืคืขืœืช ืืคืœื™ืงืฆื™ื” ืขื ืคืจื•ืงืกื™ ืž-Istio

ืœืคืขื•ืœื•ืช ื ื•ืกืคื•ืช ื”ืžื•ื–ื›ืจื•ืช ื‘ืžืืžืจ, ืฉื›ื‘ื• ืืช ื”ืžืื’ืจ ืฉืœื›ื istio-mastery. ื”ื•ื ืžื›ื™ืœ ืืช ื”ื™ื™ืฉื•ื ื•ื”ืžื ื™ืคืกื˜ื™ื ืขื‘ื•ืจ Kubernetes ื•-Istio.

ื”ื›ื ืกืช ืงืจื•ื ื•ืช ืฆื“

ื ื™ืชืŸ ืœื‘ืฆืข ื”ื›ื ืกื” ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืื• ื‘ืื•ืคืŸ ื™ื“ื ื™. ื›ื“ื™ ืœื”ื›ื ื™ืก ืื•ื˜ื•ืžื˜ื™ืช ืžื›ื•ืœื•ืช ืฆื“ื“ื™ื•ืช, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”ืชื•ื•ื™ืช ืœืžืจื—ื‘ ื”ืฉืžื•ืช istio-injection=enabled, ืฉื ืขืฉื” ืขืœ ื™ื“ื™ ื”ืคืงื•ื“ื” ื”ื‘ืื”:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

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

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

ืœืื—ืจ ืคืจื™ืกืช ื”ืฉื™ืจื•ืชื™ื, ื‘ื“ื•ืง ืฉืœืคื•ื“ื™ื ื™ืฉ ืฉื ื™ ืžื™ื›ืœื™ื ื›ืœ ืื—ื“ (ืขื ื”ืฉื™ืจื•ืช ืขืฆืžื• ื•ื”ืฆื“ ืฉืœื•) ืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”ืคืงื•ื“ื” kubectl get pods ื•ืœื•ื•ื“ื ื›ื™ ืžืชื—ืช ืœืขืžื•ื“ READY ื”ืขืจืš ืฉืฆื•ื™ืŸ 2/2, ื”ืžืกืžืœ ืฉืฉื ื™ ื”ืžื›ืœื™ื ืคื•ืขืœื™ื:

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

ืžื‘ื—ื™ื ื” ื•ื™ื–ื•ืืœื™ืช ื–ื” ื ืจืื” ื›ืš:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ืคืจื•ืงืกื™ ืฉืœื™ื— ื‘ืื—ื“ ื”ืชืจืžื™ืœื™ื

ื›ืขืช ื›ืฉื”ืืคืœื™ืงืฆื™ื” ืคื•ืขืœืช, ื ืฆื˜ืจืš ืœืืคืฉืจ ืœืชื ื•ืขื” ื ื›ื ืกืช ืœื”ื™ื›ื ืก ืœืืคืœื™ืงืฆื™ื”.

Ingress Gateway

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

ืจื›ื™ื‘ Ingress Gateway ื•ื”ืฉื™ืจื•ืช ืฉืžืขื‘ื™ืจ ืื•ืชื• ื”ื—ื•ืฆื” ื”ื•ืชืงื ื• ืขืœ ื”ืืฉื›ื•ืœ ื‘ืžื”ืœืš ื”ืชืงื ืช Istio. ื›ื“ื™ ืœื‘ืจืจ ืืช ื›ืชื•ื‘ืช ื”-IP ื”ื—ื™ืฆื•ื ื™ืช ืฉืœ ืฉื™ืจื•ืช, ื”ืคืขืœ:

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

ืื ื• ื ืžืฉื™ืš ืœื’ืฉืช ืœืืคืœื™ืงืฆื™ื” ื‘ืืžืฆืขื•ืช ื”-IP ื”ื–ื” (ืื ื™ ืืชื™ื™ื—ืก ืืœื™ื• ื›-EXTERNAL-IP), ืื– ืžื˜ืขืžื™ ื ื•ื—ื•ืช, ื ื›ืชื•ื‘ ืืช ื”ืขืจืš ืœืžืฉืชื ื”:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

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

ืžืฉืื‘ ืฉืขืจ

Gateway ื”ื•ื CRD (Custom Resource Definition) ื‘-Kubernetes, ื”ืžื•ื’ื“ืจ ืœืื—ืจ ื”ืชืงื ืช Istio ื‘ืืฉื›ื•ืœ ื•ืžืืคืฉืจ ืืช ื”ื™ื›ื•ืœืช ืœืฆื™ื™ืŸ ืคื•ืจื˜ื™ื, ืคืจื•ื˜ื•ืงื•ืœ ื•ืžืืจื—ื™ื ืขื‘ื•ืจื ืื ื• ืจื•ืฆื™ื ืœืืคืฉืจ ืชืขื‘ื•ืจื” ื ื›ื ืกืช.

ื‘ืžืงืจื” ืฉืœื ื•, ืื ื• ืจื•ืฆื™ื ืœืืคืฉืจ ืชืขื‘ื•ืจืช HTTP ื‘ื™ืฆื™ืื” 80 ืขื‘ื•ืจ ื›ืœ ื”ืžืืจื—ื™ื. ื”ื‘ืขื™ื” ืžืชืžืžืฉืช ืขืœ ื™ื“ื™ ื”ื”ื’ื“ืจื” ื”ื‘ืื” (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

ืชืฆื•ืจื” ื–ื• ืื™ื ื” ื–ืงื•ืงื” ืœื”ืกื‘ืจ ืžืœื‘ื“ ื”ื‘ื•ืจืจ istio: ingressgateway. ืขื ื‘ื•ืจืจ ื–ื”, ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ืขืœ ืื™ื–ื” Ingress Gateway ืœื”ื—ื™ืœ ืืช ื”ืชืฆื•ืจื”. ื‘ืžืงืจื” ืฉืœื ื•, ืžื“ื•ื‘ืจ ื‘ื‘ืงืจ Ingress Gateway, ืฉื”ื•ืชืงืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘-Istio.

ื”ืชืฆื•ืจื” ืžื•ื—ืœืช ืขืœ ื™ื“ื™ ืงืจื™ืื” ืœืคืงื•ื“ื” ื”ื‘ืื”:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

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

ืžืฉืื‘ ืฉื™ืจื•ืช ื•ื™ืจื˜ื•ืืœื™

ื”-VirtualService ืื•ืžืจ ืœ-Ingress Gateway ื›ื™ืฆื“ ืœื ืชื‘ ื‘ืงืฉื•ืช ื”ืžื•ืชืจื•ืช ื‘ืชื•ืš ื”ืืฉื›ื•ืœ.

ื‘ืงืฉื•ืช ืœืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื”ืžื’ื™ืขื•ืช ื“ืจืš http-gateway ื—ื™ื™ื‘ื•ืช ืœื”ื™ืฉืœื— ืœืฉื™ืจื•ืชื™ sa-frontend, sa-web-app ื•-sa-feedback:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ืžืกืœื•ืœื™ื ืœื”ื’ื“ืจื” ืขื VirtualServices

ืฉืงื•ืœ ืืช ื”ื‘ืงืฉื•ืช ืฉื™ืฉ ืœืฉืœื•ื— ืืœ SA-Frontend:

  • ื”ืชืืžื” ืžื“ื•ื™ืงืช ืœืื•ืจืš ื”ื“ืจืš / ื™ืฉ ืœืฉืœื•ื— ืืœ SA-Frontend ื›ื“ื™ ืœืงื‘ืœ index.html;
  • ื ืชื™ื‘ื™ื ืขื ืงื™ื“ื•ืžืช /static/* ื™ืฉ ืœืฉืœื•ื— ืืœ SA-Frontend ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืงื‘ืฆื™ื ืกื˜ื˜ื™ื™ื ื‘-frontend, ื›ื’ื•ืŸ CSS ื•-JavaScript;
  • ื ืชื™ื‘ื™ื ื”ืชื•ืืžื™ื ืืช ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ '^.*.(ico|png|jpg)$', ื™ืฉ ืœืฉืœื•ื— ืœ-SA-Frontend, ื›ื™ ืืœื• ื”ืชืžื•ื ื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืขืžื•ื“.

ื”ื™ื™ืฉื•ื ืžื•ืฉื’ ืขืœ ื™ื“ื™ ื”ืชืฆื•ืจื” ื”ื‘ืื” (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

ื ืงื•ื“ื•ืช ื—ืฉื•ื‘ื•ืช:

  1. ืฉื™ืจื•ืช ื•ื™ืจื˜ื•ืืœื™ ื–ื” ืžืชื™ื™ื—ืก ืœื‘ืงืฉื•ืช ื”ืžื’ื™ืขื•ืช http-gateway;
  2. ะ’ destination ืžื’ื“ื™ืจ ืืช ื”ืฉื™ืจื•ืช ืฉืืœื™ื• ื ืฉืœื—ื•ืช ื”ื‘ืงืฉื•ืช.

ืฉื™ื ืœื‘: ื”ืชืฆื•ืจื” ืฉืœืžืขืœื” ืžืื•ื—ืกื ืช ื‘ืงื•ื‘ืฅ sa-virtualservice-external.yaml, ืฉืžื›ื™ืœ ื’ื ื”ื’ื“ืจื•ืช ืœื ื™ืชื•ื‘ ืœ-SA-WebApp ื•-SA-Feedback, ืืš ืงื•ืฆืจ ื›ืืŸ ื‘ืžืืžืจ ืœืงื™ืฆื•ืจ.

ื”ื—ืœ VirtualService ืขืœ ื™ื“ื™ ื”ืชืงืฉืจื•ืช:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

ืฉื™ื ืœื‘: ื›ืืฉืจ ืื ื• ืฆื•ืจื›ื™ื ืžืฉืื‘ื™ Istio, ืฉืจืช ื”-API ืฉืœ Kubernetes ื™ื•ืฆืจ ืื™ืจื•ืข ืฉืžืชืงื‘ืœ ื‘ืžื™ืฉื•ืจ ื”ื‘ืงืจื” ืฉืœ Istio, ื•ืœืื—ืจ ืžื›ืŸ ื”ืชืฆื•ืจื” ื”ื—ื“ืฉื” ืžื•ื—ืœืช ืขืœ ืคืจื•ืงืกื™ ื”-Envoy ืฉืœ ื›ืœ ืคื•ื“. ื•ื ืจืื” ืฉื”ื‘ืงืจ ืฉืœ Ingress Gateway ื”ื•ื ืฉืœื™ื— ืื—ืจ ืฉื”ื•ื’ื“ืจ ื‘ืžื™ืฉื•ืจ ื”ื‘ืงืจื”. ื›ืœ ื–ื” ื ืจืื” ื›ืš ื‘ืชืจืฉื™ื:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ืชืฆื•ืจืช Istio-IngressGateway ืœื ื™ืชื•ื‘ ื‘ืงืฉื•ืช

ื ื™ืชื•ื— ืกื ื˜ื™ืžื ื˜ ื–ืžื™ืŸ ื›ืขืช ื‘- http://{EXTERNAL-IP}/. ืืœ ืชื“ืื’ ืื ืืชื” ืžืงื‘ืœ ืกื˜ื˜ื•ืก ืœื ื ืžืฆื: ืœืคืขืžื™ื ืœื•ืงื— ืงืฆืช ื™ื•ืชืจ ื–ืžืŸ ืขื“ ืฉื”ืชืฆื•ืจื” ื ื›ื ืกืช ืœืชื•ืงืฃ ื•ืžื˜ืžื•ื ื™ื ืฉืœ Envoy ืžืชืขื“ื›ื ื™ื.

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

ืงื™ืืœื™: ืฆืคื™ื™ื”

ื›ื“ื™ ืœื”ื’ื™ืข ืœืžืžืฉืง ื”ื ื™ื”ื•ืœ ืฉืœ Kiali, ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

...ื•ืœืคืชื•ื— http://localhost:20001/ืขืœ ื™ื“ื™ ื›ื ื™ืกื” ื›-admin/admin. ื›ืืŸ ืชืžืฆืื• ืชื›ื•ื ื•ืช ืฉื™ืžื•ืฉื™ื•ืช ืจื‘ื•ืช, ืœืžืฉืœ, ืœื‘ื“ื™ืงืช ื”ืชืฆื•ืจื” ืฉืœ ืจื›ื™ื‘ื™ Istio, ืœื”ืžื—ื™ืฉ ืฉื™ืจื•ืชื™ื ืžืžื™ื“ืข ืฉื ืืกืฃ ืขืœ ื™ื“ื™ ื™ื™ืจื•ื˜ ื‘ืงืฉื•ืช ืจืฉืช, ืœืงื‘ืœ ืชืฉื•ื‘ื•ืช ืœืฉืืœื•ืช "ืžื™ ื™ื•ืฆืจ ืงืฉืจ ืขื ืžื™?", "ืื™ื–ื• ื’ืจืกื” ืฉืœ ื”ืฉื™ืจื•ืช ื—ื•ื•ื” ื›ื™ืฉืœื•ื ื•ืช?" ื•ื›ื•ืœื™. ื‘ืื•ืคืŸ ื›ืœืœื™, ื—ืงื•ืจ ืืช ื”ืืคืฉืจื•ื™ื•ืช ืฉืœ Kiali ืœืคื ื™ ืฉืชืžืฉื™ืš ืœื”ืžื—ื™ืฉ ืžื“ื“ื™ื ืขื Grafana.

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ื’ืจืคื ื”: ื”ื“ืžื™ื” ืฉืœ ืžื“ื“ื™ื

ื”ืžื“ื“ื™ื ืฉื ืืกืคื• ื‘-Istio ืžื’ื™ืขื™ื ืœ-Prometheus ื•ืžื•ืฆื’ื™ื ื‘-Grafana. ื›ื“ื™ ืœื”ื’ื™ืข ืœืžืžืฉืง ื”ื ื™ื”ื•ืœ ืฉืœ Grafana, ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื” ืœืžื˜ื” ื•ืื– ืคืชื— http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ ื”ืชืคืจื™ื˜ ืขืžื•ื“ ื”ื‘ื™ืช ืœืžืขืœื” ืžืฉืžืืœ ื•ื‘ื—ืจ ืœื•ื— ื”ืžื—ื•ื•ื ื™ื ืฉืœ ืฉื™ืจื•ืช Istio ื‘ืคื™ื ื” ื”ืฉืžืืœื™ืช ื”ืขืœื™ื•ื ื”, ื”ืชื—ืœ ืขื ืฉื™ืจื•ืช sa-web-appื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืžื“ื“ื™ื ืฉื ืืกืคื•:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

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

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

ืขื›ืฉื™ื• ื™ืฉ ืœื ื• ื’ืจืคื™ื ื”ืจื‘ื” ื™ื•ืชืจ ื™ืคื™ื, ื•ื‘ื ื•ืกืฃ ืืœื™ื”ื, ื›ืœื™ ืคืจื•ืžืชืื•ืก ื ืคืœืื™ื ืœื ื™ื˜ื•ืจ ื•-Grafana ืœื”ืžื—ืฉืช ืžื“ื“ื™ื ืฉื™ืืคืฉืจื• ืœื ื• ืœืœืžื•ื“ ืขืœ ื‘ื™ืฆื•ืขื™ื, ื‘ืจื™ืื•ืช, ืฉื™ืคื•ืจื™ื/ื”ื“ืจื“ืจื•ืช ื‘ืฉื™ืจื•ืชื™ื ืœืื•ืจืš ื–ืžืŸ.

ืœื‘ืกื•ืฃ, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืžืขืงื‘ ืื—ืจ ื‘ืงืฉื•ืช ื‘ืฉื™ืจื•ืชื™ื.

ื™ื™ื’ืจ: ืื™ืชื•ืจ

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

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
ื“ื•ื’ืžื” ื˜ื™ืคื•ืกื™ืช ืœื‘ืงืฉื” ืืงืจืื™ืช ืฉื ื›ืฉืœื”

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

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

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
TraceId ืžืฉืžืฉ ืœื–ื™ื”ื•ื™ ื”ื‘ืงืฉื”

Istio ืžืฉืชืžืฉืช ื‘-Jaeger Tracer, ื”ืžื™ื™ืฉืžืช ืžืกื’ืจืช OpenTracing API ืขืฆืžืื™ืช ืฉืœ ืกืคืงื™ื. ืืชื” ื™ื›ื•ืœ ืœื’ืฉืช ืœืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœ Jaeger ืขื ื”ืคืงื•ื“ื” ื”ื‘ืื”:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

ืขื›ืฉื™ื• ืœืš ืœ http://localhost:16686/ ื•ื‘ื—ืจ ืฉื™ืจื•ืช sa-web-app. ืื ื”ืฉื™ืจื•ืช ืื™ื ื• ืžื•ืฆื’ ื‘ืชืคืจื™ื˜ ื”ื ืคืชื—, ื”ืฆื’/ืฆื•ืจ ืคืขื™ืœื•ืช ื‘ืขืžื•ื“ ื•ืขื“ื›ืŸ ืืช ื”ืžืžืฉืง. ืœืื—ืจ ืžื›ืŸ ืœื—ืฅ ืขืœ ื”ื›ืคืชื•ืจ ืžืฆื ืขืงื‘ื•ืช, ืฉื™ืฆื™ื’ ืืช ื”ืขืงื‘ื•ืช ื”ืขื“ื›ื ื™ื•ืช ื‘ื™ื•ืชืจ - ื‘ื—ืจ ื›ืœ - ืžื™ื“ืข ืžืคื•ืจื˜ ืขืœ ื›ืœ ื”ืขืงื‘ื•ืช ื™ื•ืคื™ืข:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1

ืขืงื‘ื•ืช ื–ื• ืžืจืื”:

  1. ื”ื‘ืงืฉื” ืžื’ื™ืขื” istio-ingressgateway (ื–ื•ื”ื™ ื”ืื™ื ื˜ืจืืงืฆื™ื” ื”ืจืืฉื•ื ื” ืขื ืื—ื“ ื”ืฉื™ืจื•ืชื™ื, ื•ื ื•ืฆืจ Trace ID ืขื‘ื•ืจ ื”ื‘ืงืฉื”), ื•ืœืื—ืจ ืžื›ืŸ ื”ืฉืขืจ ืฉื•ืœื— ืืช ื”ื‘ืงืฉื” ืœืฉื™ืจื•ืช sa-web-app.
  2. ื‘ืฉื™ืจื•ืช sa-web-app ื”ื‘ืงืฉื” ื ืืกืคืช ืขืœ ื™ื“ื™ ื”-Envoy ื”ืฆื“, "ื™ืœื“" ื ื•ืฆืจ ื‘ื˜ื•ื•ื— (ื‘ื’ืœืœ ื–ื” ืื ื—ื ื• ืจื•ืื™ื ืืช ื–ื” ื‘ืขืงื‘ื•ืช) ื•ืžื•ืคื ื” ืžื—ื“ืฉ ืœืžื™ื›ืœ sa-web-app. (ืœึฐื”ึทืงึดื™ืฃ - ื™ื—ื™ื“ืช ืขื‘ื•ื“ื” ื”ื’ื™ื•ื ื™ืช ื‘ื™ื’ืจ, ื‘ืขืœืช ืฉื, ืฉืขืช ืชื—ื™ืœืช ื”ืคืขื•ืœื” ื•ืžืฉืš ื”ื–ืžืŸ ืฉืœื”. ื ื™ืชืŸ ืœืงื ืŸ ื•ืœื”ื–ืžื™ืŸ ื˜ื•ื•ื—ื™ื. ื’ืจืฃ ืืฆื™ืงืœื™ ืžื›ื•ื•ืŸ ืฉืœ ื˜ื•ื•ื—ื™ื ื™ื•ืฆืจ ืขืงื‘ื•ืช. - ืžืฉื•ืขืจ. ืชืจื’ื•ื)
  3. ื›ืืŸ ื”ื‘ืงืฉื” ืžืขื•ื‘ื“ืช ื‘ืฉื™ื˜ื” ื ื™ืชื•ื— ื”ืกื ื˜ื™ืžื ื˜. ืขืงื‘ื•ืช ืืœื• ื›ื‘ืจ ื ื•ืฆืจื• ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื”, ื›ืœื•ืžืจ. ื”ื ื“ืจืฉื• ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“.
  4. ืžืจื’ืข ื–ื” ืžื•ืคืขืœืช ื‘ืงืฉืช POST ื‘ ืกื-ืœื•ื’ื™ืงื”. ื™ืฉ ืœื”ืขื‘ื™ืจ ืžื–ื”ื” ืžืขืงื‘ ืž sa-web-app.
  5. ...

ืฉื™ื ืœื‘: ื‘ืฉืœื‘ 4, ื”ืืคืœื™ืงืฆื™ื” ืฆืจื™ื›ื” ืœืจืื•ืช ืืช ื”ื›ื•ืชืจื•ืช ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ Istio ื•ืœื”ืขื‘ื™ืจ ืื•ืชืŸ ืœื‘ืงืฉื•ืช ืขื•ืงื‘ื•ืช, ื›ืคื™ ืฉืžื•ืฆื’ ื‘ืชืžื•ื ื” ืœืžื˜ื”:

ื—ื–ืจื” ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืขื Istio. ื—ืœืง 1
(ื) ื”ืขื‘ืจืช ื›ื•ืชืจื•ืช ื”ื™ื ื‘ืื—ืจื™ื•ืช Istio; (ื‘) ื”ืฉื™ืจื•ืชื™ื ืื—ืจืื™ื ืœื›ื•ืชืจื•ืช

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

ื™ืฉ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ื›ื•ืชืจื•ืช ื”ื‘ืื•ืช (ืœื”ืขื‘ื™ืจ):

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

ื–ื• ืžืฉื™ืžื” ืคืฉื•ื˜ื”, ืื‘ืœ ื›ื“ื™ ืœืคืฉื˜ ืืช ื”ื™ื™ืฉื•ื ืฉืœื”, ื™ืฉ ื›ื‘ืจ ืกืคืจื™ื•ืช ืจื‘ื•ืช - ืœื“ื•ื’ืžื”, ื‘ืฉื™ืจื•ืช sa-web-app, ืœืงื•ื— RestTemplate ืžืขื‘ื™ืจ ืืช ื”ื›ื•ืชืจื•ืช ื”ืืœื” ืื ืืชื” ืคืฉื•ื˜ ืžื•ืกื™ืฃ ืืช ื”ืกืคืจื™ื•ืช Jaeger ื•-OpenTracing ืœ ื”ืชืœื•ืช ืฉืœื”.

ืฉื™ื ืœื‘ ืฉื”ื™ื™ืฉื•ื Sentiment Analysis ืžื“ื’ื™ื ื™ื™ืฉื•ืžื™ื ื‘-Flask, Spring ื•-ASP.NET Core.

ืขื›ืฉื™ื•, ื›ืฉื‘ืจื•ืจ ืžื” ืื ื—ื ื• ืžืงื‘ืœื™ื ืžื”ืงื•ืคืกื” (ืื• ื›ืžืขื˜ ืžื—ื•ืฅ ืœืงื•ืคืกื”), ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ื•ื•ื ื•ืŸ ื ื™ืชื•ื‘, ื ื™ื”ื•ืœ ืชืขื‘ื•ืจืช ืจืฉืช, ืื‘ื˜ื—ื” ื•ืขื•ื“!

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

ื .ื‘ ืžื”ืžืชืจื’ื

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

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

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