Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes
Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ устроСна балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Kubernetes, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ стоит Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ балансировку Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ HTTP/2, gRPC, RSockets, AMQP ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹.Β 

НСмного ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ пСрСраспрСдСляСтся Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² KubernetesΒ 

Kubernetes прСдоставляСт Π΄Π²Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ абстракции для Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: сСрвисы (Services) ΠΈ развСртывания (Deployments).

РазвСртывания ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ сколько ΠΊΠΎΠΏΠΈΠΉ вашСго прилоТСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ разворачиваСтся ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ (Pod) ΠΈ Π΅ΠΌΡƒ назначаСтся IP-адрСс.

БСрвисы ΠΏΠΎ функциям ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для распрСдСлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΠΎ мноТСству ΠΏΠΎΠ΄ΠΎΠ².

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это выглядит.

  1. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΈΠΆΠ΅ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ экзСмпляра ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния ΠΈ балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. Балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ называСтся сСрвис (Service), Π΅ΠΌΡƒ присвоСн IP-адрСс. Π›ΡŽΠ±ΠΎΠΉ входящий запрос пСрСнаправляСтся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ²:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ развСртывания опрСдСляСт количСство экзСмпляров прилоТСния. Π’Π°ΠΌ практичСски Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ придСтся Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно ΠΏΠΎΠ΄:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  4. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρƒ присваиваСтся свой IP-адрСс:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

ПолСзно Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ сСрвисы ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ IP-адрСсов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ сСрвису, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· IP-адрСсов выбираСтся ΠΈΠ· списка ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ адрСс назначСния.

Π­Ρ‚ΠΎ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

  1. ΠŸΠΎΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ запрос curl 10.96.45.152 ΠΊ сСрвису:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. БСрвис Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… адрСсов ΠΏΠΎΠ΄ΠΎΠ² Π² качСствС ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. Π’Ρ€Π°Ρ„ΠΈΠΊ пСрСнаправляСтся ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρƒ:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈ бэкСнда, Ρ‚ΠΎ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ сСрвис, ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ.

Когда Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ выполняСт запрос ΠΊ бэкСнду, Π΅ΠΌΡƒ Π½Π΅Ρ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ, сколько ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ² обслуТиваСт бэкСнд: ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΎΠ΄ΠΈΠ½, ΠΈ Π΄Π΅ΡΡΡ‚ΡŒ, ΠΈ сто.

Π’Π°ΠΊΠΆΠ΅ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎΠ± адрСсах ΠΏΠΎΠ΄ΠΎΠ², ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… бэкСнд.

Когда Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ выполняСт запрос ΠΊ бэкСнду, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ IP-адрСс сСрвиса бэкСнда, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ измСняСтся.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит.

  1. Под 1 Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ бэкСнда. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ бэкСнда, ΠΎΠ½ выполняСт запрос ΠΊ сСрвису:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. БСрвис Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ² бэкСнда Π² качСствС адрСса назначСния:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ΄Π΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ΄Π° 1 ΠΊ ΠΏΠΎΠ΄Ρƒ 5, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ сСрвисом:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  4. Под 1 Π½Π΅ Π·Π½Π°Π΅Ρ‚, сколько ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ 5, спрятано Π·Π° сСрвисом:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Но ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ сСрвис распрСдСляСт запросы? Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ балансировка round-robin? Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ.Β 

Балансировка Π² сСрвисах Kubernetes

БСрвисы Kubernetes Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚. Для сСрвиса Π½Π΅ сущСствуСт процСсса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, зайдя Π½Π° Π»ΡŽΠ±ΡƒΡŽ Π½ΠΎΠ΄Ρƒ кластСра ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ netstat -ntlp.

Π’Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ смоТСтС Π½Π°ΠΉΡ‚ΠΈ IP-адрСс, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ сСрвису.

IP-адрСс сСрвиса Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² слоС управлСния, Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅, ΠΈ записан Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… β€” etcd. Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ адрСс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ β€” kube-proxy.
Kube-proxy ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список IP-адрСсов для всСх сСрвисов ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» iptables Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Π΅ кластСра.

Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° говорят: «Если ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ IP-адрСс сСрвиса, Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ адрСс назначСния запроса ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ²Β».

