
ΠΡΠΈΠΌ. ΠΏΡΠ΅Π².: Service mesh ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΡΠ°Π½Π° Π°ΠΊΡΡΠ°Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Istio ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ·Π½Π°Ρ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ, ΡΠΎΠ²Π° Π΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½ΠΎΠ² ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΊΠΎΠΉΡΠΎ, Π±ΡΠ΄Π΅ΠΉΠΊΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅. ΠΠ΅ΠΌΡΠΊΠΈΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π ΠΈΠ½ΠΎΡ ΠΠ°Π»ΡΠΊΡ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΎΠ±Π»Π°ΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π² ΡΠ΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Orange Networks, Π½Π°ΠΏΠΈΡΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π΅Π½ ΡΠΈΠΊΡΠ» ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π±ΡΡΠ·ΠΎ ΠΈ Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π½ΠΎ ΠΏΠΎΡΠ°ΠΏΡΠ½Π΅ Π² Istio. Π’ΠΎΠΉ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠ²ΠΎΡ ΡΠ°Π·ΠΊΠ°Π· Ρ ΡΠΎΠ²Π°, ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Istio ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π±ΡΡΠ·ΠΎ Ρ Π½Π°ΡΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΡΠΈ.
Istio β Open Source ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π² ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π΅ΠΊΠΈΠΏΠΈ ΠΎΡ Google, IBM ΠΈ Lyft. Π’ΠΎΠΉ ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅:
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°: ΡΠ°ΠΉΠΌΠ°ΡΡΠΈ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΎΠΏΠΈΡΠΈ, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ;
- Π‘ΠΈΠ³ΡΡΠ½ΠΎΡΡ: Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ;
- ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡ: ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, Π»ΠΎΠ³Π²Π°Π½Π΅.
ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠ΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π²Π°ΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΡΠ΅ ΠΏΡΠ΅ΡΡΠ°Π½Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ βΠΌΠΈΠΊΡΠΎβ. ΠΡΠΈΡΠΊΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ° ΠΈΠ·Π»ΠΈΡΠ½ΠΎ ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ Π±ΠΈΡ Π° ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π° Π±ΠΈΠ·Π½Π΅Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ: ΠΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°?
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ: ΠΠ²Π° ΡΠΏΡΠΈΠ½ΡΠ°.ΠΠ: ΠΠ°ΠΊΠ²ΠΎ?.. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΌΠΎ CRUD!
Π : ΠΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ CRUD Π΅ Π»Π΅ΡΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π·Π°Π΄Π°ΡΠ°ΡΠ°, Π½ΠΎ ΠΎΡΠ΅ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ ΡΡΠ»ΡΠ³ΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΅ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°, ΡΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π·Π° Π΄Π° ΡΠΌΠ΅ ΡΠ²Π΅ΡΠ΅Π½ΠΈ, ΡΠ΅ ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ Π΅ ΠΏΠ°Π΄Π½Π°Π»Π°, ΡΠ΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡΠΈ ΠΈ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° Π΄Π²Π°ΡΠ° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΏΠ°ΡΠ΅ΡΠ½Π° Π² ΡΡΠ°ΡΠΈΡΡΠ° β Π±Π΅Π». ΡΠ΅Π΄.), Π° Π·Π° Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, [β¦]ΠΠ: Π, ΡΠΎΠ³Π°Π²Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΡΠ»ΡΠ³Π°ΡΠ° Product.
ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π΅ ΡΡΠ½Π°: ΠΎΠ±Π΅ΠΌΡΡ ΡΡΡΠΏΠΊΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π°, Π΅ ΠΎΠ³ΡΠΎΠΌΠ΅Π½. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Istio ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ (ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΡΠ΅Π»Π΅Π²ΠΈ Π·Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°) ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅.

ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π‘ΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ Kubernetes. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΈ Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ Ρ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π».
ΠΠ΄Π΅ΡΡΠ° Π½Π° Istio
Π ΡΠ²ΡΡ Π±Π΅Π· Istio, Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π° ΠΏΡΠ°Π²ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΄ΡΡΠ³Π°, Π° Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΡΠΈΠ², ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠ° Π΄Π° Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ: Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΠΎΠ² ΠΎΠΏΠΈΡ, Π΄Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡ, Π΄Π° ΠΎΡΠ²ΠΎΡΠΈ circuit breaker ΠΈ Ρ.Π½.

ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ Π² Kubernetes
Istio ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠΎ ΡΡΠ΅Π· Π½Π°ΠΌΠ΅ΡΠ° Π² ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°:
- ΠΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ: ΡΠ°Π·ΡΠΈΡΠ°ΠΉΠΊΠΈ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΡΡΠ°ΡΡΡΠ° Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°, ΡΠ°Π·Π±ΠΈΡΠ° Π΄Π°Π»ΠΈ Π΅ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π» ΡΡΠΈΠ² Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΈ Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΡΠ½ΠΎΠ²ΠΎ.
- ΠΠ°Π½Π°ΡΡΠΊΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ: ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ°ΠΌΠΎ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ: Π·Π° ΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ°?
- Π’ΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡ: Π΄ΠΎΠ±Π°Π²Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ Π² Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΡΡ Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
- Π‘ΠΈΠ³ΡΡΠ½ΠΎΡΡ: ΠΈΠ·Π²Π»ΠΈΡΠ° JWT-ΡΠΎΠΊΠ΅Π½, ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΈ ΡΠΏΡΠ»Π½ΠΎΠΌΠΎΡΠ°Π²Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅.
Π’ΠΎΠ²Π° ΡΠ° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ (Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠΈ!), Π·Π° Π΄Π° Π²ΠΈ Π·Π°ΠΈΠ½ΡΡΠΈΠ³ΡΠ²Π°ΠΌ. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈΠΌ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ!
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° Istio
Istio ΡΠ»Π°Π²Ρ ΡΠ΅Π»ΠΈΡ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ°ΡΠΈΠΊ ΠΈ ΠΏΡΠΈΠ»Π°Π³Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π²ΠΌΡΠΊΠ²Π°ΠΉΠΊΠΈ Π² Π²ΡΠ΅ΠΊΠΈ pod ΡΠΌΠ½ΠΎ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠΎΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Data Plane, ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Control Plane.
Data Plane
ΠΠΌΡΠΊΠ½Π°ΡΠΈΡΠ΅ Π² pod-ΠΎΠ²Π΅ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π½Π° Istio Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΠΎΠΏΠΈΡΠΈ ΠΈ circuit breaker.

