Когда Linux conntrack Π²Π°ΠΌ большС Π½Π΅ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰

Когда Linux conntrack Π²Π°ΠΌ большС Π½Π΅ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ соСдинСний (β€œconntrack”) являСтся основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ сСтСвого стСка ядра Linux. Она позволяСт ядру ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС логичСскиС сСтСвыС соСдинСния ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Ρ‚Π΅ΠΌ самым ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ вмСстС.

Conntrack β€” это ваТная функция ядра, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основных случаях:

  • NAT опираСтся Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ сonntrack, поэтому ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. НапримСр, ΠΊΠΎΠ³Π΄Π° pod обращаСтся ΠΊ service Kubernetes, балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ kube-proxy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ NAT для направлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ pod Π²Π½ΡƒΡ‚Ρ€ΠΈ кластСра. Conntrack записываСт, Ρ‡Ρ‚ΠΎ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ соСдинСния всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊ IP service Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ pod, ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ pod’ом бэкСнда, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ NAT-ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² pod ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» запрос.
  • Firewall’ы с отслСТиваниСм состояния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Calico, ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ сonntrack, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ β€œΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹ΠΉβ€ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² Π±Π΅Π»Ρ‹ΠΉ список. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, которая Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠΎΠ΅ΠΌΡƒ pod’у ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ IP-адрСсу» Π±Π΅Π· нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ для явного Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. (Π‘Π΅Π· этого Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ бСзопасноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² ΠΌΠΎΠΉ pod с любого IPΒ».)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, conntrack ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы (сниТая ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ стСка сСти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ пост Β«Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² kube-proxyΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρƒ conntrack Π΅ΡΡ‚ΡŒ свои ограничСния…

Π˜Ρ‚Π°ΠΊ, Π³Π΄Π΅ всС пошло Π½Π΅ Ρ‚Π°ΠΊ?

Π’Π°Π±Π»ΠΈΡ†Π° conntrack ΠΈΠΌΠ΅Π΅Ρ‚ настраиваСмый ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈ, Ссли ΠΎΠ½Π° заполняСтся, соСдинСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ достаточно свободного мСста, ΠΈ это Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ прСвратится Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ нСсколько сцСнариСв, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΠ± использовании Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack:

  • НаиболСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ случай, Ссли ваш сСрвСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ большоС количСство Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… соСдинСний. НапримСр, Ссли ваша Ρ‚Π°Π±Π»ΠΈΡ†Π° conntrack настроСна Π½Π° 128k записСй, Π½ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ > 128k ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π²Ρ‹ навСрняка ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ!
  • НСмного ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ случай: Ссли ваш сСрвСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ большоС количСство соСдинСний Π² сСкунду. Π”Π°ΠΆΠ΅ Ссли соСдинСния ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Linux Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 120с). НапримСр, Ссли ваша Ρ‚Π°Π±Π»ΠΈΡ†Π° conntrack настроСна Π½Π° 128 тыс. записСй ΠΈ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ 1100 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² сСкунду, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack, Π΄Π°ΠΆΠ΅ Ссли соСдинСния ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½Ρ‹ (128k / 120с = 1092 соСдинСний / с).

Π•ΡΡ‚ΡŒ нСсколько Π½ΠΈΡˆΠ΅Π²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… Π² эти ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΠ±Ρ€ΠΎΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack вашСго сСрвСра мноТСством ΠΏΠΎΠ»ΡƒΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… соСдинСний ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π°Ρ‚Π°ΠΊΠΈ Ρ‚ΠΈΠΏΠ° Β«ΠΎΡ‚ΠΊΠ°Π· Π² обслуТивании» (DOS). Π’ ΠΎΠ±ΠΎΠΈΡ… случаях conntrack ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΡƒΠ·ΠΊΠΈΠΌ мСстом Π² вашСй систСмС. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно для удовлСтворСния Π²Π°ΡˆΠΈΡ… потрСбностСй β€” ΠΏΡƒΡ‚Π΅ΠΌ увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ сокращСния Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ² conntrack (Π½ΠΎ Ссли Π²Ρ‹ сдСлаСтС это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с большими трудностями). Для Π΄Ρ€ΡƒΠ³ΠΈΡ… случаСв Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ conntrack для агрСссивного Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΎΠ΄ΠΈΠ½ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ SaaS ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΈΠΌΠ΅Π» ряд memcached-сСрвСров Π½Π° хостах (Π½Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…), ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» 50К+ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний Π² сСкунду.