IP-адрСс сСрвиса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° ΠΈ Π½Π΅ обслуТиваСтся ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ процСссом, ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΌ этот ip-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° это.Β 

  1. Рассмотрим кластСр ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π½ΠΎΠ΄. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Ρ‹:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. БвязанныС ΠΏΠΎΠ΄Ρ‹, ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π±Π΅ΠΆΠ΅Π²Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, β€” это Ρ‡Π°ΡΡ‚ΡŒ сСрвиса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвис Π½Π΅ сущСствуСт ΠΊΠ°ΠΊ процСсс, ΠΎΠ½ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ сСрым Ρ†Π²Π΅Ρ‚ΠΎΠΌ:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ сСрвис ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· связанных ΠΏΠΎΠ΄ΠΎΠ²:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  4. Но сСрвис Π½Π΅ сущСствуСт, процСсса Π½Π΅Ρ‚. Как ΠΆΠ΅ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  5. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ запрос ΠΏΠΎΠΊΠΈΠ½Π΅Ρ‚ Π½ΠΎΠ΄Ρƒ, ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  6. ΠŸΡ€Π°Π²ΠΈΠ»Π° iptables Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ сСрвиса Π½Π΅Ρ‚, ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Π΅Π³ΠΎ IP-адрСс ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· IP-адрСсов ΠΏΠΎΠ΄ΠΎΠ², связанных с этим сСрвисом:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  7. Запрос ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ IP-адрСс Π² качСствС адрСса назначСния ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ обрабатываСтся:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  8. Π’ зависимости ΠΎΡ‚ сСтСвой Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ, запрос Π² ΠΈΡ‚ΠΎΠ³Π΅ достигаСт ΠΏΠΎΠ΄Π°:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Π£ΠΌΠ΅ΡŽΡ‚ Π»ΠΈ iptables Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ?

НСт, iptables ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ для балансировки.

Однако сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ псСвдобалансСр.

И ΠΈΠΌΠ΅Π½Π½ΠΎ это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² Kubernetes.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠΎΠ΄Π°, kube-proxy Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  1. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄ с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ 33%, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ.
  2. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄ с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ 50%, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ.
  3. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠΎΠ΄.

Вакая систСма ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ΄ выбираСтся с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ 33%.

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

И Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ 2 Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ послС ΠΏΠΎΠ΄Π° 1.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: iptables ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ статистичСский ΠΌΠΎΠ΄ΡƒΠ»ΡŒ со случайным распрСдСлСниСм. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ балансировки базируСтся Π½Π° случайном Π²Ρ‹Π±ΠΎΡ€Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сСрвисы, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π±ΠΎΠ»Π΅Π΅ интСрСсныС сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π”ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ соСдинСния Π² Kubernetes Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ HTTP-запрос ΠΎΡ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΊ бэкСнду обслуТиваСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ TCP-соСдинСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ открываСтся ΠΈ закрываСтся.

Если Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ отправляСт 100 запросов Π² сСкунду бэкСнду, Ρ‚ΠΎ открываСтся ΠΈ закрываСтся 100 Ρ€Π°Π·Π½Ρ‹Ρ… TCP-соСдинСний.

МоТно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса ΠΈ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Ссли ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ TCP-соСдинСниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… HTTP-запросов.

Π’ HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, называСмая HTTP keep-alive, ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС соСдинСния. Π’ этом случаС ΠΎΠ΄Π½ΠΎ TCP-соСдинСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ получСния мноТСства HTTP-запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²:

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΈ сСрвСр, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сконфигурированы ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС настройка проста ΠΈ доступна для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° языков программирования ΠΈ срСд.

Π’ΠΎΡ‚ нСсколько ссылок Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках:

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ keep-alive Π² сСрвисС Kubernetes?
Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄, ΠΈ бэкСнд ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ keep-alive.

Π£ нас ΠΎΠ΄Π½Π° копия Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈ Ρ‚Ρ€ΠΈ экзСмпляра бэкСнда. Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ TCP-соСдинСниС ΠΊ бэкСнду. Запрос достигаСт сСрвиса, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ² бэкСнда выбираСтся ΠΊΠ°ΠΊ адрСс назначСния. Под бэкСнда отправляСт ΠΎΡ‚Π²Π΅Ρ‚, ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ситуации, ΠΊΠΎΠ³Π΄Π° послС получСния ΠΎΡ‚Π²Π΅Ρ‚Π° TCP-соСдинСниС закрываСтся, сСйчас ΠΎΠ½ΠΎ поддСрТиваСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… HTTP-запросов.

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π΅Ρ‰Π΅ запросы Π½Π° бэкСнд?

Для пСрСсылки этих запросов Π±ΡƒΠ΄Π΅Ρ‚ задСйствовано ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ TCP-соСдинСниС, всС запросы ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΏΠΎΠ΄ бэкСнда, ΠΊΡƒΠ΄Π° ΠΏΠΎΠΏΠ°Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос.

