Istio ΠΈ Kubernetes Π² production. Π§Π°ΡΡ‚ΡŒ 2. Tracing

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Service Mesh Istio, познакомились с систСмой ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ Π½Π° основныС вопросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Istio. Π’ этой части ΠΌΡ‹ посмотрим Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сбор tracing ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ сСти.

Istio ΠΈ Kubernetes Π² production. Π§Π°ΡΡ‚ΡŒ 2. Tracing

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ систСмным администраторам, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ слова Service Mesh β€” это tracing. И Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ добавляСм Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» сСти ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ прокси-сСрвСр, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ вСсь TCP-Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх сСтСвых взаимодСйствиях Π² сСти. К соТалСнию, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ появляСтся мноТСство нюансов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΈΡ….

Π—Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠ΄ΠΈΠ½: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ бСсплатно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΡ…ΠΎΠ΄Π°Ρ… ΠΏΠΎ сСти

На самом Π΄Π΅Π»Π΅, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ бСсплатно ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ лишь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ соСдинСнныС стрСлками ΡƒΠ·Π»Ρ‹ нашСй систСмы ΠΈ rate Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами (ΠΏΠΎ сути β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ количСство Π±Π°ΠΉΡ‚ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ). Однако Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв наши сСрвисы ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня, Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΊΠ°ΠΊ, HTTP, gRPC, Redis ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ трСйсинг ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ этим ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ, Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ 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 ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ, Ρ‡Ρ‚ΠΎ достаточно Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎ.

Как я ΡƒΠΆΠ΅ сказал, Ρ‚Ρ€Π΅ΠΉΡΠΈΡ‚ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня. А это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ proxy сСрвСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоят рядом с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ сСрвисом, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ взаимодСйствиС происходит сСйчас. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, 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 ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос Π½Π° ΠΏΠΎΡ€Ρ‚ admin интСрфСйса envoy с location /config_dump. Π’ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρƒ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ сСрвиса ΠΏΠΎΠ»Π΅ operation. Оно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Istio ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡƒΠ΄Π° происходит запрос. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΡΡ‚ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Istio Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (ΠΌΡ‹ Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ Π² нашСй tracing систСмС), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° этапС запуска sidecar ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ serviceCluster. НапримСр, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· downward API kubernetes:

--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ tracing Π² 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.

Если Ρƒ вас Сдиная Ρ‚ΠΎΡ‡ΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, Ρ‚ΠΎ всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π²Π°ΠΌ лишь Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ обновлСния этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρƒ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Но Ссли Ρƒ вас ΠΎΡ‡Π΅Π½ΡŒ гСтСрогСнная систСма ΠΈ Π½Π΅Ρ‚ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² ΠΏΠΎΡ…ΠΎΠ΄Π΅ ΠΈΠ· сСрвисов Π² сСрвисы ΠΏΠΎ сСти, Ρ‚ΠΎ это скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ большой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π‘Π΅Π· добавлСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ вся tracing информация Π±ΡƒΠ΄Π΅Ρ‚ лишь Β«ΠΎΠ΄Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉΒ». Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всС мСТсСрвисныС взаимодСйствия, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ склССны Π² Π΅Π΄ΠΈΠ½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ сСти.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Istio прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для сбора tracing ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ сСти, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для внСдрСния потрСбуСтся Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою систСму ΠΈ ΡƒΡ‡Π΅ΡΡ‚ΡŒ особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Istio. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π²Π° основных ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ envoy proxy) ΠΈ настройку проброса ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ связанности запросов Π² сСрвис ΠΎΡ‚ запросов ΠΈΠ· сСрвиса (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ header’ов, Π² случаС HTTP ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°). Когда эти вопросы Ρ€Π΅ΡˆΠ΅Π½Ρ‹, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ с сСти Π΄Π°ΠΆΠ΅ Π² ΠΎΡ‡Π΅Π½ΡŒ Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½Ρ‹Ρ… систСмах, написанных Π½Π° мноТСствС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языков ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ².

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΎ Service Mesh рассмотрим ΠΎΠ΄Π½Ρƒ ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Istio – большоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ sidecar прокси ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ обсудим, ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com