αααααα·ααΈαααα½ααααααΆα Calico αααααααΌααα½αααααΌααΆααααααααΆααααααααΆαααΆαα½αααΉαααΆαααααααααααααααα½αααααα½αααΎααααΈααΆαααΆααααΆαααΈαα αΆαααα αααΆαααΈααα·αααα·α αα·αααα αααααΆαααααΆαααααα’αΆα
ααααΌαααΆαα’αα»αααααα
αααα»α namespace α¬ααΆαααααΆααααααααΆαααααααα’αα»ααααα
αααα
α’ααααααααααααααααΆα’αααααΆαααΆααααααΉαααΆααΌαααααΆαα’αααΈααααααααααααΆααααααααΆα Kubernetes αα·α Calico ααααΎαααΆαα ααΎαα·αααΌα
ααααααααΎαααΌαααααΆαα±ααααΆαααααααΆα
ααΆααΈααΌα
αα ααααα·αααΌαααααΆα αα αααααα Calico ααααΆαααααα½ααα αααααΆα (ααΌαααΎαααααΆααααΆαααΆαααααα) ααΆααααΆααααΆαα αααΆαααΈααααααααΎα ααα»α αααααΆααα’ααΈααΊααα·ααα·αααα·α (veth) α α ααΆα ααααααααΆαααααΎαααααααααααααΆαααΈαααΈα ααα»α αααααΆαααα·αααα·ααααα αΎαααααΌαααΆαααααΎαααΆαααΆαααααααΌα ααααΆααΉαααΆααααΈα ααα»α αααααΆαααααααΆαααΆαααααααα ααΆαααααΆαααΎα Calico ααΆαααααααα ααα»α αααααΆααααΆααααα caliXXX α α αΆααααΆααααΈα ααΆα αααααΆααααα ααα»α αααααΆαααα·αααα·α ααΆααααααΆαα iptables ααΌα ααΆααααα·αααΎααααααΌαααΆαααααα ααααΆαα ααΌα ααααα αΎα αα ααααααα ααΆα αααααααα/ααΈαα ααΆααααΌαααΆααααααΌαααααααΈααααααααααααα αΆααααααα
αα ααΎααααΆαα Kubernetes αααααααΎαααΆα Calico α’αααα’αΆα ααααΌααααα ααα»α αααααΆαααα·αααα·α (veth) αα ααΉαααααα»αααΆαααΆαααΌα ααΆααααααα αααα»αα§ααΆα αααααΆαααααα α’αααα’αΆα ααΎαααΎαααΆ veth#10 (calic1cbf1ca0f8) ααααΌαααΆαααααΆαααα cnx-manager-* αα αααα»α namespace αααα½ααα·αα·ααα calico α
[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 (αααααααα αα α¬ααααΆαααααααααααα ααΎαααααΆα)α ααΈααααΎαααΆααααα»ααααα»α αααα ααααααααΆαααααααΆαα OUTPUT α αΎααααααΆαααα POSTROUTING αααααααααΆαα αα»ααααααααΌαααΆααααααΌαααΆαααααα
α αααΆαααΆ pod ααααΆα’αααααΆαααΆααααα (ααααΆαααα veth) αα αααα»αααααααααααααααΎαααΆα iptables α ααΌαααααααα
- α ααΆα αααβαααααΌαβαααα (ααΆα ααααΌα α¬βαα /ααΈβαα) ααααααΆααβα ααααΆααβααΆαβαααααΌαβαααα - αααααΌαβαααα - αααααβααΆαβαααααΌαβααααα
- α ααΆα ααααα ααΆααααααΎαααΆααααΆαααΈααααα»ααααα»αααααααΆααααΆααααααααααΆαα PREROUTING - INPUT α
- α ααΆα αααααΈααααΎαααΆααααΆαααΈααααα»ααααα»αααααααΆαααααααααααΆαα OUTPUT - POSTROUTING α
Calico ααααααααααΎαααααααααΆααααα’αα»ααααΆαα±ααα’αααα’αα»ααααααααααααΆααα
ααΌααΆαααααααααααΆααααΆααα’ααα ααααα·ααααα»αα
α·αααααα ααΌααααα‘ααααΎααααααΎαααααΆαααααααα
ααΆαααααααααααααΆαααααααααααααΆαααααΆααα
αααα»α Calico α ααααααα»ααααααΈαααααΎαααΆααααααααααΌαααααΆααΉαααααααα»αααααΆααααΆαααΆαααΎα
- αααααΆαααααααΆααααα ααααααα»αααΆαααΆα (αα)
- αααααΆαααααα ααα»α αααα ααααααααα αΆαααααα
- αααααΎα ApplyOnForward
- αααααΆααα PreDNAT
- αααααΆααααα·αααΆαααΆα
α αΌαα αΆααααααΎααααααΎαααΈααααααααααααΆαααααααΌαααΆαα’αα»ααααα ααααα ααα»α αααα ααααααααα»αααΆαααΆα (Kubernetes pods α¬ OpenStack VMs) α αΎααααααΆααααααΎααααααΎααααααΆααααααααΆααα ααα»α αααα αααααΆαααΈαα
α ααα»α αααα ααααααααα»αααΆαααΆα
αααααΆαααααααΆααααα ααααααα»αααΆαααΆα (1)
αααααΊααΆαααααΎααα½αααΎααααΈααΆαααΆα pods kubernetes ααααα’αααα Calico ααΆααααααΆαααααΎααΆαααΆαα½α Kubernetes NetworkPolicy ααα»ααααααΆαααααααααΌααααααΆαααααααααααααα - Calico NetworkPolicy αα·α GlobalNetworkPolicy α Calico αααααΎααααααααααΆαααααααΆααααααΈαα½αα (ααααα»αααΆαααΆα) αα·αααααααα αααα»ααααααααααΆαα INPUT αα·α OUTPUT αααααΆααααααα»αααΆαααΆααα ααΆααααΆααΆαααααααααααααααααΆαα FORWARD α
α ααα»α αααα ααααααααα αΆαααααα
αααααΆαααααα ααα»α αααα αααααααααΆαααΈα (2)
ααααααααΈααΎ CNI (α ααα»α αααααΆαααααααΆααα»αααΊααα) αααααΆααα Calico αααααααΌααααααααΆααααα»αααΆαααΆαααΆααααΆαααΈααααα½αα―αα αα αααα»α Calico α’αααα’αΆα αααααΎαα ααα»α αααα αααααααααΆαααΈαααααααααΆααααΆααα½ααααα αΌαααααΆααα ααα»α αααααΆαααααΆαααΈα α αΎαααΎα αΆαααΆα α αααα αααα ααΆαα’αα»ααααααααααααΆααααααΆααα’αααααΆααααααααΌαααΆααααααα αααααααΎααΆααΆαααααααα αααα»ααααααααααΆαα INPUT αα·α OUTPUT α ααΌα αααα’αααα’αΆα ααΎαααΎαααΈααααΆααααΆα (2) αα½αααΆα’αα»ααααα ααααααααΎαααΆαααΌαααααΆααα ααΎααααΆαα/αααΆαααΈαα αααααΊααααα·αααΎα’ααααααααΎααααααΆααααααα’αα»ααααα ααααα ααα»α αααα αααααααααΆαααΈα ααΆααΉααα·ααααααΆαααααα ααΆα ααααα ααΆαα/ααΈααααααα’αααααα ααα»ααααααΆαααααααΌαα ααα»α αααααΆαα/ααΆααααααααααααααα½ααααααΆαααααααααΆααα ααΆα ααααααααΆαααααΆαααΈα αα·αααααααα’ααααααααααΎαααααΆααα Calico α ααααα½αααααα½ααααααααΎαααΆααααααααααααααααααΆααααααΆαααααααΆαα αααα»αα ααΆαααααααα ααΆαααααααααααααΆαααααα ααα»α αααα αααααααααΆαααΈαααΎααααΈαααααΎααα»ααααα·ααΆαα αααααααΊααΆααααΈααααΎααααΆααααααααΆαααα½αααααααααα
α’αα»αααααααααΆααα OnForward (3)
αααααΎα ApplyOnForward ααΆααα αααα»ααααααΆααααααααΆαααα Calico ααΎααααΈα’αα»ααααΆαα±αααααααΆαααααααΌαααΆαα’αα»ααααα ααααα ααΆα αααααΆααα’αααααααααααΆααα ααα»α αααα αααααααααΆαααΈα αα½αααΆααα ααΆα ααααααααΉαααααΌαααΆααααααΌαααααααααααΆαααΈαα αααααΆαααααα αΌαααΆααααΆααααααΌααααααα ααΆαααααααααα»ααααα»α α¬αααααααααααααααα ααΎαααααΆαα Calico αααααΌαα±ααααΎαααΆααααααααααααααΆαααααααΆααααααααααΎ PreDNAT α αΎααα·αααΆαααΆαααΆα ααΌαααΎααααααααΆααααααα ααΎαααΈαααααα ApplyOnForward α’αΆα ααααΌαααΆαααααΎααΎααααΈαααα½ααα·αα·αααα ααΆα ααααΆαααΈααα αααα»αααααΈαααααααααααα·αααα·αα¬αααααα·ααΈ NAT ααααΌαααΆαααααΎα
α αααΆαααΆ ααααα·αααΎα’αααααααΌαα’αα»αααααααααΆααααααααΆαααΌα ααααΆααΆααααααΎαααΆααααΆαααΈα αα·ααα αααα’ααααα·αα αΆαααΆα αααααΎαααααΎα ApplyOnForward ααα α’αααΈαααα’αααααααΌαααααΎααΊαααααΎαααααΆααααααΆαα hostendpoint αα·α workload endpoint (pod) αααααααΌαααΆαα Calico ααΆαααΆαααααΆααααααααααααΆαααααα»αααΆαα’αα»αααααααααΆααααααααα’ααααΎααααΆα ααααα·ααα·αααΈααααααα ααα»α αααα αα (α ααα»α αααΆαααΈα α¬ααααα»αααΆαααΆα)α
αααααΆααα PreDNAT (4)
αα αααα»α Kubernetes α αααα’αααααΆαααααΆααααα’αΆα ααααΌαααΆαααΆααααααΆαααΆααααα αααααααΎαααααΎα NodePorts α¬ααΆαααααΎα (αα αααααααΎ Calico) αααααΆαααααΆαααΆαα·ααααααααα½αααΆαααααααΎ Cluster IPs α¬αααααΎα IPs ααΆααααα α Kube-ααααΌααααΈααααΎαααα»αααα ααΆα αα αΌααααααααΆαααα ααΉαααααΆαααααα ααΆααααααααααΆαααααααααααΌαααααΆαααααααΎ DNAT α α’αΆαααααα ααα»ααα ααΎα’αααα’αα»ααααααααααααΆααααααΆααα ααΆα ααααααα αΌαααααΆαααα NodePorts αααΆαααΌα ααααα ? ααΎααααΈααΆααΆααΆαααααΆαααααΆαααααααααΌαααΆαα’αα»αααααα»ααααα ααΆα αααααΌαααΆαααααΎαααΆαααα DNAT (αααααΆαααααΈαααΆααααΆαααΈα: α ααα αα·αααααΆαααααααααααΌαααααΆ) Calico αααααααΌααααΆαααΆαααααααααααΆαα globalNetworkPolicy αααα α ααΆ "preDNAT: true" α
αα αααααααα»α DNAT ααααΌαααΆαααΎα αααααΆαααααΆαααααααααΌαααΆαα’αα»αααααα αααα»α (4) αα αααα»αααααΆααααΆα - αα αααα»αααΆααΆα mangle αααααααααααΆαα PREROUTING - ααααΆαααα»αααα DNAT α ααααΆαααααααΆαααααααααΆαα·αααααΌαααΆαα’αα»αααααα ααΈααααα αααααΆαααΆαα’αα»αααααααααΆαααααΆαααααααΎαα‘αΎααα»αα αααΎααααα»αααααΌαααααΎαααΆαα ααΆα αααα αααααΆαααΆαααΆααααα αααααΆααα preDNAT ααααααΆαααααΆααααααΆαα’αα»αααααααα»αα αααααα½αααα
αα
ααααααααΎααααααΆαααααΆαα½α DNAT ααΆαα»α ααΆααΆαααΆααααααΆααααΆαααααα»αααΆααααα»αααααααααα
ααααα
ααΆα
ααααααα’αααα
ααααααΎαααΆα α αΎαα’αα»ααααΆαα±ααααΆαα
αααΎαααααΌαααΆαααα·αααα α
ααΆα
ααααααααααΌαααΆααααααΆααααΆ 'α’αα»ααααΆα' αα
αααα»ααααααΆααααα»α DNAT ααΉααα·αααααΌαααΆααααα½ααα·αα·αααααααααααΆααα hostendpoint ααααα αααααααααα
ααΆα
αααααααααΆααααααααααΆααααα»α DNAT ααΉαααααααΆαααααααααααααΆααααααα
αααα
Calico ααΆαααααΎα±ααααΆα
αΆαααΆα
ααααα»αααΆαααΎααααααΎα applyOnForward αα
αααααααΎ preDNAT α
αΆααααΆααααΈααΆααα·ααααα αα·ααα
ααα
ααΆα
ααααα·αααΆααααααΌαααΆαααααΎαααΎααα
α‘αΎαα α
ααΆα
αααα’αΆα
ααααΌαααΆαααΉαααΆααα
ααΆααααααΎαααΆααααΆαααΈα α¬ααΆα’αΆα
ααααΌαααΆααααααΌααααααα
ααΆαααα α¬ααααΆααααααααααα
αααααΆααααα·αααΆαααΆα (5)
αααααΆα αα·ααααααα·ααΈα’αΆα
ααΆαααΆααα»αααααΆαααα
αααα»αα₯αα·ααΆααα αααα»αααααΈααααααααααα½αα
ααα½α αααααα·ααΈα’αΆα
αααααΎαααΆααααααΆααααααααααααΈααΆα
αααΎαα αααα’αΆα
αααααΆαα±αα conntrack (αααΆαααΆαααααΌαααααααααααΆαααΈαα»α
) α’ααα’αααα
αα
αΆαα ααΆαααααααΈ ααΎααααΈααααΎαααΆααααααααααααααα·ααΈααΆααααααα
ααΎααΈαα»α
α’αααααΉαααααΌαααααααα
ααΆααααααααααααα α¬αα·α conntrack α¬αααααα
αααΆαα iptables ααΎααααΈαααα conntrack α αααααΆαααααααα·αααΆαααΆααα
αααα»α Calico ααΊααΆαααααΎαααααΆαααα αα·αααΆαααααα·αααααΆαααΆα ααααα·αααΎα’αααα
ααααααΎαααΆαααΆααααααΆααα±ααααΆαααΏαααΆααααα’αΆα
ααααΎαα
ααΆαα α§ααΆα αααααααα·αααΎα’αααααααΎαα
α’αΆααααα
αα αααα’αααααααααααααΎα "doNotTrack: true" αα αααα»α Calico globalNetworkPolicy ααΆααααΆαααΆαααααΆααα **αα·αααΆαααΆαααΆα** α αΎαααααΌαααΆαα’αα»ααααααααΌααααα»ααα αααα»ααααααααααΎαααΆααααα ααααααααΆαααΈαα»α α αααα‘ααααΎαααααΆααααΆαααΆαααΎ αααααΆαααααααα·αααΆαααΆαααΆαααααΌαααΆαα’αα»αααααα αααα»ααααααααααΆαα PREROUTING αα·α OUTPUT αα αααα»αααΆααΆααα αα»ααααααΆαααΆαααΆαααΆααααααΆαα (conntrack) ααααΌαααΆαα αΆααααααΎαα αα αααααααααα ααααααααΆαααααΌαααΆαα’αα»ααααΆαααααααααΆααααα·αααΆαααΆαααΆα ααΆααααΌαααΆααααααΆααααΎααααΈαα·αααΆαααΆαααΆαααΆααααααΆαααααααΆαααααα ααααααααΆααααα ααΆβααΆαβαααβααΆ:
- αααααΆαααααααα·αααΆαααΆαααΆαααααΌαααΆαα’αα»ααααααΎααΌαααααΆααααα»ααα½ααααα ααα αα·αααΆααααα·αααααΆααααααΆαα (α¬ααα αΌα) ααα αααααααααΆααααααααΆααααα·ααΆαααααΆααααα½αα ααα½αα
- ααααα·αααΎβα’αααβα ααβα’αα»ααααΆαβααΆααβααΆαβααααΎαβαα»αβαα·αβααΆαβααααΎααα α’αααβααααΌαβααΆαβα αααΆααβαααααΆααβααΆααβααΆαβα αΌαβαα·αβα ααβααΈβαααα βαααααα (α αΆααααΆααααΈ Calico ααΆααααααΆβααααΎ conntrack ααΎααααΈβαααααΆααβα ααΆα αααβααααΎαααβααΆβααΆαβα’αα»ααααΆα)α
- αααααΆαααααααα·αααΆαααΆαααΆααα·αααααΎαααΆααααααΆααααααα»αααΆαααΆα Kubernetes (αα) αα ααΈααααααααα»αααααΈααααα·αααΆααα·ααΈααΎααααΈααΆαααΆαααΆααααααΆαααααα ααααααΈαααααααα
- NAT αα·αααααΎαααΆαααααΉαααααΌαααΆαα½ααααα ααααααααΆαααααα·αααΆαααΆαααΆααα (α αΆααααΆααααΈααΊααααααααΆαα»αααΆαααΌααααααΈ NAT αα αααα»α conntrack)α
- αα αααααααααΆααα αααΆαα "α’αα»ααααΆαααΆααα’αα" αα αααα»ααααααΆαααααααα·αααΆαααΆαααΆα αααα ααααΆααα’ααααΉαααααΌαααΆααααααΆααααΆαα·αααΆαααΆαααΆαα αααααααΎααααα·ααααααΆα’αααΈαααα’αααα ααααΆαααααα ααΌα ααααααΆααΆαααΆααααααΆααααΆαααααα»αααΆαααααΎαααΎααααα ααααααααΆααααα’αα»ααααΆαααααααααΆαααααααα·αααΆαααΆαααΆαααΆα (αα·αα’αα»ααααΆαα±ααα ααΆα αααααΆαα αααΎαααααααΆαααααααΆααααααααΆαααΆαααΆαααααααΆ)α
- αααααΆαααααααα·αααΆαααΆαααΆαααααΌαααΆαα’αα»αααααα ααΎαααααΌααααααααααααΎαααΆααααα ααααααααΆαα αααααΆαααΆααααααΆααααΆαααααα»αααΆααααααΉααα ααααααααΎααααααΆααα Calico α α’αααα’αΆα ααΆααααααΆααα pod ααΆαα½αααααΆαα: 1 αα·ααααααΆααααα·αααΆαααΆαααΆαα½αααααΆαα: 1000 α ααΆααΉααα·αααΆααααα αΆααα αααααΆααα Untracked ααΉαααααΌαααΆαα’αα»αααααα»ααααααααααααΆααααααΆαα pod α ααααααααΆαααααα·αααΆαααΆαααΆαααααααΆαααααΆααααααα·ααααα·αααααα»αα αααααα½αααααα»αααααα
αααααΆαααααααααααα½ααααααααΆααα doNotTrack ααΊααΎααααΈα’αα»αααααααααΆααααα ααααΆααααΆαααααΌααα αααα»ααααααααααΎαααΆααααα ααααααααΆαααΈαα»α Calico ααααΎα±ααααΆα αΆαααΆα αααΎααααΈαααααΆαααααααΎα applyOnForward αα αααααααΎ doNotTrack α αααβαα βααΎβααααΆααααΆαβααααΎαααΆαβαααα ααβααααααΆα ααΌαβα αααΆαβααΆβαααααΆαααβαααβαα·αβααΆαβααΆαααΆα (5) ααααΌαβααΆαβα’αα»ααααβαα»αβαααβααΆαβαααααα βα α·αααβααααΌαβααΆαα½αβα α ααΆα αααα’αΆα ααααΌαααΆαααΉαααΆααα ααΆααααααΎαααΆααααΆαααΈα α¬ααΆα’αΆα ααααΌαααΆααααααΌααααααα ααΆαααα α¬ααααΆααααααααααα
αααααα
ααΎαααΆααα·αα·αααααΎααααααΎααααααΆααααααααα (α ααα»α αααα αααααααααΆαααΈα, ApplyOnForward, preDNAT αα·α Untracked) αα αααα»α Calico αα·αααααααααα½αααΆααααΌαααΆαα’αα»ααααααΆαααααΌαααααΎαααΆααααα ααααααααΆαα ααΆααααααΉαααΈααααααααα½αααααααΎααΆααα½ααααα»αααΆααααααΎαααααααααΆαααααααααααααα·αααααΆα αα·ααα»ααααα·ααΆαα ααΆαα½α Calico α’αααα’αΆα ααααΎαααααΆααααααααΆαααααααα’αα»ααααα ααααααααΆααα½α (αααα»αααααΆαα αα·ααα) α αΎαα’αα»αααααααααΆαααααΆαα½ααααΆαααΆααααααααααααα αααα’αα»ααααΆαα±ααα’αααααααΆαααααααα»ααααα·ααΆα αα·αααΆααα ααΆαααααΆαααΆαααΆααααΆαααΆααααα½α "α’αααΈααααααααΆα" (ααααααα ααα»α αααα αα) αααα»αααααααα½ααααααααΎααΆααΆαααααΆααααααα½αααΆαα½ααααααΆααα Calico α
ααΆαααα½αααααΆααα αααα»αααΌααααααα’ααααα»α
ααααα: www.habr.com