Π Π°Π·Π²Π΅ iptables Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ?

НС Π² этом случаС.

Когда создаСтся TCP-соСдинСниС, ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ бэкСнда, ΠΊΡƒΠ΄Π° ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ TCP-соСдинСнию, ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables большС Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это выглядит.

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄ отправляСт запрос ΠΊ сСрвису:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. Π’Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ дальшС. БСрвиса Π½Π΅ сущСствуСт, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ запрос:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. Один ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ² бэкСнда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ Π² качСствС адрСса назначСния:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  4. Запрос достигаСт ΠΏΠΎΠ΄Π°. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ постоянноС TCP-соСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΠ΄Π°ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ установлСно:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  5. Π›ΡŽΠ±ΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎ ΡƒΠΆΠ΅ установлСнному соСдинСнию:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΎΡ‚ΠΊΠ»ΠΈΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ потСряли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ бэкСнда.

Π”Π°ΠΆΠ΅ Ссли Ρƒ вас Π² бэкСндС Π΄Π²Π° ΠΏΠΎΠ΄Π°, ΠΏΡ€ΠΈ постоянном соСдинСнии Ρ‚Ρ€Π°Ρ„ΠΈΠΊ всС врСмя Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ….

МоТно Π»ΠΈ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ?

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Kubernetes Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ постоянныС соСдинСния, эта Π·Π°Π΄Π°Ρ‡Π° возлагаСтся Π½Π° вас.

БСрвисы β€” это Π½Π°Π±ΠΎΡ€ IP-адрСсов ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ.

Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈΠ· сСрвиса ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ запросы ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎ постоянному соСдинСнию с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΠ΄ΠΎΠΌ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΠΌΠ΅ΠΆΠ΄Ρƒ этими соСдинСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ round-robin.

Или ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ балансировки.

Код Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° балансировку, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅:

  1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈΠ· сСрвиса.
  2. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ постоянноС соСдинСниС.
  3. Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… соСдинСний.
  4. РСгулярно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ список ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ старыС постоянныС соСдинСния Π² случаС измСнСния списка.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ.

  1. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄ отправлял запрос Π² сСрвис, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  2. НуТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ сСрвиса:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  3. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ список, сохранитС Π΅Π³ΠΎ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для соСдинСния с ΠΏΠΎΠ΄Π°ΠΌΠΈ:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

  4. Π’Ρ‹ сами ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚Π΅ Π·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

    Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Π’Π΅ΠΏΠ΅Ρ€ΡŒ появился вопрос: относится Π»ΠΈ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ HTTP keep-alive?

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

HTTP β€” Π½Π΅ СдинствСнный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ постоянныС TCP-соСдинСния.

Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ TCP-соСдинСниС Π½Π΅ открываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π»ΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· Π‘Π”.Β 

ВмСсто этого открываСтся ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ постоянноС TCP-соСдинСниС ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Если ваша Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Π° Π² Kubernetes ΠΈ доступ прСдоставляСтся Π² Π²ΠΈΠ΄Π΅ cСрвиса, Ρ‚ΠΎ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ описаны Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Одна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° большС, Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Kube-proxy ΠΈ Kubernetes Π½Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ соСдинСния. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ балансировкС запросов ΠΊ вашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π”, Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ доступа ΠΊ кластСру Π‘Π” MySQL ΠΈΠ· Node.js:

var mysql = require('mysql');
var poolCluster = mysql.createPoolCluster();

var endpoints = /* retrieve endpoints from the Service */

for (var [index, endpoint] of endpoints) {
Β  poolCluster.add(`mysql-replica-${index}`, endpoint);
}

// Make queries to the clustered MySQL database

БущСствуСт масса Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… постоянныС TCP-соСдинСния:

  • WebSockets and secured WebSockets
  • HTTP/2
  • gRPC
  • RSockets
  • AMQP

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ этих ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ².

Но Ссли эти ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Ρ‚Π°ΠΊ популярны, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚ стандартизованного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для балансировки? ΠŸΠΎΡ‡Π΅ΠΌΡƒ трСбуСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°? БущСствуСт Π»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Kubernetes?

Kube-proxy ΠΈ iptables созданы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ стандартных сцСнариСв использования ΠΏΡ€ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ Π² Kubernetes. Π­Ρ‚ΠΎ сдСлано для удобства.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π΅Π±-сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт REST API, Π²Π°ΠΌ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ β€” Π² этом случаС постоянныС TCP-соСдинСния Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой сСрвис Kubernetes.

Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ постоянныС TCP-соСдинСния, придСтся Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° бэкСнды. Kubernetes Π½Π΅ содСрТит Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° этот случай.

