ПониманиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с Calico

ПониманиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с Calico

Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Calico прСдоставляСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ синтаксисом для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ хостов Π½Π° ΠΆΠ΅Π»Π΅Π·Π΅, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин ΠΈ pod’ов. Π­Ρ‚ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… namespace ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСтСвыми ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌΠΈ ΠΊ host endpoint (для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… нСпосрСдствСнно Π½Π° хостС β€” хостом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпосрСдствСнно сСрвСр ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина) ΠΈΠ»ΠΈ ΠΊ workload endpoint (для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° хостС). ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Calico ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹ бСзопасности для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡƒΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠ°ΠΊ preDNAT, unraracked ΠΈ applyOnForward. ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эти ΠΎΠΏΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΡΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Calico (preDNAT, unraracked ΠΈ applyOnForward), примСняСмых ΠΊ host endpoints, с Π°ΠΊΡ†Π΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² путях ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ iptabels).

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Kubernetes ΠΈ Calico. Если Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ basic network policy tutorial ΠΈ host protection tutorial ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Calico, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. ΠœΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ рассчитываСм, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ iptables Π² Linux.

Calico global network policy позволяСт Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» доступа ΠΏΠΎ labels (ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ хостов ΠΈ workloads/pods). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСстС Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ систСмы β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, систСму нСпосрСдствСнно Π½Π° ΠΆΠ΅Π»Π΅Π·Π΅ ΠΈΠ»ΠΈ инфраструктуру kubernetes. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ свой кластСр (Π½ΠΎΠ΄Ρ‹) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ сСтСвыС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΊ входящСму Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· сСрвис NodePorts ΠΈΠ»ΠΈ External IPs).

На Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΊΠΎΠ³Π΄Π° Calico ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ pod ΠΊ сСти (см. Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π½ΠΈΠΆΠ΅), ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊ хосту с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса Ethernet (veth). ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ pod’ом Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° хост с Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса ΠΈ обрабатываСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΎΡ‚ физичСского сСтСвого интСрфСйса. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Calico Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ эти интСрфСйсы caliXXX. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ поступаСт Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· iptables, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ pod находился Π½Π° расстоянии ΠΎΠ΄Π½ΠΎΠ³ΠΎ hop’a. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚/исходит ΠΎΡ‚ pod’a, ΠΎΠ½ пСрСсылаСтся (forwarded) с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния хоста.

На Kubernetes Π½ΠΎΠ΄Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Calico, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс (veth) с workload ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ veth#10 (calic1cbf1ca0f8) ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ cnx-manager- * Π² calico-monitoring namespace.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever
...

[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m                            ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...

ПониманиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с Calico

Учитывая, Ρ‡Ρ‚ΠΎ Calico создаСт veth-интСрфСйс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ workload, ΠΊΠ°ΠΊ ΠΎΠ½ примСняСт ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ? Для этого Calico создаСт Ρ…ΡƒΠΊΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ iptables.

На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² iptables (ΠΈΠ»ΠΈ подсистСмС netfilter). Когда ΠΏΠ°ΠΊΠ΅Ρ‚ поступаСт Ρ‡Π΅Ρ€Π΅Π· сСтСвой интСрфСйс, ΠΎΠ½ сначала ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ PREROUTING. Π—Π°Ρ‚Π΅ΠΌ принимаСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ Π½Π° основании этого ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· INPUT (Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° процСссы хоста), Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· FORWARD (Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° pod ΠΈΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½ΠΎΠ΄Ρƒ Π² сСти). Из локального процСсса ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ OUTPUT, Π° Π·Π°Ρ‚Π΅ΠΌ POSTROUTING ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΏΠΎ кабСлю.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ pod Ρ‚Π°ΠΊΠΆΠ΅ являСтся внСшним ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ veth) с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ iptables. ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ:

  • ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»Π°Π΅ΠΌΡ‹ΠΉ (forwarded) Ρ‚Ρ€Π°Ρ„ΠΈΠΊ (nat, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ Π² / ΠΈΠ· pod) ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ PREROUTING β€” FORWARD β€” POSTROUTING.
  • Π’Ρ€Π°Ρ„ΠΈΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ хост-процСсс ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ PREROUTING β€” INPUT.
  • Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ локального хост-процСсса ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ OUTPUT β€” POSTROUTING.

ПониманиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния сСтСвых ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с Calico

