ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄: Π‘Π΅ΡΠ²ΠΈΠ·Π½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π°Ρ Π° Π² Π³ΠΎΡΠ΅ΡΠ° ΡΠ΅ΠΌΠ° Π² Π΄Π½Π΅ΡΠ½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΠΎΠΊΠ°ΡΠΎ Istio ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π° ΡΠ°Π΄Π°ΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ Π½Π° DevOps, ΡΠΎΠ²Π° Π΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½ΠΎΠ² ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΊΠΎΠΉΡΠΎ, ΠΌΠ°ΠΊΠ°Ρ ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π° Π΄Π° Π³ΠΎ ΠΎΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅. ΠΠ΅ΡΠΌΠ°Π½ΡΠΊΠΈΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π ΠΈΠ½ΠΎΡ ΠΠ°Π»ΠΎΠΊΡ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΎΠ±Π»Π°ΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π² ΡΠ΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Orange Networks, Π΅ Π½Π°ΠΏΠΈΡΠ°Π» ΡΡΠ΄Π΅ΡΠ½Π° ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π±ΡΡΠ·ΠΎ ΠΈ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈΡΠ΅ Π² Istio. Π’ΠΎΠΉ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠ²ΠΎΡΡΠ° ΠΈΡΡΠΎΡΠΈΡ Ρ ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Istio ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ ΠΎΡΠΈ.
ΠΡΡΠΈΠΎ β ΠΡΠΎΠ΅ΠΊΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π² ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ Ρ Π΅ΠΊΠΈΠΏΠΈ ΠΎΡ Google, IBM ΠΈ Lyft. Π’ΠΎΠΉ ΡΠ΅ΡΠ°Π²Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΡΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ:
- ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°: ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΎΠΏΠΈΡΠΈ, Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ;
- ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ: ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»;
- Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡ: ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅.
ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠ΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π²Π°ΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ "ΠΌΠΈΠΊΡΠΎ". ΠΡΠΈΡΠΊΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ½Π΅ Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ° Π·Π°Π³ΡΠ±Π° Π½Π° ΡΠΈΡΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π° Π±ΠΈΠ·Π½Π΅Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°: ΠΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΡΠ½Π΅ΠΌΠ° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°?
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ: ΠΠ²Π° ΡΠΏΡΠΈΠ½ΡΠ°.MP: ΠΠ°ΠΊΠ²ΠΎ?.. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ ΠΠΠ£ΠΠΠ‘Π’!
R: ΠΡΠ°Π²Π΅Π½Π΅ΡΠΎ Π½Π° CRUD Π΅ Π»Π΅ΡΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π·Π°Π΄Π°ΡΠ°ΡΠ°, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΈ ΠΎΡΠΎΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ ΡΡΠ»ΡΠ³ΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΅ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΡΠΈ ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°ΡΠ° Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π·Π° Π΄Π° ΡΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠ΅ Π΅ ΡΡΠΈΠ½Π°Π»Π°, ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½ΠΈΡ ΠΈΠΏΡΠ΅Π³ΡΠ°Π΄ΠΈ (ΠΠΈΠΆΡΠ΅ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π΄Π²Π°ΡΠ° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΌΠΎΠ΄Π΅Π»Π°.), ΠΈ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, [β¦]MP: Π, Π½Π΅ΠΊΠ° ΡΠΎΠ³Π°Π²Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²Π°ΡΠ° ΡΡΠ»ΡΠ³Π°.
ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π΅ ΡΡΠ½Π°: ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΡΡΡΠΏΠΊΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π°, Π΅ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Istio ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΡΡΠ»Π°ΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ, ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ (ΠΊΠΎΡΡΠΎ Π½Π΅ Π΅ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°) ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π‘ΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ Π·Π° Kubernetes. ΠΠ½Π°ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ ΡΠ΅ΡΠ΅Π½Π΅
Istio ΠΈΠ΄Π΅Ρ
Π ΡΠ²ΡΡ Π±Π΅Π· Istio Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π° ΠΎΡΠΏΡΠ°Π²Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΄ΡΡΠ³Π° ΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΌΠ°: Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΠΎΠ² ΠΎΠΏΠΈΡ, Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡ, Π΄Π° ΠΎΡΠ²ΠΎΡΠΈ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Ρ ΠΈ Ρ.Π½.
ΠΡΠ΅ΠΆΠΎΠ² ΡΡΠ°ΡΠΈΠΊ Π² Kubernetes
Istio, ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΏΡΠΈΠ»Π°Π³Π°:
- ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ: Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°, ΡΠΎΠΉ ΡΠ°Π·Π±ΠΈΡΠ° Π΄Π°Π»ΠΈ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ½Π° ΠΈ Ρ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ.
- Canary Rollouts: ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΊΡΠΌ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°.
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ: ΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΡΠ½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ?
- ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡ: ΠΠΎΠ±Π°Π²Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΠΊΡΠΌ Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° ΠΈ Π³ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π° Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
- ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ: ΠΠ·Π²Π»ΠΈΡΠ° JWT ΡΠΎΠΊΠ΅Π½, ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΈ ΡΠΏΡΠ»Π½ΠΎΠΌΠΎΡΠ°Π²Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅.
Π’ΠΎΠ²Π° ΡΠ° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ (Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ!), ΠΊΠΎΠΈΡΠΎ Π΄Π° Π²ΠΈ Π·Π°ΠΈΠ½ΡΡΠΈΠ³ΡΠ²Π°Ρ. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈΠΌ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ!
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°
Istio ΠΏΡΠΈΡ Π²Π°ΡΠ° ΡΠ΅Π»ΠΈΡ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ°ΡΠΈΠΊ ΠΈ ΠΏΡΠΈΠ»Π°Π³Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΡΠΌ Π½Π΅Π³ΠΎ, ΠΊΠ°ΡΠΎ Π²ΠΌΡΠΊΠ²Π° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ½ΠΎ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΊΠΎΡ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄. ΠΡΠΎΠΊΡΠΈΡΠ°, ΠΊΠΎΠΈΡΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ a Π Π°Π²Π½ΠΈΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ Ρ ΠΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠ°Π²Π½ΠΈΠ½Π°.
Π Π°Π²Π½ΠΈΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ
ΠΡΠΎΠΊΡΠΈΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π²ΠΌΡΠΊΠ½Π°ΡΠΈ Π² ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π½Π° Istio Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ°, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°ΡΠ°.
ΠΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠΈ ΠΈ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΠΈΠ³Π°ΡΠ° Π² Envoy
ΠΠ° Π΄Π° ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ:
- ΠΏΡΠ°ΡΠ΅Π½ΠΈΠΊ (Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΏΡΠΎΠΊΡΠΈ, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΊΠΎΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΈ ΠΊΠ°ΠΊ
ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΡΠΎΠ΄ΡΠΊΡ - ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π²ΠΎΠ΄) ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π΄ΠΎ ΠΏΡΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π° B ΠΈ Π½Π΅ ΡΡΠΏΡΠ²Π°. - Envoy Sidecar ΠΎΠΏΠΈΡΠ²Π° ΠΎΡΠ½ΠΎΠ²ΠΎ (ΠΎΠΏΠΈΡΠ°ΠΉ ΠΎΡΠ½ΠΎΠ²ΠΎ). (1)
- ΠΠ΅ΡΡΠΏΠ΅ΡΠ½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° ΡΠ΅ Π²ΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΊΡΠΈΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Ρ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π»ΠΎ.
- Π’ΠΎΠ²Π° ΠΎΡΠ²Π°ΡΡ ΠΏΡΠ΅ΠΊΡΡΠ²Π°ΡΠ° ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ. (2)
Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΡΠ»Π΅Π΄Π²Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ ΠΎΠΏΠΈΡ, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° Π²Π΅ΡΠΈΠ³Π°ΡΠ° ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ X, Y ΠΈΠ»ΠΈ Z. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΈ ΠΎΡΠ΅ Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΎΡ ΠΊΡΡΠΈΡ Π² Istio ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°.
Π‘ΡΡΠ°Ρ ΠΎΡΠ΅Π½! Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Ρ Istio, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΡΡΠΌΠ½Π΅Π½ΠΈΡ, ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ. ΠΠΊΠΎ ΡΠΎΠ²Π° Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ Π² ΠΆΠΈΠ²ΠΎΡΠ°, ΡΠΎΠ³Π°Π²Π° ΠΈΠΌΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠ΅: Π² ΠΊΡΠ°Ρ Π½Π° ΠΊΡΠ°ΠΈΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ.
Π Π½Π°ΠΊΡΠ°Ρ ΠΏΠΈΡΠ°ΡΠ΅: βΠΠΎΠΆΠ΅ Π»ΠΈ Π΄Π° ΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°?β
Π‘Π΅Π³Π° ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π·Π° ΠΌΠΎΡΡΠΊΠΎ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ - ΠΈ Π½Π΅ΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ»Π΅Ρ.
ΠΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠ°Π²Π½ΠΈΠ½Π°
Π‘ΡΡΡΠΎΠΈ ΡΠ΅ ΠΎΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: ΠΠΈΠ»ΠΎΡ, ΠΠΈΠΊΡΠ΅Ρ ΠΈ Π¦ΠΈΡΠ°Π΄Π΅Π»Π°, ΠΊΠΎΠΈΡΠΎ Π·Π°Π΅Π΄Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ Envoys Π΄Π° Π½Π°ΡΠΎΡΠ²Π°Ρ ΡΡΠ°ΡΠΈΠΊΠ°, Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ Π΄Π° ΡΡΠ±ΠΈΡΠ°Ρ ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘Ρ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°Π²Π½ΠΈΠ½Π° Ρ ΡΠ°Π²Π½ΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅
Envoys (Ρ.Π΅. ΡΠ°Π²Π½ΠΈΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ) ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ Ρ
ΠΡΡΠ·ΠΊΠ° Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Ρ Istio
ΠΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½Π° Istio Ρ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π½ΠΎ Π½Π΅ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ: ΠΊΠ°ΠΊ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Istio?
Π§Π΅ΡΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ»ΡΠΆΠ±ΠΈΡΠ΅ Π·Π½Π°ΡΡ Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Istio, ΠΊΠ°ΠΊΡΠΎ ΡΠΈΠ±ΠΈΡΠ΅ Π·Π½Π°ΡΡ Π·Π° Π²ΠΎΠ΄Π°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΈΡΠ°Ρ: βΠΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ Π²ΠΎΠ΄Π°ΡΠ°?β
ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅Ρ ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ ΡΠ»Π΅Π΄ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° Istio ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΠΈ ΡΠ»Π΅Π΄ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΡΠ΅Π΄. Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ Istio.
Π‘ΡΠΈΠ³Π° ΡΠ΅ΠΎΡΠΈΡ - Π½Π΅ΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΠ΅Π·ΠΈ Π·Π½Π°Π½ΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°!
Istio Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Istio ΠΈΠ·ΠΈΡΠΊΠ²Π° Kubernetes ΠΊΠ»ΡΡΡΠ΅Ρ Ρ ΠΏΠΎΠ½Π΅ 4 vCPU ΠΈ 8 GB Π½Π°Π»ΠΈΡΠ½Π° RAM. ΠΠ° Π±ΡΡΠ·ΠΎ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΡΠ»Π΅Π΄Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Google Cloud Platform, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½ΠΎΠ²ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Kubernetes ΡΡΠ΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π°ΡΠ° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Istio ΡΡΠ΅Π· ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Helm.
ΠΠΎΠ½ΡΠ°ΠΆ Π½Π° ΠΊΠΎΡΠΌΠΈΠ»ΠΎΡΠΎ
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Helm Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²
ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡ
ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Istio ΠΎΡ [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, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π²ΡΠ² Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎΡΠΎ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ΅ΡΠΈΡΠΈ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ:
- ΠΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ SA-Frontend, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΠΏΡΠ΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Reactjs;
- ΠΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ SA ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° Π·Π°ΡΠ²ΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΡΠΎ;
- ΠΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ SA ΠΠΎΠ³ΠΈΠΊΠ°ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠ°
Π°Π½Π°Π»ΠΈΠ· Π½Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΡΡΠ° ; - ΠΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ SA ΠΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π·Π° ΡΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·.
Π ΡΠ°Π·ΠΈ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°, Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΈ Ingress Controller, ΠΊΠΎΠΉΡΠΎ Π² Kubernetes Π½Π°ΡΠΎΡΠ²Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ. Istio ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Ingress Gateway, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Ρ.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΎΠΊΡΠΈ ΠΎΡ 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
ΠΠΈΠ·ΡΠ°Π»Π½ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
ΠΡΠ°ΡΠ΅Π½ΠΈΠΊ ΠΏΡΠ»Π½ΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π² Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΠΎΠ΄Ρ
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π³ΠΎΡΠΎΠ²ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
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 ΠΏΡΠ΅Π· Π±ΡΠ°ΡΠ·ΡΡ ΡΠ΅Π³Π°, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠ° Service Unavailable, Π·Π°ΡΠΎΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Istio Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ΅Π»ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊΠ΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ Gateway.
Π Π΅ΡΡΡΡ Π½Π° ΠΏΠΎΡΡΠ°Π»Π°
Gateway Π΅ CRD (Custom Resource Definition) Π² Kubernetes, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΡΠ»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Istio Π² ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ.
Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ HTTP ΡΡΠ°ΡΠΈΠΊ Π½Π° ΠΏΠΎΡΡ 80 Π·Π° Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΎΠ²Π΅. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΡΡΠ΅Π· ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡ (
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:
ΠΠ°ΡΡΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Ρ VirtualServices
ΠΠ±ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈ Π΄ΠΎ SA-Frontend:
- Π’ΠΎΡΠ½ΠΎ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡΡΡ
/
ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π½Π° SA-Frontend, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ index.html; - ΠΡΡΠΈΡΠ° Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ
/static/*
ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π½Π° SA-Frontend, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π²ΡΠ² ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°, ΠΊΠ°ΡΠΎ CSS ΠΈ JavaScript; - ΠΡΡΠΈΡΠ°, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΈ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈΡ ΠΈΠ·ΡΠ°Π·
'^.*.(ico|png|jpg)$'
, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π½Π° SA-Frontend, Ρ.ΠΊ Π’ΠΎΠ²Π° ΡΠ° ΡΠ½ΠΈΠΌΠΊΠΈΡΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (
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) ΠΠ°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅
- ΠΡΠΎΡ VirtualService ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· http-gateway;
- Π
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, Kubernetes API Server ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Istio Control Plane, ΠΈ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Envoy ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod'Π°. Π ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Ingress Gateway ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ Envoy, ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π² Control Plane. ΠΡΡ ΡΡΠΎ Π½Π° ΡΡ Π΅ΠΌΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Istio-IngressGateway Π΄Π»Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ²ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis ΡΡΠ°Π»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΏΠΎ
http://{EXTERNAL-IP}/
. ΠΠ΅ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΠΉΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΡΠ°ΡΡΡ Not Found: ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΡΠΏΠΈΠ»Π° Π² ΡΠΈΠ»Ρ ΠΈ ΠΊΡΡΠΈ Envoy ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ.ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ, ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠΊ (Π΅Π³ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².).
Kialiβ: Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ 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.Grafana: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ
Π‘ΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ Π² 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
ΠΠ»ΠΈΠΊΠ½ΡΠ² Π½Π° ΠΌΠ΅Π½Ρ Home ΡΠ»Π΅Π²Π° ΡΠ²Π΅ΡΡ Ρ ΠΈ Π²ΡΠ±ΡΠ°Π² Istio Service Dashboard Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ³Π»Ρ, Π½Π°ΡΠ½ΠΈΡΠ΅ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° sa-web-app, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ:
ΠΠ΄Π΅ΡΡ Π½Π°Ρ ΠΆΠ΄ΡΡ ΠΏΡΡΡΠΎΠ΅ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΊΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ β ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠ΅ Π½Π΅ ΠΎΠ΄ΠΎΠ±ΡΠΈΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ while true; do curl -i http://$EXTERNAL_IP/sentiment -H "Content-type: application/json" -d '{"sentence": "I love yogobella"}'; sleep .8; done
ΠΠΎΡ ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠ½ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π° Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ β Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Prometheus Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Grafana Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΡΠΈΠΊ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π°ΠΌ ΡΠ·Π½Π°ΡΡ ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π·Π΄ΠΎΡΠΎΠ²ΡΡ, ΡΠ»ΡΡΡΠ΅Π½ΠΈΡΡ /Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ .
Jaegerβ: ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠ±ΠΎΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π½ΠΈΠΆΠ΅:
Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ, ΠΏΠ°Π΄Π°Π΅Ρ β Π² ΡΡΠΌ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π°? ΠΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ? ΠΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ? ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ Π² ΠΎΠ±ΠΎΠΈΡ β Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. ΠΠ°ΠΊ ΡΠ°ΡΡΠΎ Π²Ρ Π»ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅Π±Ρ Π·Π° ΡΠ°ΠΊΠΈΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ? ΠΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²β¦
ΠΡΠΎ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°Ρ ΠΈ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ:
ΠΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ 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. ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ β ΠΏΡΠΎΡΠ²ΠΈΡΠ΅/ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Find Traces, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΡ β Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π»ΡΠ±ΠΎΠΉ β ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΉΡΠ°ΠΌ:ΠΡΠΎΡ ΡΡΠ΅ΠΉΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ:
- ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² istio-ingressgateway (ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Trace ID), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ»ΡΠ· Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΠ²ΠΈΡ sa-web-app.
- Π ΡΠ΅ΡΠ²ΠΈΡΠ΅ sa-web-app Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ Envoy sidecar'ΠΎΠΌ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ Β«ΡΠ΅Π±ΡΠ½ΠΎΠΊΒ» Π² span'Π΅ (ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΡΠ΅ΠΉΡΠ°Ρ ) ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ sa-web-app. (
Span β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΡ Π² Jaeger, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Span'Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Ρ ΠΈΠ· span'ΠΎΠ² ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ trace. β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².)- ΠΠ΄Π΅ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sentimentAnalysis. ΠΡΠΈ ΡΡΠ΅ΠΉΡΡ ΡΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ.Π΅. Π΄Π»Ρ Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅.
- Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ POST-Π·Π°ΠΏΡΠΎΡ Π² sa-logic. Trace ID Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡΠ΅Π½ ΠΈΠ· sa-web-app.
- β¦
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ° 4 ΡΠ°Π³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Istio, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅:
(A) ΠΠ° ΠΏΡΠΎΠ±ΡΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Istio; (B) ΠΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΡIstio Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π±ΠΎΡΡ, Ρ.ΠΊ. Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ span'Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ 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, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ. UPDATE (14 ΠΌΠ°ΡΡΠ°):
ΠΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π°.P.S. ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«ΠΠ°Π·Π°Π΄ ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ IstioΒ»:
ΡΠ°ΡΡΡ 2 (ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ) ,ΡΠ°ΡΡΡ 3 (Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ) ;- Β«
Conduit β Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ service mesh Π΄Π»Ρ Kubernetes Β»;- Β«
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ service mesh ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ [Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ]? Β»;- Β«
ΠΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΡΠ΅ΡΠΈ Π² Kubernetes. Π§Π°ΡΡΠΈ 1 ΠΈ 2 Β»;- Β«
ΠΠ°ΠΊ ΡΡΠΎΡ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π·Π΄Π΅ΡΡ [Π² Kubernetes]? Β».ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
route:
- destination:
host: sa-frontend # 2
port:
number: 80
ΠΠ°ΠΆΠ½ΠΈ ΡΠΎΡΠΊΠΈ:
- Π’Π°Π·ΠΈ VirtualService ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ ΠΈΠ΄Π²Π°ΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ http-ΡΠ»ΡΠ·;
- Π
destination
Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΎΡΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π²ΡΠ² ΡΠ°ΠΉΠ»
sa-virtualservice-external.yaml
, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΊΡΠΌ SA-WebApp ΠΈ SA-Feedback, Π½ΠΎ Π΅ ΡΡΠΊΡΠ°ΡΠ΅Π½ ΡΡΠΊ Π² ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΊΡΠ°ΡΠΊΠΎΡΡ.ΠΡΠΈΠ»ΠΎΠΆΠ΅ΡΠ΅ VirtualService, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΎΠ±Π°Π΄ΠΈΡΠ΅ Π½Π°:
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Istio, API ΡΡΡΠ²ΡΡΡΡ Π½Π° Kubernetes Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°Π²Π½ΠΈΠ½Π° Π½Π° Istio, ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΡΠΌ ΠΏΡΠΎΠΊΡΠΈΡΠΎ Envoy Π½Π° Π²ΡΠ΅ΠΊΠΈ pod. Π ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡΡ Π½Π° Ingress Gateway ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΅ Π΄ΡΡΠ³ Envoy, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π² Control Plane. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ° Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ°:
Istio-IngressGateway ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΠΠ½Π°Π»ΠΈΠ·ΡΡ Π½Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΡΠΎ Π²Π΅ΡΠ΅ Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π°
http://{EXTERNAL-IP}/
. ΠΠ΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΉΡΠ΅, Π°ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΠ°ΡΡΡ ΠΠ΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½: ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΎΡΠ½Π΅ΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅, Π·Π° Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΡΠΈΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΊΠ΅ΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Envoy.ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅, ΠΏΠΎΠΈΠ³ΡΠ°ΠΉΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΡΡΠ°ΡΠΈΠΊ. (Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΈΡΡΡΡΠ²ΠΈΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΠ½ΠΎΡΠ° ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ - ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π².).
ΠΠΈΠ°Π»ΠΈ: Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡ
ΠΠ° Π΄Π° ΡΡΠΈΠ³Π½Π΅ΡΠ΅ Π΄ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Kiali, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
β¦ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½
http://localhost:20001/ ΠΊΠ°ΡΠΎ Π²Π»Π΅Π·Π΅ΡΠ΅ ΠΊΠ°ΡΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ/admin. Π’ΡΠΊ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° Istio, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠ±ΡΠ°Π½Π° ΡΡΠ΅Π· ΠΏΡΠΈΡ Π²Π°ΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ βΠΠΎΠΉ Ρ ΠΊΠΎΠ³ΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°?β, βΠΠΎΡ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈΠ·ΠΏΠΈΡΠ²Π° ΠΏΡΠΎΠ²Π°Π»ΠΈ?" ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΡΡΠΊ. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΠΏΡΠΎΡΡΠ΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Kiali, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Ρ Grafana.Grafana: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈ
ΠΠ΅ΡΡΠΈΠΊΠΈΡΠ΅, ΡΡΠ±ΡΠ°Π½ΠΈ Π² Istio, Π·Π°Π²ΡΡΡΠ²Π°Ρ Π² Prometheus ΠΈ ΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ Ρ Grafana. ΠΠ° Π΄Π° ΡΡΠΈΠ³Π½Π΅ΡΠ΅ Π΄ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Grafana, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅
http://localhost:3000/ :ΠΠ°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ ΠΌΠ΅Π½ΡΡΠΎ ΠΠ°ΡΠ°Π»ΠΎ Π³ΠΎΡΠ΅ Π²Π»ΡΠ²ΠΎ ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π’Π°Π±Π»ΠΎ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Istio Π² Π³ΠΎΡΠ½ΠΈΡ Π»ΡΠ² ΡΠ³ΡΠ» Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Ρ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ:
Π’ΡΠΊ ΡΠ°ΠΊΠ°ΠΌΠ΅ ΠΏΡΠ°Π·Π½ΠΎ ΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠΊΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ - ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½ΡΠΌΠ° Π΄Π° ΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠΎΠ²Π°. ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΌΠ°Π»ΡΠΊ ΡΠΎΠ²Π°Ρ ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΊΡΠ°ΡΠΈΠ²ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Prometheus Π·Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΠΈ Grafana Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΄Π° Π½Π°ΡΡΠΈΠΌ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π·Π΄ΡΠ°Π²ΠΎΡΠ»ΠΎΠ²Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° / Π²Π»ΠΎΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ.
Π Π½Π°ΠΊΡΠ°Ρ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΡΠ»ΡΠ³ΠΈΡΠ΅.
ΠΠ΅Π³Π΅Ρ: ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅
Π©Π΅ Π½ΠΈ ΡΡΡΠ±Π²Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, Π·Π°ΡΠΎΡΠΎ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠΌΠ°ΠΌΠ΅, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΡΠΈΠ³Π½Π΅ΠΌ Π΄ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π°ΡΠ°. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡ ΡΠ½ΠΈΠΌΠΊΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
Π’ΠΈΠΏΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ»ΡΡΠ°ΠΉΠ½Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ°ΠΡΠΊΠ°Π½Π΅ΡΠΎ ΠΈΠ΄Π²Π°, ΠΏΠ°Π΄Π° - ΠΊΠ°ΠΊΠ²Π° Π΅ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ°? ΠΡΡΠ²ΠΈ ΡΠ΅ΡΠ²ΠΈΠ·? ΠΠ»ΠΈ Π²ΡΠΎΡΠΎ? Π Π² Π΄Π²Π°ΡΠ° ΠΈΠΌΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ - Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ. ΠΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΠΎ ΡΡΠ΅ ΡΠ΅ Ρ Π²Π°ΡΠ°Π»ΠΈ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°? ΠΠ°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ...
Π’ΠΎΠ²Π° Π΅ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° ΡΡΠ΅Π· ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, Π² ΠΊΠΎΠΈΡΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Ρ Π΅Π΄ΡΡ Π΅Π΄Π½Π° Π½Π° Π΄ΡΡΠ³Π°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΡΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ:
TraceId ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°Istio ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Jaeger Tracer, ΠΊΠΎΠΉΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° OpenTracing API ΡΠ°ΠΌΠΊΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Jaeger ΡΡΡ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
Π‘Π΅Π³Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π°
http://localhost:16686/ ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΡΠ»ΡΠ³Π° sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΊΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π² ΠΏΠ°Π΄Π°ΡΠΎΡΠΎ ΠΌΠ΅Π½Ρ, ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΠ΅/Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΉΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π±ΡΡΠΎΠ½Π° ΠΠ°ΠΌΠ΅ΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΠΈ - ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ - ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»Π΅Π΄ΠΈ:Π’Π°Π·ΠΈ ΡΠ»Π΅Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°:
- ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠ΄Π²Π° istio-ingressgateway (ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π΅Π΄Π½Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Trace ID Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ»ΡΠ·ΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΄ΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- Π ΡΠ΅ΡΠ²ΠΈΠ· sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π²Π·ΠΈΠΌΠ° ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ½Π°ΡΠ° ΠΊΠΎΠ»ΠΈΡΠΊΠ° Π½Π° Envoy, ΡΡΠ·Π΄Π°Π²Π° ΡΠ΅ "Π΄Π΅ΡΠ΅" Π² span (Π·Π°ΡΠΎΠ²Π° Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΡΠ»Π΅Π΄ΠΈ) ΠΈ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. (
ΠΏΠ΅Π΄Ρ - Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² Jaeger, ΠΈΠΌΠ°ΡΠ° ΠΈΠΌΠ΅, Π½Π°ΡΠ°Π»Π΅Π½ ΡΠ°Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° ΠΈ Π½Π΅ΠΉΠ½Π°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ. ΠΠ±Ρ Π²Π°ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ. ΠΠ°ΡΠΎΡΠ΅Π½ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅Π½ Π³ΡΠ°ΡΠΈΠΊ ΠΎΡ ΡΡΠ°ΡΡΡΡΠΈ ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΡΠ»Π΅Π΄Π°. - ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π²ΠΎΠ΄)- Π’ΡΠΊ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΡΡΠ°. Π’Π΅Π·ΠΈ ΡΠ»Π΅Π΄ΠΈ Π²Π΅ΡΠ΅ ΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Ρ.Π΅. ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°.
- ΠΡ ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ° POST Π·Π°ΡΠ²ΠΊΠ° ΡΠ°-Π»ΠΎΠ³ΠΈΠΊΠ°. Trace ID ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ΅Π½ ΠΎΡ sa-web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- ...
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π ΡΡΡΠΏΠΊΠ° 4 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ Istio, ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
(A) ΠΡΠ΅ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ Π½Π° Istio; (B) Π£ΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π·Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅Istio Π²ΡΡΡΠΈ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ°, Π·Π°ΡΠΎΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π·Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ ΠΎΠ±Ρ Π²Π°ΡΠΈ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ sidecare ΠΈ Π³ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π±Π΅Π· Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΡΡ Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π²ΡΡΡΠ΅ Π² ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΏΡΠ»Π½ΠΈΡΡ ΠΏΡΡ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π³ΡΠ±Π΅Π½.
Π‘Π»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π²Π·Π΅ΡΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ (ΠΏΡΠ΅ΠΏΡΠ°ΡΠ΅Π½ΠΈ):
Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠ° Π·Π°Π΄Π°ΡΠ°, Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΎΡΡΠΈ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π²Π΅ΡΠ΅ ΠΈΠΌΠ°
ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ RestTemplate ΠΏΡΠ΅ΠΏΡΠ°ΡΠ° ΡΠ΅Π·ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, Π°ΠΊΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Jaeger ΠΈ OpenTracing ΠΊΡΠΌΠ½Π΅ΠΉΠ½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ .ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Sentiment Analysis Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ² Flask, Spring ΠΈ ASP.NET Core.
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΡΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΡ ΠΊΡΡΠΈΡΡΠ° (ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈ ΠΎΡ ΠΊΡΡΠΈΡΡΠ°), Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠΈΠ½Π°ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ°ΡΠΈΠΊ, ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ!
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄: ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π½Π° Istio ΠΎΡ Π ΠΈΠ½ΠΎΡ ΠΠ°Π»ΠΎΠΊΡ, ΡΠΈΠΈΡΠΎ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Ρ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³ Π² Π±Π»ΠΈΠ·ΠΊΠΎ Π±ΡΠ΄Π΅ΡΠ΅. ΠΠΠ’Π£ΠΠΠΠΠΠ¦ΠΠ― (14 ΠΌΠ°ΡΡ):
ΠΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ Π²Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ.PS ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- βΠΠ°Π·Π°Π΄ ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ Ρ Istioβ:
ΡΠ°ΡΡ 2 (ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°) ,ΡΠ°ΡΡ 3 (ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ) ; - Β«
Conduit - Π»Π΅ΠΊ ΡΠ΅ΡΠ²ΠΈΠ·Π΅Π½ ΠΌΠ΅Ρ Π·Π° Kubernetes Β»; - Β«
ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈ Π·Π°ΡΠΎ ΠΌΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° [Π·Π° ΠΎΠ±Π»Π°ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ]? Β»; - Β«
ΠΠ»ΡΡΡΡΠΎΠ²Π°Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ° Π² Kubernetes. Π§Π°ΡΡ 1 ΠΈ 2 Β»; - Β«
ΠΠ°ΠΊ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΊΠΎΡ ΡΠ΅ ΠΎΠ·ΠΎΠ²Π° ΡΡΠΊ [Π² Kubernetes]? ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com