ΠΠ°ΠΊ retries ΠΈ circuit breaking ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Envoy
ΠΠ° ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ:
- Envoy (ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° ΠΏΡΠΎΠΊΡΠΈ, Π½Π°ΠΌΠΈΡΠ°ΡΠΎ ΡΠ΅ Π² sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΈ ΠΊΠ°ΡΠΎ β Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°) ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π΄ΠΎ ΠΏΡΡΠ²ΠΈΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΡΡΠ»ΡΠ³Π° B ΠΈ Π½Π°ΡΡΡΠΏΠ²Π° ΡΡΠΈΠ².
- Envoy Sidecar ΠΏΡΠ°Π²ΠΈ Π½ΠΎΠ² ΠΎΠΏΠΈΡ (retry). (1)
- ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΡΡΡ ΡΡΠΈΠ²Π° ΡΠ΅ Π²ΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΊΡΠΈΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Ρ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π»ΠΎ.
- Π’Π°ΠΊΠ° ΡΠ΅ ΠΎΡΠ²Π°ΡΡ Circuit Breaker ΠΈ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ. (2)
Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄ΡΡΠ³Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° Retry, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Circuit Breaking ΠΈ Service Discovery Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ X, Y ΠΈΠ»ΠΈ Z. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ ΠΎΡ ΠΊΡΡΠΈΡΡΠ° Π² Istio ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°.
Π‘ΡΡΠ°Ρ ΠΎΡΠ½ΠΎ! Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΡΠΏΡΠ°Π·Π½ΡΠ²Π°ΡΠ΅ Ρ Istio, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠΌΠ½Π΅Π½ΠΈΡ, ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ. ΠΠΊΠΎ ΡΠΎΠ²Π° Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΡΡΠΌΠ½Π΅Π½ΠΈΠ΅: Π½Π°ΠΈΡΡΠΈΠ½Π° Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΊΠΈΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΡΠ»ΡΡΠ°ΠΉ.
Π Π½Π°ΠΊΡΠ°Ρ, ΡΠ΅Π³Π° ΡΠ΅ ΠΏΠΎΠΏΠΈΡΠ°ΡΠ΅: "ΠΠ°ΡΡΡΠΎΠΉΠ²Π° Π»ΠΈ ΡΠ΅?"
Π‘Π΅Π³Π° ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π·Π° ΠΌΠΎΡΠ΅ β ΠΈ Π½Π΅ΠΊΠ° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Ρ Control Plane.
Control Plane
Π’ΠΎΠΉ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: Pilot, Mixer ΠΈ Citadel, β ΠΊΠΎΠΈΡΠΎ Π·Π°Π΅Π΄Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ Envoy Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°, ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ ΡΡΠ±ΠΈΡΠ°Ρ ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘Ρ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ, Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:

ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Control Plane Ρ Data Plane
Envoy (Ρ.Π΅. data plane) Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° (Custom Resource Definitions), ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ Istio ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π·Π° ΡΠ°Π·ΠΈ ΡΠ΅Π». ΠΠ° Π²Π°Ρ ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΡΡ Π² Kubernetes Ρ ΠΏΠΎΠ·Π½Π°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. Π‘Π»Π΅Π΄ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ, ΡΠΎΠ·ΠΈ ΡΠ΅ΡΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π²Π·Π΅Ρ ΠΎΡ control plane ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΊΡΠΌ Envoy.
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΊΡΠΌ Istio
ΠΠΏΠΈΡΠ°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊ Istio Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ° ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π½ΠΎ ΠΊΠ°ΠΊ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Ρ Istio?
Π§Π΅ΡΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈΠΌ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π·Π° ΠΏΡΠΈΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° Istio ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±ΡΠ΅, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π½Π° ΡΠΈΠ±ΠΈΡΠ΅ β Π·Π° Π²ΠΎΠ΄Π°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΈ Π·Π°Π΄Π°Π²Π°Ρ Π²ΡΠΏΡΠΎΡΠ°: "ΠΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ Π²ΠΎΠ΄Π°ΡΠ°?".

