Π‘Π΅ΡΠ΅Π²ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Calico ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Ρ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Ρ
ΠΎΡΡΠΎΠ² Π½Π° ΠΆΠ΅Π»Π΅Π·Π΅, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΠΌΠ°ΡΠΈΠ½ ΠΈ podβΠΎΠ². ΠΡΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
namespace ΠΈΠ»ΠΈ Π±ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠΌΠΈ ΠΊ
ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Kubernetes ΠΈ Calico. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ
Calico
ΠΠ° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΠΊΠΎΠ³Π΄Π° 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 ΡΠΎΠ·Π΄Π°Π΅Ρ 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. Π¦ΠΈΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎΠΏΡΠΈΠΉ Π½ΠΈΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΈΡΡΠ°ΠΌ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΡΠ΅.
- Workload endpoint (pod) policy
- Host endpoint policy
- ΠΠΏΡΠΈΡ ApplyOnForward
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° PreDNAT
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° 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 β ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π½ΡΠΉ
Π§ΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠΉ
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°Π΄Π°Π΅ΡΠ΅ ΠΎΠΏΡΠΈΡ Β«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