ΠΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².: Service mesh’ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ ΡΡΠ°Π»ΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅. Π₯ΠΎΡΡ Istio ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π° ΡΠ»ΡΡ
Ρ Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ², ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ, Π±ΡΠ΄ΡΡΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠΌ Π² ΡΠΌΡΡΠ»Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π°. ΠΠ΅ΠΌΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Rinor Maloku, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΡΡΠΏΠ½ΡΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π² ΡΠ΅Π»Π΅ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Orange Networks, Π½Π°ΠΏΠΈΡΠ°Π» Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΡΡΡ Π² Istio. ΠΠ°ΡΠΈΠ½Π°Π΅Ρ ΠΆΠ΅ ΠΎΠ½ ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΊΠ°Π· Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠΌΠ΅Π΅Ρ Istio ΠΈ ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π³Π»Π°Π·Π°ΠΌΠΈ.
Istio β Open Source-ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΏΡΠΈ ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· Google, IBM ΠΈ Lyft. ΠΠ½ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ
Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°Ρ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ: ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°Π³ΡΡΠ·ΠΊΠΈ;
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ;
- ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΡ: ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΡΡ Π±ΡΡΡ Β«ΠΌΠΈΠΊΡΠΎΒ». ΠΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ β Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°ΡΡ ΠΎΠ΄ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠ΅Π½Π½ΠΎΡΡΠ΅ΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²: ΠΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ?
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ: ΠΠ²Π° ΡΠΏΡΠΈΠ½ΡΠ°.ΠΠ: Π§ΡΠΎ?.. ΠΡΠΎ Π²Π΅Π΄Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ CRUD!
Π : Π‘Π΄Π΅Π»Π°ΡΡ CRUD β ΠΏΡΠΎΡΡΠ°Ρ ΡΠ°ΡΡΡ Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ Π½Π°ΠΌ Π΅ΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΡΡ Π½Π΅Π½Π°Π΄ΡΠΆΠ½Π°, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ΠΏΠ°ΡΡΠ΅ΡΠ½ circuit breaker Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ . ΠΡΡ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠΏΠ°Π»Π°, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡΡ ΠΈbulkheads (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΠΎΠ±ΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°Ρ ΡΠΌ. Π΄Π°Π»ΡΡΠ΅ Π² ΡΡΠ°ΡΡΠ΅ β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².), Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°, [β¦]ΠΠ: ΠΡ , Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ°Π²ΠΈΠΌ ΡΡΡ ΡΠΈΡΡ Π² ΡΠ΅ΡΠ²ΠΈΡ 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) ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΊ Istio
ΠΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Istio ΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅: ΠΊΠ°ΠΊ ΠΆΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ Istio?
Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠΈ Istio ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠ±Π°ΠΌ β ΠΎ Π²ΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ΅Π±Ρ: Β«Π§ΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ Π²ΠΎΠ΄Π°?Β».
ΠΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·ΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Istio ΡΠ΅ΡΠ²ΠΈΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² Π½ΡΠΌ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π° ΠΏΠΎΡΠ»Π΅ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² β ΡΠ½ΠΎΠ²Π° Π²ΡΡ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΠΎΡΠΎ. ΠΠΎΠ½ΡΡΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²Ρ ΠΏΠΎΡΠ΅ΡΡΠ΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Istio.
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ β Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΌ ΡΡΠΎ Π·Π½Π°Π½ΠΈΠ΅ Π² ΠΏΡΠ°ΠΊΡΠΈΠΊΡ!
Istio Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅
Istio ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Kubernetes, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ 4 vCPU ΠΈ 8 ΠΠ± RAM. Π§ΡΠΎΠ±Ρ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΈΠ· ΡΡΠ°ΡΡΠΈ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Google Cloud Platform, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½ΠΎΠ²ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Kubernetes ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Istio ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Helm.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Helm
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Helm Π½Π° ΡΠ²ΠΎΡΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Istio
Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΡΡΡ 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 Π² ΠΊΠ»Π°ΡΡΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°! ΠΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ pod’Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ istio-system
ΠΎΠΊΠ°ΠΆΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Running
ΠΈΠ»ΠΈ Completed
, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½ΠΈΠΆΠ΅:
$ kubectl get pods -n istio-system
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π³Π΄Π΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Sentiment Analysis
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Sentiment Analysis, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ²:
- Π‘Π΅ΡΠ²ΠΈΡ SA-Frontend, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Reactjs;
- Π‘Π΅ΡΠ²ΠΈΡ SA-WebApp, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Sentiment Analysis;
- Π‘Π΅ΡΠ²ΠΈΡ SA-Logic, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΌ
ΡΠ΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ· ; - Π‘Π΅ΡΠ²ΠΈΡ SA-Feedback, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ ΠΎ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΠ° ΡΡΠΎΠΉ ΡΡ
Π΅ΠΌΠ΅ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°ΠΊΠΆΠ΅ Ingress Controller, ΠΊΠΎΡΠΎΡΡΠΉ Π² Kubernetes ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ. Π Istio ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡ
ΠΎΠΆΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
Ingress Gateway, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡ.
ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΎΠΊΡΠΈ ΠΎΡ Istio
ΠΠ»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΡΡ
Π² ΡΡΠ°ΡΡΠ΅, ΡΠΊΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅Π±Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
ΠΡΡΠ°Π²ΠΊΠ° sidecar’ΠΎΠ²
ΠΡΡΠ°Π²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ. ΠΠ»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π²ΡΡΠ°Π²ΠΊΠΈ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΡΠ½ Π»Π΅ΠΉΠ±Π» istio-injection=enabled
, ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ pod, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (default
) ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²ΠΎΠΉ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΡΠΎΠΌ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ [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
Π Π°Π·Π²Π΅ΡΠ½ΡΠ² ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Ρ 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
ΠΡΡΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΎΠ³ΠΎ (ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅) β ΡΠ΅ΡΠ΅Π· 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
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, Ρ.ΠΊ. ΡΡΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ (
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
ΠΠ°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
- ΠΡΠΎΡ 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
β¦ ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅
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": "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
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π°
ΠΡΠΎΡ ΡΡΠ΅ΠΉΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ:
- ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² 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
ΠΡΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 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