Calico прСдоставляСт ΠΎΠΏΡ†ΠΈΠΈ для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ для всСх Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ. ИмСя это Π² Π²ΠΈΠ΄Ρƒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ настройки ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, доступных Π² Calico. Π¦ΠΈΡ„Ρ€Ρ‹ Π² спискС ΠΎΠΏΡ†ΠΈΠΉ Π½ΠΈΠΆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ†ΠΈΡ„Ρ€Π°ΠΌ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΡˆΠ΅.

  1. Workload endpoint (pod) policy
  2. Host endpoint policy
  3. ΠžΠΏΡ†ΠΈΡ ApplyOnForward
  4. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° PreDNAT
  5. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Untracked

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с рассмотрСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ workload endpoints (pod’ам Kubernetes ΠΈΠ»ΠΈ OpenStack VMs), Π° Π·Π°Ρ‚Π΅ΠΌ рассмотрим ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ для host endpoints.

Workload Endpoints

Workload Endpoint Policy (1)

Π­Ρ‚ΠΎ опция для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²Π°ΡˆΠΈΡ… kubernetes pod’ов. Π’ Calico поддСрТиваСтся Ρ€Π°Π±ΠΎΡ‚Π° с Kubernetes NetworkPolicy, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ β€” Calico NetworkPolicy ΠΈ GlobalNetworkPolicy. Calico создаСт Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod’а (workload) ΠΈ Ρ…ΡƒΠΊΠΈ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ INPUT ΠΈ OUTPUT для workload ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ FORWARD.

Host Endpoints

Host Endpoint Policy (2)

Помимо CNI (container network interface), ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Calico ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ нСпосрСдствСнно хоста. Π’ Calico Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ host endpoint Π·Π°Π΄Π°Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΈΠ· интСрфСйса хоста ΠΈ, Ссли Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΡ€Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ для этой сущности достигаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ… INPUT ΠΈ OUTPUT. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, (2) ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ процСссам Π½Π° Π½ΠΎΠ΄Π΅/хостС. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π²Ρ‹ создали ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, которая примСняСтся ΠΊ host endpoint, ΠΎΠ½Π° Π½Π΅ повлияСт Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ ΠΊ/ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… pod’oΠ². Но Π·Π° счСт Π½Π΅Ρ‘ обСспСчиваСтся Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс/синтаксис для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° для вашСго хоста ΠΈ pod’ов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Calico. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс управлСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ для Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΉ сСти. Настройка host endpoint ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ для усилСния Π·Π°Ρ‰ΠΈΡ‚Ρ‹ кластСра β€” это Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ случай ΠΈΡ… использования.

ApplyOnForward Policy (3)

ΠžΠΏΡ†ΠΈΡ ApplyOnForward доступна Π² Calico global network policy, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΊΠΎ всСму Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ, проходящСму Ρ‡Π΅Ρ€Π΅Π· host endpoint, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ хостом (forwarded). Π­Ρ‚ΠΎΡ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя пСрСсылаСмый Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ pod ΠΈΠ»ΠΈ ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Ρ‘ Π² ΡΠ΅Ρ‚ΡŒ. Calico Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ для ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… PreDNAT ΠΈ untracked, см. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ApplyOnForward ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отслСТивания Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° хоста Π² случаях использования Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… NAT.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΊΠ°ΠΊ для хост-процСссов, Ρ‚Π°ΠΊ ΠΈ для pod’ов, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ ApplyOnForward. Π’Π°ΠΌ достаточно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ label для Π½ΡƒΠΆΠ½Ρ‹Ρ… hostendpoint ΠΈ workload endpoint (pod). Calico достаточно ΡƒΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π½Π° основании labels, нСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° endpoint (hostendpoint ΠΈΠ»ΠΈ workload).

PreDNAT Policy (4)

Π’ Kubernetes ΠΏΠΎΡ€Ρ‚Ρ‹ сущности service ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΊΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π°Ρ€ΡƒΠΆΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ†ΠΈΠΈ NodePorts ΠΈΠ»ΠΈ, ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ (ΠΏΡ€ΠΈ использовании Calico), ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ объявлСния ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ†ΠΈΠΈ Cluster IPs ΠΈΠ»ΠΈ External IPs. Kube-proxy балансируСт входящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, привязанный ΠΊ service, ΠΊ pod’ам ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… service, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ DNAT. Учитывая это, ΠΊΠ°ΠΊ Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ для Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· NodePorts? Π§Ρ‚ΠΎΠ±Ρ‹ эти ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ DNAT (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой сопоставлСниС хоста: ΠΏΠΎΡ€Ρ‚Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ service), Calico прСдоставляСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для globalNetworkPolicy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Β«preDNAT: trueΒ».