Однако, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Балансировка Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Π’ Kubernetes сущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ° сСрвисов:

  1. ClusterIP
  2. NodePort
  3. LoadBalancer
  4. Headless

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ сСрвиса Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Π±Π°Π·Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ IP-адрСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ kube-proxy для построСния ΠΏΡ€Π°Π²ΠΈΠ» iptables. Но Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ основа всСх сСрвисов β€” это сСрвис Ρ‚ΠΈΠΏΠ° headless.

Π‘ сСрвисом headless Π½Π΅ связан Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ IP-адрСс ΠΈ ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния списка IP-адрСсов ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ² связанных с Π½ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ² (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ).

ВсС сСрвисы Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° сСрвисС headless.

БСрвис ClusterIP β€” это headless сСрвис с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ дополнСниями:Β 

  1. Π‘Π»ΠΎΠΉ управлСния Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅ΠΌΡƒ IP-адрСс.
  2. Kube-proxy Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ kube-proxy ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· сСрвиса headless для балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Но ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΠΎ всСм прилоТСниям, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ Π² кластСрС?

Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ, Ρ‚ΠΎ такая Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠΉ. Однако Π΅ΡΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Service Mesh Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ стратСгия балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²ΠΏΠΎΠ»Π½Π΅ стандартна.

Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стартуСт, ΠΎΠ½ΠΎ:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список IP-адрСсов ΠΈΠ· сСрвиса.
  2. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡƒΠ» соСдинСний.
  3. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ обновляСт ΠΏΡƒΠ», добавляя ΠΈΠ»ΠΈ убирая ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос, ΠΎΠ½ΠΎ:

  1. Π’Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ доступноС соСдинСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, round-robin).
  2. ВыполняСт запрос.

Π­Ρ‚ΠΈ шаги Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ для соСдинСний WebSockets, ΠΈ для gRPC, ΠΈ для AMQP.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ эту Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² Π²Π°ΡˆΠΈΡ… прилоТСниях.

Однако вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвисныС сСтки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Istio ΠΈΠ»ΠΈ Linkerd.

Service Mesh дополняСт вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

  1. АвтоматичСски ΠΈΡ‰Π΅Ρ‚ IP-адрСса сСрвисов.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ соСдинСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ WebSockets ΠΈ gRPC.
  3. БалансируСт запросы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».

Service Mesh ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ кластСра, Π½ΠΎ ΠΎΠ½ довольно рСсурсоСмок. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ β€” это использованиС сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Netflix Ribbon, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… прокси, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Envoy.

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вопросы балансировки?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ балансировку Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° нСсколько сцСнариСв Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Если Ρƒ вас большС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Π΅ΠΌ сСрвСров, это Π½Π΅ такая большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ коннСктятся ΠΊ Π΄Π²ΡƒΠΌ сСрвСрам. Π”Π°ΠΆΠ΅ Ссли Π½Π΅Ρ‚ балансировки, ΠΎΠ±Π° сСрвСра Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ:

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

БоСдинСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ распрСдСлСны Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ сСрвСру, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ шанс, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° сСрвСра Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹.

Π§Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Ρ‚Π°ΠΊ это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ сцСнарий.

Если Ρƒ вас мСньшС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ большС сСрвСров, ваши рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ нСдостаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΈ появится ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ·ΠΊΠΎΠ΅ мСсто.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡΡ‚ΡŒ сСрвСров. Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π° постоянных соСдинСния ΠΊ Π΄Π²ΡƒΠΌ сСрвСрам ΠΈΠ· пяти.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ сСрвСры Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°Ρ‚ΡŒ:

Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… соСдинСний Π² Kubernetes

Если эти Π΄Π²Π° сСрвСра Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

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

БСрвисы Kubernetes созданы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ стандартных сцСнариСв Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Однако, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ постоянныС соСдинСния TCP, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, gRPC ΠΈΠ»ΠΈ WebSockets, сСрвисы ΡƒΠΆΠ΅ Π½Π΅ подходят. Kubernetes Π½Π΅ прСдоставляСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для балансировки постоянных TCP-соСдинСний.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ возмоТности балансировки Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Kubernetes aaS ΠΎΡ‚ Mail.ru.

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

  1. Π’Ρ€ΠΈ уровня Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π² Kubernetes ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.Β 
  2. Kubernetes Π² Π΄ΡƒΡ…Π΅ пиратства с шаблоном ΠΏΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ.
  3. Наш ΠΊΠ°Π½Π°Π» Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ΅ ΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ трансформации.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