ΠΠ»ΡΡΡΡΠ°ΡΠΈΡ : β ΠΠ°ΠΊ Π΅ Π²ΠΎΠ΄Π°ΡΠ°? β ΠΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ Π²ΠΎΠ΄Π°ΡΠ°?
Π’Π°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ ΡΠ»Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° Istio, ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π² Π½Π΅Π³ΠΎ, ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ, Π° ΡΠ»Π΅Π΄ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ β Π²ΡΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΡΠ΅Π΄. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ΅ Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ Istio.
ΠΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ΅ΠΎΡΠΈΡ β Π½Π΅ΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΠΎΠ²Π° Π·Π½Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°!
Istio Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Istio ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠ»ΡΡΡΠ΅Ρ Kubernetes, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ°Π±ΠΎΡΡΡ 4 vCPU ΠΈ 8 GB RAM. ΠΠ° Π±ΡΡΠ·ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ ΡΠ»Π΅Π΄Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ°, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡ Google Cloud Platform, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½Π° Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ .
Π‘Π»Π΅Π΄ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Kubernetes ΡΡΠ΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° ΡΡΠΈΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Istio ΡΡΠ΅Π· ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Helm.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° 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Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π°Π½Π΅Π²Π΅ΡΠ½ΠΎ(Ρ.Π΅. mTLS ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ β Π±Π΅Π». ΠΏΡΠ΅Π².), Π·Π° Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈΠΌ Π½Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅; -
tracing.enabledΠ²ΠΊΠ»ΡΡΠ²Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Jaeger; -
kiali.enabledΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Kiali Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ ΡΡΠ°ΡΠΈΠΊΠ°; -
grafana.enabledΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Grafana Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
Π©Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
$ kubectl apply -f istio.yamlΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° Π½Π° Istio Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π°! ΠΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ pod'ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° istio-system ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΠ°Π²ΡΡΡΠ΅Π½ΠΎ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
$ kubectl get pods -n istio-systemΠ‘Π΅Π³Π° ΡΠΌΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π», ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Sentiment Analysis
Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π² Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ°ΡΠ° . Π’ΠΎ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, Π·Π° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Istio Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ΅ΡΠΈΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·Π°:
- Π‘Π΅ΡΠ²ΠΈΠ· SA-Frontend, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Reactjs;
- Π‘Π΅ΡΠ²ΠΈΠ· SA-WebApp, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π·Π° Sentiment Analysis;
- Π‘Π΅ΡΠ²ΠΈΠ· SA-Logic, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΌΠΈΡ ;
- Π‘Π΅ΡΠ²ΠΈΠ· SA-Feedback, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΎΡΠΎ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅.