Когда pre-DNAT Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, эти ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² (4) Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ β€” Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ mangle Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ PREROUTING β€” нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ DNAT. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ порядок ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ (order) здСсь Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ происходит Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ preDNAT ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ порядок примСнСния (order) ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

ΠŸΡ€ΠΈ создании ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с pre-DNAT Π²Π°ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹ΠΌ. Π’Ρ€Π°Ρ„ΠΈΠΊ, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ β€˜allow’ Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ pre-DNAT большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ hostendpoint-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π°Π»Π΅ прохоТдСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ pre-DNAT ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΏΡƒΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ.
Calico сдСлал ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ applyOnForward ΠΏΡ€ΠΈ использовании preDNAT, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΏΡƒΠ½ΠΊΡ‚ назначСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½. Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° хост-процСсс, ΠΈΠ»ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° pod ΠΈΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½ΠΎΠ΄Ρƒ.

Untracked Policy (5)

Π‘Π΅Ρ‚ΠΈ ΠΈ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большиС различия Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… случаях прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ памяти Ρƒ conntrack (основного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сСтСвого стСка Linux). Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Linux Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ conntrack, ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ conntrack. Untracked policy Π² Calico β€” это Π±ΠΎΠ»Π΅Π΅ простой ΠΈ эффСктивный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ соСдинСния максимально быстро. НапримСр, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массивный memcache ΠΈΠ»ΠΈ Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDOS.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ blog post (ΠΈΠ»ΠΈ наш ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄) для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ использовании untracked policy.

Когда Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Β«doNotTrack: trueΒ» Π² Calico globalNetworkPolicy, ΠΎΠ½Π° становится **нСотслСТиваСмой** ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ΠΈ примСняСтся Π½Π° самом Ρ€Π°Π½Π½Π΅ΠΌ этапС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Linux. Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹ΡˆΠ΅, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ untracked ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ… PREROUTING ΠΈ OUTPUT Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ raw, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ отслСТиваниС соСдинСний (conntrack). Когда ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ untracked ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ, ΠΎΠ½ помСчаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ отслСТиваниС соСдинСния для этого ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚:

  • ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° untracked примСняСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. НСт понятия соСдинСния (ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°). ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ соСдинСний (connection) Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… послСдствий:
  • Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ запроса, Ρ‚Π°ΠΊ ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚Π²Π΅Ρ‚Π°, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΊΠ°ΠΊ для входящСго, Ρ‚Π°ΠΊ ΠΈ для исходящСго (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Calico ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ conntrack, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ).
  • ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° untracked Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для workload Kubernetes (pod’ов), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅Ρ‚ способа ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ исходящСС соСдинСниС ΠΈΠ· pod’а.
  • NAT Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ с нСотслСТиваСмыми ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ядро ​​хранит сопоставлСниС NAT Π² conntrack).
  • ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС» Π² untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ нСотслСТиваСмыС. Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, поэтому Π²Π°ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌ untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ (ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ большСй части Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ отслСТиваСмыС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ).
  • Untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Calico. Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° для pod’a с order:1 ΠΈ untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° с order:1000. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ. Untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° Π΄ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ для pod’a. Untracked-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΡΡ‚ΡŒ выполнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ doNotTrack являСтся ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° самом Ρ€Π°Π½Π½Π΅ΠΌ этапС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Linux, Calico Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ applyOnForward ΠΏΡ€ΠΈ использовании doNotTrack. ΠžΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° untracked (5) примСняСтся ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° хост-процСсс, ΠΈΠ»ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° pod ΠΈΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½ΠΎΠ΄Ρƒ.

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠœΡ‹ рассмотрСли Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ (Host endpoint, ApplyOnForward, preDNAT, ΠΈ Untracked) Π² Calico ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ПониманиС сути ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ эффСктивных ΠΈ бСзопасных ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Calico Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ global network policy, которая примСняСтся ΠΊ label (Π³Ρ€ΡƒΠΏΠΏΠ΅ Π½ΠΎΠ΄ ΠΈ pod’ов) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ позволяСт спСциалистам ΠΏΠΎ бСзопасности ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ сСти ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ сразу «всё» (Ρ‚ΠΈΠΏΡ‹ endpoints), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ язык ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ Calico.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ: Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ Π¨ΠΎΠ½Π° ΠšΡ€ΡΠΌΠΏΡ‚ΠΎΠ½Π° ΠΈ АлСкса ΠŸΠΎΠ»Π»ΠΈΡ‚Ρ‚Π° Π·Π° ΠΈΡ… ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π·Π° Ρ†Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

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