Π ΠΌΠΈΠ½Π°Π»ΠΎΡΠΎ Π Π°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° Service Mesh Istio, Π·Π°ΠΏΠΎΠ·Π½Π°Ρ ΠΌΠ΅ ΡΠ΅ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ ΠΌΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π²ΡΠΏΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ Istio. Π ΡΠ°Π·ΠΈ ΡΠ°ΡΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° tracing ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°.

ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ΄Π²Π° Π½Π°ΡΠΌ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π° Service Mesh, Π΅ tracing. Π Π½Π°ΠΈΡΡΠΈΠ½Π°, Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΏΡΠΎΠΊΡΠΈ ΡΡΡΠ²ΡΡ Π² Π²ΡΡΠΊΠ° Π²ΡΠ·Π΅Π» Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΏΡΠ΅Π· ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΡΠ΅Π»ΠΈΡΡ TCP ΡΡΠ°ΡΠΈΠΊ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΡΠ°Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΠΎΠ΄ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΠ΅ΠΊΠ° Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅.
ΠΠΈΡ Π½ΠΎΠΌΠ΅Ρ Π΅Π΄Π½ΠΎ: ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΡΡΡΠ²Π°Π½ΠΈΡ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ.
ΠΡΡΡΠ½ΠΎΡΡ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°ΠΌΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ ΡΡΡ ΡΡΡΠ΅Π»ΠΊΠΈ Π²ΡΠ·Π»ΠΈ Π½Π° Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ rate Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ (Π²ΡΡΡΠ½ΠΎΡΡ β ΡΠ°ΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π±Π°ΠΉΡΠΎΠ²Π΅ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π²ΡΠ΅ΠΌΠ΅). ΠΠ±Π°ΡΠ΅ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ Π½Π°ΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΠ»ΠΎΠΉ, ΠΊΠ°ΡΠΎ HTTP, gRPC, Redis ΠΈ Ρ.Π½. Π, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ tracing ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ rate Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, Π° Π½Π΅ rate Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅. ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ latency Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΏΠΎ Π½Π°ΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΠ°ΠΊΡΠ°Ρ, ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡΠ»Π½ΠΈΡ ΠΏΡΡ, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΎΡ Π²Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π² Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. Π’Π°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡΠΎΡΡΠ°.
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° tracing span-ΠΎΠ²Π΅ ΠΎΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π° Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π² Istio. ΠΠ°ΠΊΡΠΎ ΡΠΈ ΡΠΏΠΎΠΌΠ½ΡΠΌΠ΅ ΠΎΡ ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ, Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡ Istio ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π½Π°ΡΠ΅ΡΠ΅Π½ Mixer. ΠΠ±Π°ΡΠ΅, Π² ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ 1.0.* ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΠΏΡΠΎΠΊΡΠΈΡΠΎ ΡΡΡΠ²ΡΡΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΎΡ envoy proxy. Envoy proxy ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° tracing span-ΠΎΠ²Π΅ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° zipkin Π² Π±Π°Π·ΠΎΠ²ΠΈΡ ΡΠΈ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΡΠ³ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ, Π½ΠΎ ΡΠ°ΠΌΠΎ ΡΡΠ΅Π· ΠΏΠ»ΡΠ³ΠΈΠ½. Π‘ Istio ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π³ΠΎΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ envoy proxy, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°ΠΌΠΎ zipkin ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°. ΠΠΊΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Jaeger ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ tracing span-ΠΎΠ²Π΅ ΠΏΠΎ UDP, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΎΠ±ΡΠ°Π· Π½Π° istio-proxy. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° istio-proxy Π΅ Π½Π°Π»ΠΈΡΠ½Π°, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π² alpha Π²Π΅ΡΡΠΈΡ. ΠΠ°ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·Π±ΡΠ³Π°ΠΌΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΊΡΡΠ³ΡΡ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΈΠ΅ΠΌ Π½Π° tracing span-ΠΎΠ²Π΅ Π½Π°ΠΌΠ°Π»ΡΠ²Π°. ΠΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Zipkin ΠΈΠ»ΠΈ Jaeger, Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎ zipkin ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» (ΠΊΠΎΠ΅ΡΠΎ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ). Π‘Π°ΠΌΠΈΡΡ zipkin ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²ΡΡΠΊΠ° tracing ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΠΈΡΠ΅ ΠΏΠΎ HTTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΊΠΎΠ΅ΡΠΎ Π΅ Π΄ΠΎΡΡΠ° ΡΠΊΡΠΏΠΎ.
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΠΊΠ°Π·Π°Ρ , ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈΡ ΡΠ»ΠΎΠΉ. Π ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈΡΠΎ ΡΡΡΠ²ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠΎΡΡ Π΄ΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΠ΅Π³Π°. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Istio Π½Π°ΡΡΡΠΎΠΉΠ²Π° Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ plain TCP ΡΠΈΠΏ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½Π΅ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ΅ΠΉΡΠΎΠ²Π΅. ΠΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΡΡΠ΅ΠΉΡΠΎΠ²Π΅ΡΠ΅, ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΠ°ΠΊΠ°Π²Π° ΠΎΠΏΡΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ mesh config ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π΄Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ Π½Π° service ΡΡΡΠ½ΠΎΡΡΠΈΡΠ΅ Π² Kubernetes Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΠ΅ΡΠ²ΠΈΠ·Π°. Π’ΠΎΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
targetPort: 80
name: http
selector:
app: nginxΠΠΎΠΆΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΡΡΠ°Π²Π½ΠΈ ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ http-magic (Istio ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π΅ http ΠΈ ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΠΊΠ°ΡΠΎ http endpoint). Π€ΠΎΡΠΌΠ°ΡΡΡ Π΅: proto-extra.
ΠΠ° Π΄Π° Π½Π΅ ΠΏΠ°ΡΡΠΈΠΌ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΡΡΡΠ΅Π½ workaround: Π΄Π° ΠΏΠ°ΡΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Pilot Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ ΡΠΎΡΠ½ΠΎ . Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΠ°Π·ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅.
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π΄Π°Π»ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ Π΅ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π·Π°Π΄Π°Π΄Π΅Π½, ΡΡΡΠ±Π²Π° Π΄Π° Π²Π»Π΅Π·Π΅ΠΌ Π² ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΎΡ sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Ρ envoy proxy ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π·Π°ΡΠ²ΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° envoy Ρ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ /config_dump. Π ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΏΠΎΠ»Π΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π½ΡΠΆΠ½Π°ΡΠ° ΡΡΠ»ΡΠ³Π°. Π’ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Istio ΠΊΠ°ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΠΎΠ²Π°, ΠΊΡΠ΄Π΅ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠ° Π΄Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π² Istio ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (ΠΏΠΎΡΠ»Π΅ ΡΠ΅ Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌ Π² Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅), Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΡΠ»Π°Π³ serviceCluster. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΠΈΠΌ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½, ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ downward API Π½Π° kubernetes:
--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')
ΠΠΎΠ±ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠ²Π°, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π² envoy, ΠΈΠΌΠ° .
Π‘Π°ΠΌΠΈΡΡ endpoint Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° tracing span-ΠΎΠ²Π΅ ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π² ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° envoy proxy, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: --zipkinAddress tracing-collector.tracing:9411
ΠΠΈΡ Π½ΠΎΠΌΠ΅Ρ Π΄Π²Π΅: ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° Π½ΠΈΡΠΊΠ° ΡΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, ΡΠΎΠ²Π° Π½Π΅ Π΅ Π²ΡΡΠ½ΠΎ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅. ΠΠ°ΡΠΎ Π΅ ΡΠ°ΠΊΠ°?
Π Π°Π±ΠΎΡΠ°ΡΠ° Π΅ ΡΠ°ΠΌ, ΡΠ΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ istio-proxy Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ° Ρ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΎΡ ΡΡΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π°, Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡ Π²Π°ΡΠ° ΡΠ΅Π»ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°. Π HTTP envoy proxy ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ, ΠΏΠΎ ΠΊΠΎΠΈΡΠΎ envoy ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΏΠΎΡΠ°ΠΆΠ΄Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ ΡΡΠ»ΡΠ³ΠΈ. Π‘ΠΏΠΈΡΡΠΊ Π½Π° ΡΠ΅Π·ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ:
- x-request-id,
- x-b3-traceid,
- x-b3-spanid,
- x-b3-parentspanid,
- x-b3-sampled,
- x-b3-flags,
- x-ot-span-context.
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π΅Π΄ΠΈΠ½Π½Π° ΡΠΎΡΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ°ΠΊΠ°Π²Π° Π»ΠΎΠ³ΠΈΠΊΠ°, Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ. ΠΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π½ΡΠΌΠ° ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈ Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΡΠΎ ΡΠΎΠ²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π³ΠΎΠ»ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ΅Π· Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π²ΡΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°ΠΌΠΎ "Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π° ΠΏΠΎ Π½ΠΈΠ²ΠΎ". Π’ΠΎΠ΅ΡΡ, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠ»Π΅ΡΠ΅Π½Π½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½ΠΎ ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Π² Π΅Π΄ΠΈΠ½Π½ΠΈ Π²Π΅ΡΠΈΠ³ΠΈ Π½Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΏΡΠ΅Π· ΠΌΡΠ΅ΠΆΠ°ΡΠ°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Istio ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π½ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅, ΡΠ΅ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π²ΠΈ ΠΈ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Istio. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ (ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ envoy proxy) ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΠ²ΠΈΠ· ΠΊΡΠΌ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΠΈΠ·Π° (ΡΡΠ΅Π· header-ΠΈ, Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° HTTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ»). ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅Π·ΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π΄ΠΎΡΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅Π·ΠΈΡΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠΎΠ²Π΅.
Π ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ Π·Π° Service Mesh ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Istio β Π²ΠΈΡΠΎΠΊΠΎΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ sidecar ΠΏΡΠΎΠΊΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ Π½Π΅Π³ΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
