ΠΡΠ΅ΠΆΠ½ΠΈΠΎΡ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ Calico ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠΈΡΠΎΠΊ ΠΎΠΏΡΠ΅Π³ Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠΎ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π·Π° Π·Π°ΡΡΠΈΡΠ° Π½Π° Ρ
Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ Ρ
ΠΎΡΡΠΎΠ²ΠΈ, Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ. ΠΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ ΠΈΠ»ΠΈ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π°
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π° Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΠΈ Calico. ΠΠΊΠΎ Π½Π΅, ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ±Π°ΡΠ΅
ΠΠΌΠ΅ΡΠΈΠΊΠ°Π½
ΠΠ° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ, ΠΊΠΎΠ³Π° Calico ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° pod ΡΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° (Π²ΠΈΠ΄ΠΈ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌ ΠΏΠΎΠ΄ΠΎΠ»Ρ), Π³ΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° ΡΠΎ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ Π΅ΡΠ΅ΡΠ½Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ (veth). Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ ΠΎΠ΄ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° Π΄ΠΎΠ°ΡΠ° Π΄ΠΎ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΎΠ΄ ΠΎΠ²ΠΎΡ Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° Π½Π° ΠΈΡΡ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄ΠΎΠ°ΡΠ° ΠΎΠ΄ ΡΠΈΠ·ΠΈΡΠΊΠΈ ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Calico Π³ΠΈ ΠΈΠΌΠ΅Π½ΡΠ²Π° ΠΎΠ²ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΈ caliXXX. ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π΄ΠΎΠ°ΡΠ° ΠΏΡΠ΅ΠΊΡ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ, ΡΠΎΡ ΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· iptables ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΡ Π΄Π° Π΅ Π΅Π΄Π΅Π½ ΡΠΊΠΎΠΊ ΠΏΠΎΠ΄Π°Π»Π΅ΠΊΡ. ΠΠ°ΡΠΎΠ°, ΠΊΠΎΠ³Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π΄ΠΎΠ°ΡΠ° Π΄ΠΎ/ΠΎΠ΄ pod, ΡΠΎΡ ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ° ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ.
ΠΠ° ΡΠ°Π·ΠΎΠ» Kubernetes ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠΈ Calico, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ (veth) Π½Π° ΠΎΠ±Π΅ΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΠ² Π½Π°ΡΠΈΠ½. ΠΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° veth#10 (calic1cbf1ca0f8) Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ cnx-manager-* Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΊΠ°Π»ΠΈΠΊΠΎ.
[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 ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΠΊΠ°ΠΊΠΎ Π³ΠΈ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅? ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, Calico ΡΠΎΠ·Π΄Π°Π²Π° ΠΊΡΠΊΠΈ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠ½ΡΠΈΡΠΈ Π½Π° ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ iptables.
ΠΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΡΠΈΠ½ΡΠΈΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΎ iptables (ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΡ netfilter). ΠΠΎΠ³Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΏΡΠΈΡΡΠΈΠ³Π½ΡΠ²Π° ΠΏΡΠ΅ΠΊΡ ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ, ΡΠΎΡ ΠΏΡΠ²ΠΎ ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· ΡΠΈΠ½ΡΠΈΡΠΎΡ PREROUTING. ΠΠΎΡΠΎΠ° ΡΠ΅ Π΄ΠΎΠ½Π΅ΡΡΠ²Π° ΠΎΠ΄Π»ΡΠΊΠ° Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅, ΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΠΎΠ°, ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΊΡ INPUT (Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΠΎΠ½ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ) ΠΈΠ»ΠΈ FORWARD (Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΠΎΠ½ pod ΠΈΠ»ΠΈ Π΄ΡΡΠ³ ΡΠ°Π·ΠΎΠ» Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°). ΠΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· ΡΠΈΠ½ΡΠΈΡΠΎΡ OUTPUT, Π° ΠΏΠΎΡΠΎΠ° ΠΠΠ‘Π’Π ΠΠ£Π’ΠΠ ΠΠΠ ΠΏΡΠ΅Π΄ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ Π½ΠΈΠ· ΠΊΠ°Π±Π΅Π»ΠΎΡ.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° pod Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ Π΅Π½ΡΠΈΡΠ΅Ρ (ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ veth) Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° iptables. ΠΠ° ΡΠ΅Π·ΠΈΠΌΠΈΡΠ°ΠΌΠ΅:
- ΠΡΠ΅ΠΏΡΠ°ΡΠ΅Π½ΠΈΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ (Π½Π°Ρ, Π½Π°ΡΠΎΡΡΠ²Π°Π½ ΠΈΠ»ΠΈ Π΄ΠΎ/ΠΎΠ΄ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°) ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· ΡΠΈΠ½ΡΠΈΡΠΈΡΠ΅ ΠΠ ΠΠΠ ΠΠ£Π’ΠΠΠ - ΠΠΠΠ ΠΠ - ΠΠΠ‘Π’ΠΠ Π£Π’ΠΠ ΠΠΠ.
- Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π΄ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· ΡΠΈΠ½ΡΠΈΡΠΎΡ PREROUTING - ΠΠΠΠ.
- Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ ΠΎΠ΄ΠΈ ΠΏΡΠ΅ΠΊΡ ΡΠΈΠ½ΡΠΈΡΠΎΡ OUTPUT - POSTROUTING.
Calico ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΠΎ Π²ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π°Ρ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½ΠΈΠ· ΡΠΈΡΠ΅ ΡΠΈΠ½ΡΠΈΡΠΈ. ΠΠΌΠ°ΡΡΠΈ Π³ΠΎ ΡΠΎΠ° Π½Π° ΡΠΌ, Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ Calico. ΠΡΠΎΠ΅Π²ΠΈΡΠ΅ Π²ΠΎ ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΡΠΎ ΠΎΠΏΡΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π°Ρ Π½Π° Π±ΡΠΎΠ΅Π²ΠΈΡΠ΅ ΠΎΠ΄ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅.
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° (ΠΏΠΎΠ΄).
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ
- ΠΠΏΡΠΈΡΠ° ApplyOnForward
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° PreDNAT
- ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°
ΠΠ° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΊΡΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ (Kubernetes pods ΠΈΠ»ΠΈ OpenStack VMs), Π° ΠΏΠΎΡΠΎΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π³ΠΈ ΠΎΠΏΡΠΈΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΊΡΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ.
ΠΡΠ°ΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° (1)
ΠΠ²Π° Π΅ ΠΎΠΏΡΠΈΡΠ° Π·Π° Π·Π°ΡΡΠΈΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ kubernetes pods. Calico ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Kubernetes NetworkPolicy, Π½ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ - Calico NetworkPolicy ΠΈ GlobalNetworkPolicy. Calico ΡΠΎΠ·Π΄Π°Π²Π° ΡΠΈΠ½ΡΠΈΡ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π° (ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°) ΠΈ Π³ΠΈ Π·Π°ΠΊΠ°ΡΡΠ²Π° ΡΠΈΠ½ΡΠΈΡΠΈΡΠ΅ ΠΠΠΠ ΠΈ ΠΠΠΠΠ Π·Π° ΠΎΠ±Π΅ΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠ°Π±Π΅Π»Π°ΡΠ° Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΈΠ½ΡΠΈΡΠΎΡ ΠΠΠΠ ΠΠ.
ΠΡΠ°ΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ (2)
ΠΠΎΠΊΡΠ°Ρ CNI (ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ), ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Calico ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°ΡΡΠΈΡΠ° Π½Π° ΡΠ°ΠΌΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½. ΠΠΎ Calico, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΡΠΎ Π½Π°Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, Π±ΡΠΎΠ΅Π²ΠΈ Π½Π° ΠΏΠΎΡΡΠΈ. Π‘ΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ²ΠΎΡ Π΅Π½ΡΠΈΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½ΡΠ²Π° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΡΠ°Π±Π΅Π»Π° Π·Π° ΡΠΈΠ»ΡΡΠΈ Π²ΠΎ ΡΠΈΠ½ΡΠΈΡΠΈΡΠ΅ ΠΠΠΠ ΠΈ ΠΠΠΠΠ. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠ΄ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ, (2) ΡΠΈΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ/Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ. ΠΠ΄Π½ΠΎΡΠ½ΠΎ, Π°ΠΊΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ, ΡΠΎΠ° Π½Π΅ΠΌΠ° Π΄Π° Π²Π»ΠΈΡΠ°Π΅ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΡΡΠΎ ΠΎΠ΄ΠΈ Π΄ΠΎ/ΠΎΠ΄ Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ. ΠΠΎ, ΡΠΎΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ/ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π·Π° Π²Π°ΡΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Calico. ΠΠ²Π° Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅ΡΠ° Π³ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π° ΠΌΡΠ΅ΠΆΠ°. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ Π²Π°ΠΆΠ΅Π½ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ApplyOnForward (3)
ΠΠΏΡΠΈΡΠ°ΡΠ° ApplyOnForward Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ½Π° Π²ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° Calico Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΡΠ΅Π»ΠΈΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΡΡΠΎ ΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΡΡΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΡΠΎΡΠ»Π΅Π΄Π΅Π½ ΠΎΠ΄ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ. ΠΠ²Π° Π³ΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ»Π΅Π΄Π΅Π½ Π΄ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π° ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ΅ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ΠΎ ΠΌΠ΅ΡΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°. Calico Π±Π°ΡΠ° ΠΎΠ²Π°Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° Π·Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΊΠΎΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ PreDNAT ΠΈ Π½Π΅ ΡΠ΅ ΡΠ»Π΅Π΄Π°Ρ, Π²ΠΈΠ΄Π΅ΡΠ΅ Π³ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²ΠΈ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ApplyOnForward ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ Π²ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ ΡΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΠΎΡΡΠ²Π΅Ρ NAT.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΡΡΠ°ΡΠ° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΈ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΈ Π·Π° ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅, ΡΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° ApplyOnForward. Π‘Γ¨ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° ΠΏΠΎΡΡΠ΅Π±Π½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΈ ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° ΠΎΠ±Π΅ΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° (ΠΏΠΎΠ΄). Calico Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ Π·Π° Π΄Π° ΡΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π°ΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° Π΅ΡΠΈΠΊΠ΅ΡΠΈ, Π±Π΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° ΡΠΈΠΏΠΎΡ Π½Π° ΠΊΡΠ°ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° (Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΡΠΊΠ° ΡΠΎΡΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°).
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° PreDNAT (4)
ΠΠΎ Kubernetes, ΠΏΠΎΡΡΠΈΡΠ΅ Π½Π° Π΅Π½ΡΠΈΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ°Ρ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΎ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠΏΡΠΈΡΠ°ΡΠ° NodePorts ΠΈΠ»ΠΈ, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ (ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Calico), ΡΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠΏΡΠΈΠΈΡΠ΅ Cluster IP ΠΈΠ»ΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ IP. Kube-ΠΏΡΠΎΠΊΡΠΈ Π³ΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ° Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° Π΄ΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅ Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ»ΡΠ³Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ DNAT. Π‘ΠΎ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΎΠ²Π°, ΠΊΠ°ΠΊΠΎ Π³ΠΈ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΡΡΠΎ Π΄ΠΎΠ°ΡΠ° ΠΏΡΠ΅ΠΊΡ NodePorts? ΠΠ° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΡΠ΅Π΄ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΠ΄ DNAT (ΡΡΠΎ Π΅ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½:ΠΏΠΎΡΡ ΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ»ΡΠ³Π°), Calico ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π·Π° Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ°ΠΡΠ΅ΠΆΠ½Π°ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ βpreDNAT: ΡΠΎΡΠ½ΠΎβ.
ΠΠΎΠ³Π° Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ pre-DNAT, ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ (4) Π½Π° Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ - Π²ΠΎ ΡΠ°Π±Π΅Π»Π°ΡΠ° Π·Π° ΠΌΠ°Π³Π»ΠΈ Π½Π° Π»Π°Π½Π΅ΡΠΎΡ PREROUTING - Π½Π΅ΠΏΠΎΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅Π΄ DNAT. ΠΠ²Π΄Π΅ Π½Π΅ ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈΠΎΡ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΡΠ°Π½ΠΎ Π²ΠΎ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° preDNAT Π³ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π°Ρ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π° ΠΌΠ΅ΡΡ ΡΠ΅Π±Π΅.
ΠΠΎΠ³Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠΎ ΠΏΡΠ΅Π΄-DNAT, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈ Π·Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΈ Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ·ΠΈΠ½ΡΡΠ²ΠΎΡΠΎ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΡΡΡΠ»Π΅Π½ΠΎ. Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΎΠ·Π½Π°ΡΠ΅Π½ ΠΊΠ°ΠΊΠΎ βΠ΄ΠΎΠ·Π²ΠΎΠ»ΠΈβ Π²ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π΄-DNAT Π²Π΅ΡΠ΅ Π½Π΅ΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΎΠ΄ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° Ρ
ΠΎΡΡΠ΅Π½ΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ°, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΡΡΠΎ Π½Π΅ ΡΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΠΏΡΠ΅Π΄ ΠΠΠΠ’ ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈ Π½ΠΈΠ· ΠΏΡΠ΅ΠΎΡΡΠ°Π½Π°ΡΠΈΡΠ΅ ΡΠΈΠ½ΡΠΈΡΠΈ.
Calico Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΠΎΠΏΡΠΈΡΠ°ΡΠ° applyOnForward ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ preDNAT, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π° Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ. Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠΎΡΠΈ ΠΊΠΎΠ½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈ Π΄ΠΎ ΠΏΠΎΠ΄ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ ΡΠ°Π·ΠΎΠ».
ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° (5)
ΠΡΠ΅ΠΆΠΈΡΠ΅ ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Π°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ°Π·Π»ΠΈΠΊΠΈ Π²ΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ. ΠΠΎ Π½Π΅ΠΊΠΎΠΈ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠ°ΡΠ½ΠΈ Π²ΡΡΠΊΠΈ. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° conntrack (Π³Π»Π°Π²Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΠΎΡ ΠΎΡΠ°ΠΊ Linux) Π΄Π° ΠΎΡΡΠ°Π½Π΅ Π±Π΅Π· ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΎ, Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Linux, ΡΠ΅ ΡΡΠ΅Π±Π° ΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ contrack, ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° iptables Π·Π° Π΄Π° Π³ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡΠ΅ conntrack. ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π²ΠΎ Calico Π΅ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΈ ΠΏΠΎΠ΅ΡΠΈΠΊΠ°ΡΠ½Π° ΠΎΠΏΡΠΈΡΠ° Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΡΠ΅ Π²ΡΡΠΊΠΈΡΠ΅ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ±ΡΠ·ΠΎ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ²Π½ΠΈ
ΠΡΠΎΡΠΈΡΠ°Ρ Π³ΠΎ ΠΎΠ²Π°
ΠΠΎΠ³Π° ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° βdoNotTrack: trueβ Π²ΠΎ Calico globalNetworkPolicy, ΡΠ°Π° ΡΡΠ°Π½ΡΠ²Π° **Π½Π΅ΡΠ»Π΅Π΄Π΅Π½Π°** ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π½ΠΎ Π²ΠΎ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° Linux. ΠΠ»Π΅Π΄Π°ΡΡΠΈ Π³ΠΎ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅, Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠΈΠ½ΡΠΈΡΠΈΡΠ΅ PREROUTING ΠΈ OUTPUT Π²ΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½Π°ΡΠ° ΡΠ°Π±Π΅Π»Π° ΠΏΡΠ΅Π΄ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΈΡΠ°ΡΠ° (conntrack). ΠΠΎΠ³Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ ΡΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° Π½Π΅ΡΠ»Π΅Π΄Π΅Π½Π°, ΡΠΎΡ Π΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ Π΄Π° Π³ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΡΠ»Π΅Π΄Π΅ΡΠ΅ΡΠΎ Π½Π° Π²ΡΡΠΊΠ°ΡΠ° Π·Π° ΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ. Π’ΠΎΠ° Π·Π½Π°ΡΠΈ:
- ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° Π½Π° Π±Π°Π·Π° ΠΏΠΎ ΠΏΠ°ΠΊΠ΅Ρ. ΠΠ΅ ΠΏΠΎΡΡΠΎΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΎΠΊ). ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° Π²ΡΡΠΊΠΈ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ:
- ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΡΠΎ Π±Π°ΡΠ°ΡΠ° ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ, Π²ΠΈ ΡΡΠ΅Π±Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈ Π·Π° Π²Π»Π΅Π·Π΅Π½ ΠΈ Π·Π° ΠΈΠ·Π»Π΅Π· (Π±ΠΈΠ΄Π΅ΡΡΠΈ Calico ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ conntrack Π·Π° Π΄Π° Π³ΠΎ ΠΎΠ·Π½Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π·Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΊΠ°ΠΊΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½).
- ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ° Π½Π° Kubernetes (pods), Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ ΠΏΠΎΡΠ΄ΠΎΠ²Π½Π°ΡΠ° Π²ΡΡΠΊΠ° ΠΎΠ΄ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ°.
- NAT Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠΎ Π½Π΅ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ (Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π³ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ° NAT ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ΡΠΎ Π²ΠΎ conntrack).
- ΠΠΎΠ³Π° ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π°ΡΠ΅ Π½ΠΈΠ· ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ βΠ΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΠΈΡΠ΅β Π²ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° Π½Π΅ΡΠ»Π΅Π΄Π΅Π½ΠΎ, ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈ. ΠΠ²Π° ΡΠ΅ΡΠΈΡΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π½Π΅ Π΅ ΠΎΠ½Π° ΡΡΠΎ Π³ΠΎ ΡΠ°ΠΊΠ°ΡΠ΅, ΠΏΠ° Π·Π°ΡΠΎΠ° Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ ΡΠΎ Π½Π΅ΡΠ»Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ (ΠΈ Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π΄Π° ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° Π½ΠΈΠ· Π½ΠΎΡΠΌΠ°Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅).
- ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π½Π° ΡΠ°ΠΌΠΈΠΎΡ ΠΏΠΎΡΠ΅ΡΠΎΠΊ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΎΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Calico. ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠ° Π·Π° pod ΡΠΎ ΡΠ΅Π΄:1 ΠΈ Π½Π΅ΠΏΡΠΎΡΠ»Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠΎ ΡΠ΅Π΄:1000. ΠΠ΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π²Π°ΠΆΠ½ΠΎ. ΠΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Untracked ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° ΠΏΡΠ΅Π΄ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ°. ΠΠ΅ΡΠ»Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π³ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π°Ρ Π½Π°Π»ΠΎΠ³ΠΎΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΌΠ΅ΡΡ ΡΠ΅Π±Π΅.
ΠΠΈΠ΄Π΅ΡΡΠΈ Π΅Π΄Π½Π° ΠΎΠ΄ ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° doNotTrack Π΅ Π΄Π° ΡΠ° ΡΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π½ΠΎ Π²ΠΎ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° Linux, Calico Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π½Π°Π·Π½Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΡΠ°ΡΠ° applyOnForward ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ doNotTrack. ΠΡΠ²ΡΠ½ΡΠ²Π°ΡΡΠΈ ΡΠ΅ Π½Π° Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π·Π°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° untracked(5) ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° ΠΏΡΠ΅Π΄ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΠΎΠ΄Π»ΡΠΊΠΈ Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅. Π‘ΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠΎΡΠΈ ΠΊΠΎΠ½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈ Π΄ΠΎ ΠΏΠΎΠ΄ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ ΡΠ°Π·ΠΎΠ».
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄
ΠΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π²ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° (Host endpoint, ApplyOnForward, preDNAT ΠΈ Untracked) Π²ΠΎ Calico ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠΈΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΠΎ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. Π Π°Π·Π±ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΊΠ°ΠΊΠΎ ΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ ΠΏΠΎΠΌΠ°Π³Π° Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ ΠΈ Π±Π΅Π·Π±Π΅Π΄Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ. Π‘ΠΎ Calico ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π³Π»ΠΎΠ±Π°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° Π΅ΡΠΈΠΊΠ΅ΡΠ° (Π³ΡΡΠΏΠ° ΡΠ°Π·Π»ΠΈ ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ) ΠΈ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠ²Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΡΠΈΡΠ΅ Π·Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ ΠΈ ΠΌΡΠ΅ΠΆΠ΅Π½ Π΄ΠΈΠ·Π°ΡΠ½ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π·Π°ΡΡΠΈΡΠ°Ρ βΡΓ¨β (Π²ΠΈΠ΄ΠΎΠ²ΠΈ Π½Π° ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ°) ΠΎΠ΄Π΅Π΄Π½Π°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΡΠ°Π·ΠΈΠΊ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Calico.
ΠΡΠΈΠ·Π½Π°Π½ΠΈΠ΅: ΠΠΈ ΡΠ°ΠΊΠ°Π» Π΄Π° ΡΠ΅ Π·Π°Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ°ΠΌ
ΠΠ·Π²ΠΎΡ: www.habr.com