Они экспСримСнтировали с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ conntrack, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ сокращали врСмя отслСТивания, Π½ΠΎ конфигурация Π±Ρ‹Π»Π° Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠžΠ—Π£, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ(порядка Π“Π‘Π°ΠΉΡ‚ΠΎΠ²!), Π° соСдинСния Π±Ρ‹Π»ΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ Ρ‡Ρ‚ΠΎ conntrack Π½Π΅ создавал своСго ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ потрСблСния ЦП ΠΈΠ»ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²).

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ ΠΊ Calico. Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Calico ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ conntrack для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΠΏΡ†ΠΈΡŽ doNotTrack). Π­Ρ‚ΠΎ обСспСчило ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ плюс Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности, прСдоставляСмый Calico.

На Ρ‡Ρ‚ΠΎ придСтся ΠΏΠΎΠΉΡ‚ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ conntrack?

  • Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ do-not-track, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ симмСтричны. Π’ случаС SaaS-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°: ΠΈΡ… прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌΠΎΠΉ Π·ΠΎΠ½Ρ‹ ΠΈ поэтому ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ сСтСвой ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π±Π΅Π»Ρ‹ΠΉ список Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΡΡ доступ ΠΊ memcached.
  • ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° do-not-track Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ соСдинСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² случаС Π²Π·Π»ΠΎΠΌΠ° memcached-сСрвСра с Π½Π΅Π³ΠΎ тСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· memcached-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ссли ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ исходный ΠΏΠΎΡ€Ρ‚. Однако, Ссли Π²Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ для своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² memcached, Ρ‚ΠΎ эти ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
  • ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° do-not-track примСняСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ расход рСсурсов CPU Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ. Но для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний этот расход ΡƒΡ€Π°Π²Π½ΠΎΠ²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ сокращСниСм расхода рСсурсов Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ conntrack. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π² случаС SaaS ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, количСство ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ соСдинСния Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ нСбольшим, поэтому Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ расход рСсурсов CPU ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ Π±Ρ‹Π» ΠΎΠΏΡ€Π°Π²Π΄Π°Π½.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ тСстам

ΠœΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ тСст Π½Π° ΠΎΠ΄Π½ΠΎΠΌ pod’Π΅ с memcached-сСрвСром ΠΈ мноТСством pod’ΠΎΠ² memcached-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π½ΠΎΠ΄Π°Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большоС количСство соСдинСний Π² сСкунду. Π‘Π΅Ρ€Π²Π΅Ρ€ с pod’ΠΎΠΌ memcached-сСрвСра ΠΈΠΌΠ΅Π» 8 ядСр ΠΈ 512k записСй Π² conntrack Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (стандартно настроСнный Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для хоста).
ΠœΡ‹ измСряли Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ: Π±Π΅Π· сСтСвой ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ; с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Calico ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ; ΠΈ Calico do-not-track ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ.

Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ тСста ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ количСство ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎ 4.000 Π² сСкунду, поэтому ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Π΅ потрСблСния CPU. Π—Π΄Π΅ΡΡŒ Π½Π΅ Π±Ρ‹Π»ΠΎ сущСствСнных ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ отсутствиСм ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Π½ΠΎ do-not-track ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ CPU ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 20% :

Когда Linux conntrack Π²Π°ΠΌ большС Π½Π΅ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ тСстС ΠΌΡ‹ запустили ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ соСдинСний, сколько ΠΌΠΎΠ³Π»ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ измСряли максимальноС количСство соСдинСний Π² сСкунду, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠ³ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ наш memcached-сСрвСр. Как ΠΈ оТидалось, Π² случаС β€œΠ±Π΅Π· политик” ΠΈ β€œΠΎΠ±Ρ‹Ρ‡Π½Π°Ρ политика” ΠΎΠ±Π° достигли Π»ΠΈΠΌΠΈΡ‚Π° conntrack Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 4,000 соСдинСний Π² сСкунду (512k / 120s = 4,369 соСдинСний/с). Π‘ do-not-track ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ отправляли 60,000 соСдинСний Π² сСкунду Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠœΡ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ это число, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² большСС количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ чувствуСм, Ρ‡Ρ‚ΠΎ этих Ρ†ΠΈΡ„Ρ€ ΡƒΠΆΠ΅ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ посыл этой ΡΡ‚Π°Ρ‚ΡŒΠΈ!

Когда Linux conntrack Π²Π°ΠΌ большС Π½Π΅ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰

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

Conntrack β€” это ваТная функция ядра. Он ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ выполняСт свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы. Однако, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сцСнариях, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·-Π·Π° conntrack ΠΏΠ΅Ρ€Π΅Π²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ прСимущСства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π΄Π°Π΅Ρ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ сцСнарии сСтСвыС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Calico ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ использованиС conntrack ΠΏΡ€ΠΈ этом ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сСтСвой бСзопасности. Для всСго ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° conntrack ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вашим Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰Π΅ΠΌ!

Π’Π°ΠΊΠΆΠ΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² нашСм Π±Π»ΠΎΠ³Π΅:

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