ืชืืกืฃ ืืจืฉืช ืฉื Calico ืืกืคืง ืืืืื ืจืื ืฉื ืืืื ืืืช ืจืฉืช ืขื ืชืืืืจ ืืืื ืืืื ื ืขื ืืืจืื ืืืืจื, ืืืื ืืช ืืืจืืืืืืืช ืืชืจืืืืื. ื ืืชื ืืืืื ืืืื ืืืช ืื ืืชืื ืืจืื ืฉืืืช ืื ืืืืืช ืืืื ืืืช ืจืฉืช ืืืืืืืช ืืืื ืขืืื
ืืืืจ ืื ืื ืื ืฉืืฉ ืื ืืื ื ืืกืืกืืช ืืืฆื ืคืืขืืช ืืืื ืืืช ืืจืฉืช ืฉื Kubernetes ื-Calico. ืื ืื, ืื ืื ื ืืืืืฆืื ืื ืกืืช ืืช ืื
ืงืืืืงื
ืืจืื ืืืกืืกืืช, ืืืฉืจ Calico ืืืืจ ืคืื ืืจืฉืช (ืจืื ืชืจืฉืื ืืืื), ืืื ืืืืจ ืืืชื ืืืืจื ืืืืฆืขืืช ืืืฉืง Ethernet ืืืจืืืืื (veth). ืืชืขืืืจื ืฉื ืฉืืืช ืขื ืืื ืืคืื ืืืืขื ืืืืจื ืืืืืฉืง ืืืืืจืืืืื ืืื ืืืขืืืืช ืืืืชื ืืืคื ืืืืื ืืืืขื ืืืืฉืง ืจืฉืช ืคืืื. ืืืจืืจืช ืืืื, Calico ืฉืื ืืืืฉืงืื ืืื caliXXX. ืืืืืื ืฉืืชืขืืืจื ืืืืขื ืืจื ืืืืฉืง ืืืืืจืืืืื, ืืื ืขืืืจืช ืืจื iptables ืืืืื ืืชืจืืื ื ืืฆื ืืืจืืง ืงืคืืฆื ืืืช. ืืื, ืืืฉืจ ืชื ืืขื ืืืืขื ืื/ืืคืื, ืืื ืืืขืืจืช ืื ืงืืืช ืืืื ืฉื ืืืืจื.
ืืฆืืืช Kubernetes ืืืจืืฅ Calico, ืืชื ืืืื ืืืคืืช ืืืฉืง ืืืจืืืืื (veth) ืืขืืืก ืขืืืื ืืืืคื ืืื. ืืืืืื ืืืื, ืืชื ืืืื ืืจืืืช ืฉ-veth#10 (calic1cbf1ca0f8) ืืืืืจ ื-cnx-manager-* ืืืจืื ืืฉืืืช ืฉื calico-monitoring.
[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 ืืืฆืจ ืืืื ืืฉืจืฉืจืืืช ืฉืื ืืช ืฉื ื ืชืื ืขืืืื ืืื ืืช ืืืืฆืขืืช iptables.
ืืชืจืฉืื ืฉืืืื ืืฆืื ืืช ืืฉืจืฉืจืืืช ืืืขืืจืืืช ืืขืืืื ืื ืืช ื-iptables (ืื ืืชืช-ืืขืจืืช netfilter). ืืืฉืจ ืื ื ืืืืขื ืืจื ืืืฉืง ืจืฉืช, ืืื ืขืืืจืช ืชืืืื ืืจื ืฉืจืฉืจืช PREROUTING. ืืืืจ ืืื ืืชืงืืืช ืืืืืช ื ืืชืื, ืืืืชืืกืก ืขื ืื, ืืืืืื ืขืืืจืช ืืจื INPUT (ืืืคื ื ืืชืืืืืื ืืืจื) ืื FORWARD (ืืืคื ืื ืืคืื ืื ืืฆืืืช ืืืจ ืืจืฉืช). ืืืชืืืื ืืืงืืื, ืืืืืื ืขืืืจืช ืืจื ืฉืจืฉืจืช ื-OUTPUT ืืืืืจ ืืื POSTROUTING ืืคื ื ืฉื ืฉืืืช ืืืื.
ืฉืืื ืื ืฉืืคืื ืืื ืื ืืฉืืช ืืืฆืื ืืช (ืืืืืจืช ื-Veth) ืืืืื ืช ืขืืืื iptables. ืืืื ื ืกืื:
- ืชื ืืขื ืืืขืืจืช (ื ื, ืื ืืชืืช ืื ืื/ืืคืื) ืขืืืจืช ืืจืฉืชืืช PREROUTING - FORWARD - POSTROUTING.
- ืืชื ืืขื ืืชืืืื ืืืืจื ืืืงืืื ืขืืืจืช ืืจื ืฉืจืฉืจืช PREROUTING - INPUT.
- ืืชื ืืขื ืืชืืืื ืืืืจื ืืืงืืื ืขืืืจืช ืืจื ืฉืจืฉืจืช OUTPUT - POSTROUTING.
Calico ืืกืคืงืช ืืคืฉืจืืืืช ืคืืืืกื ืืืืคืฉืจืืช ืื ืืืืื ืคืืืืกืืช ืืื ืืจืฉืชืืช. ืขื ืืืช ืืืฉืืื, ืืืื ื ืกืชืื ืขื ืืคืฉืจืืืืช ืชืฆืืจืช ืืืืื ืืืช ืืฉืื ืืช ืืืืื ืืช ื-Calico. ืืืกืคืจืื ืืจืฉืืืช ืืืคืฉืจืืืืช ืืืื ืชืืืืื ืืืกืคืจืื ืืชืจืฉืื ืืืขืื.
- ืืืื ืืืช ื ืงืืืช ืงืฆื (ืชืจืืื) ืฉื ืขืืืก ืขืืืื
- ืืืื ืืืช ื ืงืืืช ืงืฆื ืืืจื
- ืืคืฉืจืืช ApplyOnForward
- ืืืื ืืืช PreDNAT
- ืืืื ืืืช ืืื ืืขืงื
ืืื ื ืชืืื ืืืืื ืช ืืืคื ืืืืช ืืืื ืืืช ืขื ื ืงืืืืช ืงืฆื ืฉื ืขืืืก ืขืืืื (Pods Kubernetes ืื OpenStack VMs), ืืืืืจ ืืื ื ืกืชืื ืขื ืืคืฉืจืืืืช ืืืืื ืืืช ืขืืืจ ื ืงืืืืช ืงืฆื ืืืจื.
ื ืงืืืืช ืงืฆื ืฉื ืขืืืก ืขืืืื
ืืืื ืืืช ื ืงืืืช ืงืฆื ืฉื ืขืืืก ืขืืืื (1)
ืืืื ืืคืฉืจืืช ืืืื ืขื ืชืจืืืื ื-kubernetes ืฉืื. Calico ืชืืืืช ืืขืืืื ืขื Kubernetes NetworkPolicy, ืื ืืื ืืกืคืงืช ืื ืืืื ืืืช ื ืืกืคืช - Calico NetworkPolicy ื-GlobalNetworkPolicy. Calico ืืืฆืจ ืฉืจืฉืจืช ืืื ืคืื (ืขืืืก ืขืืืื) ืืืืืจ ืืช ืฉืจืฉืจืืช ื-INPUT ืื-OUTPUT ืขืืืจ ืขืืืก ืืขืืืื ืืืืืช ืืกืื ืื ืฉื ืฉืจืฉืจืช FORWARD.
ืืืจื ื ืงืืืืช ืงืฆื
ืืืื ืืืช ื ืงืืืช ืงืฆื ืืืจื (2)
ืื ืืกืฃ ื-CNI (ืืืฉืง ืจืฉืช ืืืื), ืืืื ืืืช Calico ืืกืคืงืช ืืช ืืืืืืช ืืืื ืขื ืืืืจื ืขืฆืื. ื-Calico, ื ืืชื ืืืฆืืจ ื ืงืืืช ืงืฆื ืืืจื ืขื ืืื ืฆืืื ืฉืืืื ืฉื ืืืฉืง ืืืืจื ืืืืืืช ืืฆืืจื ืืกืคืจื ืืฆืืืืช. ืืืืคืช ืืืื ืืืช ืขืืืจ ืืฉืืช ืื ืืืฉืืช ืืืืฆืขืืช ืืืืช ืกืื ืื ืืฉืจืฉืจืช INPUT ื-OUTPUT. ืืคื ืฉื ืืชื ืืจืืืช ืืืชืจืฉืื, (2) ืื ืืืื ืขื ืชืืืืืื ืืงืืืืื ืืฆืืืช/ืืืจื. ืืืืืจ, ืื ืืชื ืืืฆืจ ืืืื ืืืช ืืืื ืขื ื ืงืืืช ืืงืฆื ืืืืจื, ืื ืื ืืฉืคืืข ืขื ืืชื ืืขื ืืขืืืจืช ืื/ืืืคืืืื ืฉืื. ืืื ืื ืื ืืกืคืง ืืืฉืง/ืชืืืืจ ืืืื ืืืกืืืช ืชื ืืขื ืขืืืจ ืืืืจื ืืืคืืืื ืฉืื ืืืืฆืขืืช ืืืื ืืืช Calico. ืื ืืคืฉื ืืืื ืืช ืชืืืื ื ืืืื ืืืืื ืืืช ืขืืืจ ืจืฉืช ืืืจืืื ืืช. ืืืืจืช ืืืื ืืืช ื ืงืืืช ืงืฆื ืืืจื ืืื ืืฉืคืจ ืืช ืืืืืช ืืืฉืืืืืช ืืื ืืงืจื ืฉืืืืฉ ืืฉืื ื ืืกืฃ.
ืืืื ืืืช ApplyOnForward (3)
ืืืคืฉืจืืช ApplyOnForward ืืืื ื ืืืืื ืืืช ืืจืฉืช ืืืืืืืืช ืฉื Calico ืืื ืืืคืฉืจ ืืืืื ืืืื ืืืช ืขื ืื ืืชืขืืืจื ืืขืืืจืช ืืจื ื ืงืืืช ืืงืฆื ืืืืจื, ืืืื ืชืขืืืจื ืฉืชืืขืืจ ืขื ืืื ืืืืจื. ืื ืืืื ืชืขืืืจื ืืืืขืืจืช ืืคืื ืืืงืืื ืื ืืื ืืงืื ืืืจ ืืจืฉืช. Calico ืืืจืฉืช ืฉืืืืจื ืื ืชืืื ืืืคืขืืช ืขืืืจ ืืืื ืืืช ืืืฉืชืืฉืช ื-PreDNAT ืืืืชื ืืขืงื, ืขืืื ืืกืขืืคืื ืืืืื. ืื ืืกืฃ, ApplyOnForward ืืืื ืืฉืืฉ ืื ืืืืจ ืชืขืืืจืช ืืืจื ืืืงืจืื ืืื ื ืขืฉื ืฉืืืืฉ ืื ืชื ืืืจืืืืื ืื ืชืืื ื NAT.
ืฉืื ืื ืฉืื ืืชื ืฆืจืื ืืืืื ืืช ืืืชื ืืืื ืืืช ืจืฉืช ืื ืขื ืชืืืืืื ืืืจื ืืื ืขื ืชืจืืืืื, ืื ืืื ื ืฆืจืื ืืืฉืชืืฉ ืืืคืฉืจืืช ApplyOnForward. ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืืฆืืจ ืชืืืืช ืขืืืจ ื ืงืืืช ืืงืฆื ืืืืจื ืื ืงืืืช ืืงืฆื ืื ืืจืฉืช ืฉื ืขืืืก ืืขืืืื (ืคืื). Calico ืืืื ืืกืคืืง ืืื ืืืืืฃ ืืืื ืืืช ืืืืืกืกืช ืขื ืชืืืืืช, ืืื ืงืฉืจ ืืกืื ื ืงืืืช ืืงืฆื (ื ืงืืืช ืืืจื ืื ืขืืืก ืขืืืื).
ืืืื ืืืช PreDNAT (4)
ื-Kubernetes, ื ืืชื ืืืฉืืฃ ืืฆืืืืช ืฉื ืืฉืืช ืฉืืจืืช ืืืฆืื ืืช ืืืืฆืขืืช ืืคืฉืจืืช NodePorts ืื, ืืืืืคืื (ืืขืช ืฉืืืืฉ ื-Calico), ืขื ืืื ืคืจืกืื ืฉืืื ืืืืฆืขืืช ืืคืฉืจืืืืช Cluster IPs ืื External IPs. Kube-proxy ืืืื ืชืขืืืจื ื ืื ืกืช ืืงืฉืืจื ืืฉืืจืืช ืืชืจืืืืื ืฉื ืืฉืืจืืช ืืืงืืื ืืืืฆืขืืช DNAT. ืืืชืืฉื ืืื, ืืืฆื ืืืืคืื ืืืื ืืืช ืขืืืจ ืชืขืืืจื ืืืืืขื ืืจื NodePorts? ืืื ืืืืืื ืฉืืืืื ืืืช ืืื ืืืืฉืื ืืคื ื ืฉืืชืขืืืจื ืืขืืืืช ืขื ืืื DNAT (ืฉืืื ืืืคืื ืืื host:port ืืฉืืจืืช ืืืชืืื), Calico ืืกืคืงืช ืคืจืืืจ ืขืืืจ GlobalNetworkPolicy ืื ืงืจื "preDNAT: true".
ืืืฉืจ ืงืื-DNAT ืืืคืขื, ืืืื ืืืช ืื ืืืืฉืืช ื-(4) ืืชืจืฉืื - ืืืืืช ืืื ืื ืฉื ืฉืจืฉืจืช PREROUTING - ืืืื ืืคื ื DNAT. ืืกืืจ ืืจืืื ืฉื ืืืืื ืืืช ืื ืืชืงืืื ืืื, ืืืืืื ืฉืืืืฉืื ืฉื ืืืื ืืืช ืืื ืืชืจืืฉ ืืจืื ืืืชืจ ืืืงืื ืื ืชืื ืขืืืื ืืชืขืืืจื. ืขื ืืืช, ืืืื ืืืช preDNAT ืืืืืช ืืช ืกืืจ ืืืืฉืื ืืื ื ืืืื ืขืฆืื.
ืืขืช ืืฆืืจืช ืืืื ืืืช ืขื Pre-DNAT, ืืฉืื ืืืงืคืื ืขื ืืชืขืืืจื ืฉืืชื ืจืืฆื ืืขืื ืืืืคืฉืจ ืืืืืช ืืช ืืจืื. ืชืขืืืจื ืืืกืืื ืช ื'ืืคืฉืจ' ืืืืื ืืืช ืืงืื-DNAT ืื ืชืืืืง ืขืื ืขื ืืื ืืืื ืืืช ื ืงืืืช ืืืืจื, ืืขืื ืฉืชืขืืืจื ืฉื ืืฉืืช ืืืืื ืืืช ืืงืื-DNAT ืชืืฉืื ืืจื ืืจืฉืชืืช ืื ืืชืจืืช.
Calico ืงืืขื ืืืื ืืืคืขืื ืืช ืืืืคืฆืื applyOnForward ืืขืช ืฉืืืืฉ ื-preDNAT, ืืืืืื ืฉืืืืืจื ืืขื ืืชืขืืืจื ืืจื ื ืืืจ. ื ืืชื ืืืคื ืืช ืืช ืืชื ืืขื ืืชืืืื ืืืืจื, ืื ืืืขืืืจ ืืืชื ืืคืื ืื ืืฆืืืช ืืืจ.
ืืืื ืืืช ืืื ืืขืงื (5)
ืืจืฉืชืืช ืืืืคืืืงืฆืืืช ืืืืืืช ืืืืืช ืืืืืื ืืืืืื ืืืชื ืืืืช. ืืืงืจืื ืงืืฆืื ืืื ืืกืืืืื, ืืืฉืืืื ืขืฉืืืื ืืืฆืืจ ืืืืืจืื ืจืืื ืืืืื ืงืฆืจ. ืื ืืืื ืืืจืื ื-conntrack (ืืจืืื ืืืื ืฉื ืืืกื ืืช ืืจืฉืช ืฉื ืืื ืืงืก) ืืืืืืจ ืืืืืจืื. ืืืืคื ืืกืืจืชื, ืืื ืืืคืขืื ืกืืืื ืืื ืฉื ืืืฉืืืื ืขื ืืื ืืงืก, ืชืฆืืจื ืืืืืืจ ืื ืืืฉืืืช ืืืืคื ืืื ื ืืช conntrack, ืื ืืืชืื ืืืื iptables ืืื ืืขืงืืฃ ืืช conntrack. ืืืื ืืืช ืืื ืืขืงื ื-Calico ืืื ืืคืฉืจืืช ืคืฉืืื ืืืขืืื ืืืชืจ ืื ืืชื ืจืืฆื ืืขืื ืืืืืจืื ืืืจ ืืื ืืืคืฉืจ. ืืืืืื, ืื ืืชื ืืฉืชืืฉ ืืืกืืื
ืงืจื ืืช ืื
ืืืฉืจ ืืชื ืืืืืจ ืืช ืืืคืฉืจืืช "doNotTrack: true" ื-Calico globalNetworkPolicy, ืืื ืืืคืืช ืืืืื ืืืช **ืื ืืขืงื** ืืืื ืืืืฉืืช ืืืงืื ืืืื ืืฆืื ืืจ ืขืืืื ืืื ืืช ืฉื ืืื ืืงืก. ืืืกืชืืืืช ืขื ืืืืืืจืื ืฉืืืขืื, ืืืื ืืืช ืืื ืืขืงื ืืืืืช ืืฉืจืฉืจืช PREROUTING ื-OUTPUT ืืืืื ืืืืืืืช ืืคื ื ืชืืืืช ืืขืงื ืืืืืืจ (conntrack). ืืืฉืจ ืื ื ืืืชืจืช ืขื ืืื ืืืืื ืืืช ืืืืชื ืืขืงืืช, ืืื ืืกืืื ืช ืืื ืืืฉืืืช ืืช ืืขืงื ืืืืืืจืื ืขืืืจ ืืืชื ืื ื. ืื ืืืืจ:
- ืืืืื ืืืช ืืื ืืขืงื ืืืืืช ืขื ืืกืืก ืืื ืื ื. ืืื ืืืฉื ืฉื ืืืืืจ (ืื ืืจืืื). ืืืืกืจ ืงืฉืจืื ืืฉ ืืื ืืฉืืืืช ืืฉืืืืช:
- ืื ืืชื ืจืืฆื ืืืคืฉืจ ืื ืชืขืืืจืช ืืงืฉื ืืื ืชืขืืืจืช ืชืืืื, ืืชื ืฆืจืื ืืื ืื ืขืืืจ ื ืื ืกืืช ืืื ืืืฆืืืช (ืืืืืื ืฉ-Calico ืืฉืชืืฉืช ืืืจื ืืื ื-conntrack ืืื ืืกืื ืืช ืชืขืืืจืช ืืชืืืื ืืืืชืจืช).
- ืืืืื ืืืช ืืื ืืขืงื ืื ืคืืขืืช ืขืืืจ ืขืืืกื ืขืืืื ืฉื Kubernetes (ืคืืืื), ืืืืืื ืฉืืืงืจื ืื ืืื ืืจื ืืขืงืื ืืืจ ืืืืืืจ ืืืืฆื ืืืคืื.
- NAT ืืื ื ืคืืขื ืืืืื ืขื ืื ืืช ืืื ืืขืงื (ืืืืจ ืฉืืงืจื ื ืืืืกื ืืช ืืืคืื ื-NAT ื-conntrack).
- ืืืฉืจ ืขืืืจืื ืืช ืืืื "ืืคืฉืจ ืืื" ืืืืื ืืืช ืืืืชื ืืืขืงื, ืื ืืืืืืืช ืืกืืื ื ืืืืชื ืืขืงื. ืื ืืืขื ืชืืื ืื ืื ืฉืืชื ืจืืฆื, ืื ืืฉืื ืืืืืช ืืืื ืกืืงืืืื ืืืื ืืืืืืืช ืืืืชืจืืช ืขื ืืื ืืืื ืืืช ืื ืืืขืงื (ืืืืคืฉืจ ืืจืื ืืชืขืืืจื ืืขืืืจ ืืจื ืืืื ืืืช ืจืืืื ืืืขืงื).
- ืืืื ืืืช ืืื ืืขืงื ืืืืืช ืืืฉ ืืชืืืืช ืฆืื ืืจ ืขืืืื ืืื ืืช. ืืฉืื ืืืื ืืืืื ืืืช ืืขืช ืืฆืืจืช ืืืื ืืืช Calico. ืืชื ืืืื ืืงืื ืืืื ืืืช ืคืื ืขื order:1 ืืคืืืืกื ืืื ืืขืงื ืขื order:1000. ืื ืื ืืฉื ื. ืืืืื ืืืช ืืื ืืขืงื ืชืืืฉื ืืคื ื ืืืืื ืืืช ืขืืืจ ืืคืื. ืคืืืืกืืช ืืื ืืขืงื ืืืืืืช ืฆื ืืืฆืืข ืจืง ืืื ื ืืืื ืขืฆืื.
ืืืืืื ืฉืืืช ืืืืจืืช ืฉื ืืืื ืืืช doNotTrack ืืื ืืืืืฃ ืืช ืืืืื ืืืช ืืฉืื ืืืงืื ืืืื ืืฆืื ืืจ ืขืืืื ืืื ืืช ืฉื ืืื ืืงืก, Calico ืืืืืืช ืืฆืืื ืืช ืืืืคืฆืื applyOnForward ืืขืช ืฉืืืืฉ ื-doNotTrack. ืืืชืืืืก ืืชืจืฉืื ืขืืืื ืืื ืืช, ืฉืื ืื ืฉืืืื ืืืช ืืืืชื ืืขืงื(5) ืืืืฉืืช ืืคื ื ืื ืืืืืืช ื ืืชืื. ื ืืชื ืืืคื ืืช ืืช ืืชื ืืขื ืืชืืืื ืืืืจื, ืื ืืืขืืืจ ืืืชื ืืคืื ืื ืืฆืืืช ืืืจ.
ืชืืฆืืืช ืฉื
ืืืงื ื ืืช ืืคืฉืจืืืืช ืืืืื ืืืช ืืฉืื ืืช (Host endpoint, ApplyOnForward, preDNAT ื-Untracked) ื-Calico ืืืืฆื ืื ืืืืฉืืืช ืืืืจื ื ืชืื ืขืืืื ืืื ืืช. ืืื ื ืืืฆื ืื ืคืืขืืื ืขืืืจืช ืืคืืชืื ืืืื ืืืช ืืขืืื ืืืืืื. ืขื Calico ืืชื ืืืื ืืืฉืชืืฉ ืืืืื ืืืช ืจืฉืช ืืืืืืืช ืืืื ืขื ืชืืืืช (ืงืืืฆื ืฉื ืฆืืชืื ืืชืจืืืืื) ืืืืืื ืืืื ืืืช ืขื ืคืจืืืจืื ืฉืื ืื. ืื ืืืคืฉืจ ืืืงืฆืืขื ื ืืืืื ืืขืืฆืื ืจืฉืช ืืืื ืื ืืืืช ืขื "ืืื" (ืกืืื ื ืงืืืืช ืงืฆื) ืืืช ืืืช ืืืืฆืขืืช ืฉืคืช ืืืื ืืืช ืืืช ืขื ืืืื ืืืช Calico.
ืชืืืืช: ืื ื ืจืืฆื ืืืืืืช
ืืงืืจ: www.habr.com