ΠΠ° ΡΠ°Π·ΠΈ ΡΡ Π΅ΠΌΠ°, ΠΎΡΠ²Π΅Π½ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΈ Ingress Controller, ΠΊΠΎΠΉΡΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π² Kubernetes. Π Istio ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Ingress Gateway, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄Π²Π°Ρ.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΎΠΊΡΠΈ ΠΎΡ Istio
ΠΠ° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ Π² ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠΈ . Π Π½Π΅Π³ΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ΅ Π·Π° Kubernetes ΠΈ Istio.
ΠΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° sidecar-ΠΈ
ΠΠΌΡΠΊΠ²Π°Π½Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΡΡΠ½ΠΎ. ΠΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π²ΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅Ρ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Ρ ΠΈΠΌΠ΅ istio-injection=enabled, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Ρ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeledΠ‘Π΅Π³Π° Π²ΡΠ΅ΠΊΠΈ pod, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π³ΡΡΡΠ° Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅) ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΡΠ²ΠΎΡ sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ Π² ΡΠΎΠ²Π°, Π½Π΅ΠΊΠ° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΡΠ΅Π½Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ . Π ΡΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½ ΠΊΠΎΠ΄ΡΡ Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, Π·Π° Π΄Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΊΡΠΌ Auth0 Π·Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JWT ΡΠΎΠΊΠ΅Π½ Π² Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΊΡΠΌ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ ( ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ 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Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅, ΡΠ΅ pod-ΠΎΠ²Π΅ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΏΠΎ Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ»ΡΠ³Π° ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ sidecar), ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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
ΠΠΈΠ·ΡΠ°Π»Π½ΠΎ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:ΠΡΠΎΠΊΡΠΈ Envoy Π² Π΅Π΄ΠΈΠ½ ΠΎΡ pod-ΠΎΠ²Π΅ΡΠ΅

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°, ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π° Π΄ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Ingress Gateway
ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠΎΠ²Π° (ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°) Π΅ ΡΡΠ΅Π·
Π² Istio, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Π½Π° βΠ³ΡΠ°Π½ΠΈΡΠ°ΡΠ°β Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π·Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Istio, ΠΊΠ°ΡΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³. ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠΎΠ²Π° (ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°) Π΅ ΡΡΠ΅Π· ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΡ Ingress Gateway ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΠΎΡΡΠΎ Π³ΠΎ ΠΏΡΠΎΠ±ΡΡΠ²Π° Π½Π°Π²ΡΠ½, Π±ΡΡ Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° Π½Π° Istio. ΠΠ° Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈΡ IP Π°Π΄ΡΠ΅Ρ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅:
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ 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
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, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅ Π½Π°ΠΊΡΠ΄Π΅ Π΄Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. ΠΠ° ΡΠΎΠ²Π° ΡΠ° Π½ΡΠΆΠ½ΠΈ Virtual Services.
Π Π΅ΡΡΡΡ VirtualService
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, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° ΡΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈΡΠ΅, ΠΏΠΎΠΊΠ°Π·Π²Π°Π½ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° Ρ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ():
Π²ΠΈΠ΄: VirtualService ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ: ΠΈΠΌΠ΅: sa-external-services ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ: Ρ ΠΎΡΡΠΎΠ²Π΅: - "*" ΡΠ»ΡΠ·ΠΎΠ²Π΅: - http-gateway # 1 http: - ΠΌΠ°Ρ: - uri: ΡΠΎΡΠ½ΠΎ: \/ - uri: ΡΠΎΡΠ½ΠΎ: \/callback - uri: ΠΏΡΠ΅ΡΠΈΠΊΡ: \/static - uri: ΡΠ΅Π³Π΅ΠΊΡ: '^.*.(ico|png|jpg) ΠΠ°ΠΆΠ½ΠΎ:ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² ΡΠ°ΠΉΠ»Π°
- Π’ΠΎΠ·ΠΈ VirtualService ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΏΠΎΡΡΡΠΏΠ²Π°ΡΠΈ ΡΡΠ΅Π· http-gateway;
- Π
Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.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 ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° Istio, Kubernetes API ΡΡΡΠ²ΡΡΡΡ ΡΡΠ·Π΄Π°Π²Π° ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° 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β¦ ΠΈ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ , Π»ΠΎΠ³Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Ρ admin/admin. Π’ΡΠΊ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Istio, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠ±ΡΠ°Π½Π° ΠΏΡΠΈ ΠΏΡΠΈΡ Π²Π°ΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ "ΠΠΎΠΉ Ρ ΠΊΠΎΠ³ΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°?", "ΠΡΠΈ ΠΊΠΎΡ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ?" ΠΈ Ρ.Π½. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Kiali, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ β ΠΊΡΠΌ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅ Ρ Grafana.
Grafana: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅
Π‘ΡΠ±ΡΠ°Π½ΠΈΡΠ΅ Π² Istio ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π° Π² Prometheus ΠΈ ΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ Ρ Grafana. ΠΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Grafana, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ :
$ 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": "ΠΠ±ΠΈΡΠ°ΠΌ ΠΉΠΎΠ³ΠΎΠ±Π΅Π»Π°"}'; 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Π‘Π΅Π³Π° Π²Π»Π΅Π·ΡΠ΅ Π² ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app. ΠΠΊΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π΅ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² ΠΏΠ°Π΄Π°ΡΠΎΡΠΎ ΠΌΠ΅Π½Ρ β ΠΈΠ·Π²ΡΡΡΠ΅ΡΠ΅/ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ Π±ΡΡΠΎΠ½Π° Find Traces, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ β ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΡΡΠΊΠ° β ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ:
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°:
- ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΏΡΠΈΡΡΠΈΠ³Π° Π² istio-ingressgateway (ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π΅Π΄Π½Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Trace ID), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ»ΡΠ·ΡΡ Π½Π°ΡΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app.
- Π ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΠ΅ΠΌΠ° ΠΎΡ Envoy sidecar, ΡΡΠ·Π΄Π°Π²Π° ΡΠ΅ βΠ΄Π΅ΡΠ΅β Π² span (ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅) ΠΈ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° sa-web-app. ( β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ° Π² Jaeger, ΠΊΠΎΡΡΠΎ ΠΈΠΌΠ° ΠΈΠΌΠ΅, Π½Π°ΡΠ°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° ΠΈ Π½Π΅ΠΉΠ½Π°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ. Span'ΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ. ΠΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΈΡΡ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅Π½ Π³ΡΠ°Ρ ΠΎΡ span'ΠΎΠ²Π΅ ΠΎΠ±ΡΠ°Π·ΡΠ²Π° trace. β ΠΏΡΠΈΠΌ. Π±Π΅Π».)
- Π’ΡΠΊ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Π° sentimentAnalysis. Π’Π΅Π·ΠΈ ΡΡΠ°ΡΠ΅ΡΠ° Π²Π΅ΡΠ΅ ΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Ρ.Π΅. Π·Π° ΡΡΡ Π±ΡΡ Π° Π½ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°.
- Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΡΠ° POST-Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² sa-logic. Trace ID ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ ΠΎΡ sa-web-app.
- β¦
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠ° 4 ΡΡΡΠΏΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ Istio, ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
(A) ΠΠ° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Istio; (B) ΠΠ° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅Istio ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π·Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ span'ΠΎΠ²Π΅ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ sidecar ΠΈ Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π±Π΅Π· ΡΠ°Π±ΠΎΡΠ° Ρ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Π² ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΏΡΠ»Π½ΠΈΡΡ ΠΏΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π³ΡΠ±Π΅Π½.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ (ΠΏΡΠ΅Π΄Π°Π²Π°Ρ) ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈ:
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Β»: , ;
- «»;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
route:
- destination:
host: sa-frontend # 2
port:
number: 80
ΠΠ°ΠΆΠ½ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠΈ:
- Π’ΠΎΠ·ΠΈ VirtualService ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π·Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΏΠΎΡΡΡΠΏΠ²Π°ΡΠΈ ΡΡΠ΅Π· http-gateway;
- Π
Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² ΡΠ°ΠΉΠ»Π°
sa-virtualservice-external.yaml, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π² SA-WebApp ΠΈ SA-Feedback, Π½ΠΎ Π±Π΅ΡΠ΅ ΡΡΠΊΡΠ°ΡΠ΅Π½ ΡΡΠΊ Π² ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΊΡΠ°ΡΠΊΠΎΡΡ.ΠΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° VirtualService ΡΡΠ΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅:
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° 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, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
β¦ ΠΈ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ , Π»ΠΎΠ³Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Ρ admin/admin. Π’ΡΠΊ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Istio, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠ±ΡΠ°Π½Π° ΠΏΡΠΈ ΠΏΡΠΈΡ Π²Π°ΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ "ΠΠΎΠΉ Ρ ΠΊΠΎΠ³ΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°?", "ΠΡΠΈ ΠΊΠΎΡ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ?" ΠΈ Ρ.Π½. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Kiali, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ β ΠΊΡΠΌ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅ Ρ Grafana.
Grafana: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅
Π‘ΡΠ±ΡΠ°Π½ΠΈΡΠ΅ Π² Istio ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π° Π² Prometheus ΠΈ ΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ Ρ Grafana. ΠΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Grafana, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ :
Π©ΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ ΠΌΠ΅Π½ΡΡΠΎ Home Π²Π»ΡΠ²ΠΎ Π³ΠΎΡΠ΅ ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Istio Service Dashboard Π² Π»Π΅Π²ΠΈΡ Π³ΠΎΡΠ΅Π½ ΡΠ³ΡΠ», Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΡΡ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app, Π·Π° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ:
Π’ΡΠΊ Π½ΠΈ ΠΎΡΠ°ΠΊΠ²Π° ΠΏΡΠ°Π·Π½ΠΎ ΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠΊΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ β ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½ΡΠΌΠ° Π΄Π° ΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠ°ΠΊΠΎΠ²Π°. ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠΎΠ²Π°Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»Π½ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π° Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡ β ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Prometheus Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ Grafana Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π΄ΡΠ°Π²Π΅ΡΠΎ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ°/Π²Π»ΠΎΡΠ΅Π½ΠΈΡΡΠ° Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΏΡΠ΅Π· Π²ΡΠ΅ΠΌΠ΅ΡΠΎ.
ΠΠ°ΠΊΡΠ°Ρ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² ΡΡΠ»ΡΠ³ΠΈΡΠ΅.
Jaeger: ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°
Π’ΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, Π·Π°ΡΠΎΡΠΎ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠΌΠ°ΠΌΠ΅, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ ΡΡΠ°Π²Π° Π΄Π° ΡΡΠΈΠ³Π½Π΅ΠΌ Π΄ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π°ΡΠ°. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΡΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
Π’ΠΈΠΏΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ΡΡΠΏΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ°ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠ΄Π²Π°, ΠΏΠ°Π΄Π° β Π² ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ°? ΠΡΡΠ²Π°ΡΠ° ΡΡΠ»ΡΠ³Π°? ΠΠ»ΠΈ Π²ΡΠΎΡΠ°ΡΠ°? Π Π² Π΄Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ β Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ°. ΠΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΠΎ ΡΡΠ΅ ΡΠ΅ ΡΠ»Π°Π²ΡΠ»ΠΈ Π² ΡΠ°ΠΊΠΎΠ²Π° Π·Π°Π½ΡΡΠΈΠ΅? ΠΠ°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΠΈ, Π° Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈβ¦
Π’ΠΎΠ²Π° Π΅ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ ΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° ΡΡΠ΅Π· ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, Π² ΠΊΠΎΠΈΡΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΡ ΡΠ΅ ΡΡΠΏΠΎΡΡΠ°Π²Ρ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΡΠΎ ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ:
ΠΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TraceIdΠ Istio ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Jaeger Tracer, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ OpenTracing API. ΠΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Jaeger ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
Π‘Π΅Π³Π° Π²Π»Π΅Π·ΡΠ΅ Π² ΠΈ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app. ΠΠΊΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π΅ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² ΠΏΠ°Π΄Π°ΡΠΎΡΠΎ ΠΌΠ΅Π½Ρ β ΠΈΠ·Π²ΡΡΡΠ΅ΡΠ΅/ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ Π±ΡΡΠΎΠ½Π° Find Traces, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ β ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΡΡΠΊΠ° β ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ:
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°:
- ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΏΡΠΈΡΡΠΈΠ³Π° Π² istio-ingressgateway (ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π΅Π΄Π½Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Trace ID), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ»ΡΠ·ΡΡ Π½Π°ΡΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app.
- Π ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΡΠ»Π°Π²Ρ ΠΎΡ Envoy sidecar, ΡΡΠ·Π΄Π°Π²Π° ΡΠ΅ "Π΄Π΅ΡΠ΅" Π² span (ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΡΡΠ°ΡΠ΅ΡΠ°) ΠΈ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° sa-web-app. ( β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ° Π² Jaeger, ΠΈΠΌΠ°ΡΠ° ΠΈΠΌΠ΅, Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° ΠΈ Π½Π΅ΠΉΠ½Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ. Span-ΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ. ΠΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΈΡΡ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅Π½ Π³ΡΠ°Ρ ΠΎΡ span-ΠΎΠ²Π΅ ΠΎΠ±ΡΠ°Π·ΡΠ²Π° trace. β Π±Π΅Π». ΠΏΡΠ΅Π².)
- Π’ΡΠΊ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Π° sentimentAnalysis. Π’Π΅Π·ΠΈ ΡΡΠ°ΡΠ΅ΡΠ° Π²Π΅ΡΠ΅ ΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Ρ.Π΅. Π·Π° ΡΡΡ Π±ΡΡ Π° Π½ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°.
- Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΡΠ° POST-Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² sa-logic. Trace ID ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ ΠΎΡ sa-web-app.
- β¦
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠ° 4 ΡΡΡΠΏΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ Istio, ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
(A) ΠΠ° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Istio; (B) ΠΠ° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅Istio ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π·Π°Π³Π»Π°Π²ΠΈΡ Π·Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ span-ΠΎΠ²Π΅ Π² Π²ΡΠ΅ΠΊΠΈ sidecar ΠΈ Π³ΠΈ ΡΡΠ°Π½ΡΡΠ΅ΡΠΈΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π±Π΅Π· ΡΠ°Π±ΠΎΡΠ° Ρ Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ° Π²ΡΡΡΠ΅ Π² ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΏΡΠ»Π½ΠΈΡΡ ΠΏΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π³ΡΠ±Π΅Π½.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ (ΠΏΡΠ΅Π΄Π°Π²Π°Ρ) ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π³Π»Π°Π²ΠΊΠΈ:
Π’Π°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° Π½Π΅ Π΅ ΡΠ»ΠΎΠΆΠ½Π°, ΠΎΠ±Π°ΡΠ΅ Π·Π° ΡΠ»Π΅ΡΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΠ»ΡΠ³Π°ΡΠ° sa-web-app ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ RestTemplate ΠΏΡΠ΅Π΄Π°Π²Π° ΡΠ΅Π·ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, Π°ΠΊΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Jaeger ΠΈ OpenTracing Π² .
ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Sentiment Analysis Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Flask, Spring ΠΈ ASP.NET Core.
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π½Π° ΡΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΡ ΠΊΡΡΠΈΡΡΠ° (ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈ Β«ΠΎΡ ΠΊΡΡΠΈΡΡΠ°Β»), Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ Ρ ΡΠΈΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ°ΡΠΈΠΊ, ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΈ Ρ.Π½.!
ΠΡΠΈΠΌ. ΠΏΡΠ΅Π².: ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ ΠΏΠΎ Istio ΠΎΡ Rinor Maloku, ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Ρ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³ Π² Π±Π»ΠΈΠ·ΠΊΠΎ Π±ΡΠ΄Π΅ΡΠ΅. UPDATE (14 ΠΌΠ°ΡΡ): Π²Π΅ΡΠ΅ Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π°.
P.S. ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«ΠΠ°Π·Π°Π΄ ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ Ρ IstioΒ»: , ;
- «»;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com







