Calico ááœááºáááºááááºá¡ááºááẠáá¬á·ááºáá²áááºáá¶áá±á¬ááºááœááºáá±ážáá°áá»á¬ážá ááááá
ááºáá»á¬ážááŸáá·áº pods áá»á¬ážááᯠáá¬ááœááºáááºá¡ááœáẠáá»ááºááŒáá·áºáá±á¬ááœááºáááºáá°áá«ááá»á¬ážááᯠá
á¯á
ááºážáá¬ážáá±á¬ á¡áá¬ážá¡ááá¯áá
áºáá¯ááŒáá·áº áá¶á·ááá¯ážáá±ážáá«áááºá á€áá°áá«ááá»á¬ážááᯠnamespace áá
áºáá¯á¡ááœááºážááœáẠá¡áá¯á¶ážáá»ááá¯ááºááẠááá¯á·ááá¯áẠáááºážááŸáá·áºáááºááá¯ááºááá·áº ááá¹áá¬áá¯á¶ážááá¯ááºáá¬ááœááºáááºáá°áá«ááá»á¬áž ááŒá
áºáá¬ááá¯ááºáááºá
á€áá±á¬ááºážáá«ážááœáẠKubernetes ááŸáá·áº Calico ááœááºáááºáá°áá«ááá»á¬áž áááºááá¯á·á¡áá¯ááºáá¯ááºáá¯á¶ á¡ááŒá±áá¶áá¬ážáááºááŸá¯ááŸááááºáᯠáá°ááá«áááºá ááá¯ááºáá«á á
ááºážáá¯á¶ážááŒáá·áºááẠá¡ááŒá¶ááŒá¯á¡ááºáá«áááºá
Calico
á¡ááŒá±áá¶á¡ááá·áºááœáẠCalico ááẠpod áá áºáá¯á¡á¬áž ááœááºáááºááá¯á· áá»áááºáááºáá±á¬á¡áá« (á¡á±á¬ááºáá±á¬áºááŒáá« áá¯á¶ááœááºááŒáá·áºáá«)á áááºážááẠvirtual Ethernet interface (veth) ááᯠá¡áá¯á¶ážááŒá¯á host ááá¯á· áá»áááºáááºáá±ážáá«áááºá pod ááŸáá±ážááá¯á·áá±á¬á¡ááœá¬ážá¡áá¬ááẠဠvirtual interface á០host ááá¯á·áá±á¬ááºáá¬ááŒá®áž áááºážááẠphysical network interface ááŸáá¬ááá²á·ááá¯á· á¡áá¬ážáá°áá¯ááºáá±á¬ááºáááºá áá°áááºážá¡á¬ážááŒáá·áº Calico ááẠá€á¡ááºáá¬áá±á·á áºáá»á¬ážááᯠcaliXXX áᯠá¡áááºáá±ážáááºá á¡ááœá¬ážá¡áá¬ááẠvirtual interface ááŸáááá·áºáá¬áá±á¬ááŒá±á¬áá·áº pod áááºáá áºááŒá±ážáááºážááœá¬ážááá²á·ááá¯á· iptables ááŸáááá·áºááœá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áºá pod áá áºáá¯ááá¯á· á¡ááœá¬ážá¡áᬠáá¬áá±á¬á¡áá«á áááºážááᯠáááºáá¶áá°á á¡ááŒááºá០áá áºááá·áº áá±ážááá¯á·áááºá
Calico áááºáááºááá·áº Kubernetes node ááœááºá áááºááẠá¡áá¯ááºáá¬áááºáá áºáá¯ááá¯á· virtual interface (veth) ááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž ááŒá±áá¯á¶ááœá²ááá¯ááºáá«áááºá á¡á±á¬ááºáá«á¥ááá¬ááœááºá veth#10 (calic1cbf1ca0f8) ááᯠcalico-monitoring namespace ááœáẠ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 interface ááᯠáááºáá®ážáá±ážáá±á¬ááŒá±á¬áá·áºá áááºážááẠáá°áá«ááá»á¬ážááᯠáááºááá¯á·áá»áá·áºáá¯á¶ážááááºážá áá«ááá¯áá¯ááºááá¯á· Calico á iptables ááá¯áá¯á¶ážááŒá®áž packet processing path áá²á· á¡áá»áá¯ážáá»áá¯ážáá±á¬ áá»áááºááœá±ááᯠáááºáá®ážáá±ážáá«áááºá
á¡á±á¬ááºáá±á¬áºááŒáá« áá¯á¶ááẠiptables (ááá¯á·ááá¯áẠnetfilter á áá áºááœá²) ááœáẠpacket processing ááœááºáá«áááºáá±á¬ ááœááºážáááºáá»á¬ážááᯠááŒááá¬ážáááºá áááºáá±á·ááºá»áá áºáá¯ááẠááœááºáááºá¡ááºáá¬áá±á·á áºááŸáááá·áº áá±á¬ááºááŸááá±á¬á¡áá«á áááºážááẠááááŠážá áœá¬ ááŒáá¯áááºáá¯ááºáá±á¬ááºááŒááºážááœááºážáááºááŸáááá·áº ááœá¬ážáá«áááºá áááºážááŒá±á¬ááºážáááºááŸááºááŒááºážááá¯ááºáᬠáá¯á¶ážááŒááºáá»ááºáá áºáá¯ááᯠáá»ááŸááºááŒá®áž áááºážá¡áá±á«áº á¡ááŒá±áá¶á áááºáááºááẠINPUT (áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá ááºáá»á¬ážáá®ááá¯á· ááœáŸááºááŒá¬ážáááº) ááá¯á·ááá¯áẠFORWARD (ááœááºáááºáá±á«áºááŸá pod áá áºáᯠááá¯á·ááá¯áẠá¡ááŒá¬áž node áá áºáá¯áá®ááá¯á· ááœáŸááºááŒá¬ážáááº) ááá¯ááŒááºáááºážááœá¬ážáá«áááºá á ááºááœááºážáá¯ááºáááºážá ááºááŸá áááºáááºááẠOUTPUT ááŸáá áºááá·áº ááŒáá¯ážááá¯áááœáŸááºáá®ááœáẠááá¯á·ááŒááºážááœááºážáááºááᯠááŒááºáááºážááœá¬ážáááºááŒá áºáááºá
pod ááẠiptables áá¯ááºáá±á¬ááºááŒááºážááá¯ááºáᬠá ááºážáááºážáá»ááºáá»á¬ážá¡á pod ááẠááŒááºáá¡ááŒá±á¬ááºážá¡áᬠ(veth ááŸáá·áº áá»áááºáááºáá¬ážáááº) áááºážááŒá áºáááºá á¡áá»ááºážáá»á¯á¶ážááŒáá«á áá¯á·á
- áááºááá·áºááá¯á·áá±á¬áááºážááŒá±á¬ááºáž (áááºá áááºážááŒá±á¬ááºáž ááá¯á·ááá¯áẠáá°ážáá áºáá¯ááá¯á·) ááẠááŒáá¯áááºááŒááºáááºááŒááºáž - ááŸá±á·ááá¯á· - ááá¯á·á áºáááºááŒááºáž ááœááºážáááºáá»á¬ážááŸáááá·áº ááŒááºáááºážááœá¬ážáá«áááºá
- áá±áááœááºáž áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá ááºááá¯á· á¡ááœá¬ážá¡áá¬ááẠPREROUTING - ááá·áºááœááºážááŸá¯ ááœááºážáááºááŸáááá·áº ááŒááºáááºážááœá¬ážáá«áááºá
- áá±áááœááºáž áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá ááºá០á¡ááœá¬ážá¡áá¬áá»á¬ážááẠOUTPUT - POSTROUTING ááœááºážáááºááŸáááá·áº ááŒááºáááºážááœá¬ážáá«áááºá
Calico ááẠááœááºážáááºá¡á¬ážáá¯á¶ážááœáẠáá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážááœáá·áºááŒá¯ááá·áº áá°áá«áááœá±ážáá»ááºááœáá·áºáá»á¬ážááᯠáá±ážáá«áááºá á¡á²áá«ááᯠá
áááºáá²áá¬ážááŒá®ážá Calico ááŸá¬ áááá¯ááºáá²á· ááá°áá®áá²á· áá°áá«áááœá²á·á
ááºážáá¯á¶ááœá±ážáá»ááºá
áá¬ááœá±ááᯠááŒáá·áºááŒáá¡á±á¬ááºá á¡á±á¬ááºáá«ááœá±ážáá»ááºá
áá¬áá»á¬ážá
á¬áááºážááŸá áá¶áá«ááºáá»á¬ážááẠá¡áááºáá±á¬áºááŒáá« áá¯á¶ááœááºááŸááá±á¬ áá¶áá«ááºáá»á¬ážááŸáá·áº ááá¯ááºáá®áá«áááºá
- Workload endpoint (pod) áá°áá«á
- áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº á¡áá¯á¶ážááŸááºáá°áá«á
- ApplyOnForward ááœá±ážáá»ááºááŸá¯
- PreDNAT áá°áá«á
- ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«á
á¡áá¯ááºáááºá¡áá¯á¶ážááŸááºáá»á¬áž (Kubernetes pods ááá¯á·ááá¯áẠOpenStack VMs) ááœáẠáá°áá«ááá»á¬ážááᯠáááºáá²á·ááá¯á· á¡áá¯á¶ážáá»áááºááᯠááŒáá·áºááŒááºážááŒáá·áº á áááºááŒáá«á áá¯á·á ááá¯á·áá±á¬áẠáááºáá¶áá±á¬ááºááœááºáá±ážááá·áº á¡áá¯á¶ážááŸááºáá»á¬ážá¡ááœáẠáá°áá«áááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠááŒáá·áºáá«á
Workload Endpoints
Workload Endpoint Policy (á)á
áááºážááẠáááºá kubernetes pods áá»á¬ážááᯠáá¬ááœááºááẠááœá±ážáá»ááºááŸá¯áá áºáá¯ááŒá áºáááºá Calico ááẠKubernetes NetworkPolicy ááŸáá·áº á¡áá¯ááºáá¯ááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážáááºá ááá¯á·áá±á¬áº áááºážááẠáá±á¬ááºáááºáá°áá«ááá»á¬áž - Calico NetworkPolicy ááŸáá·áº GlobalNetworkPolicy ááá¯áááºáž áá¶á·ááá¯ážáá±ážáá«áááºá Calico ááẠFORWARD ááœááºážáááºá á á áºáá¯ááºááŸá¯ááá¬ážá¡ááœáẠá¡áá¯ááºáááºá¡ááœáẠINPUT ááŸáá·áº OUTPUT ááœááºážáááºáá»á¬ážááœáẠáá»áááºáá áºáá¯á á®ááᯠáááºáá®ážáááºá
áááºáá¶áá° á¡áá¯á¶ážááŸááºáá»á¬áž
áááºáá¶áá±á¬ááºááœááºáá±ážáá° á¡áá¯á¶ážááŸááºáá°áá«á (á)
CNI (container network interface) á¡ááŒáẠCalico áá°áá«ááá»á¬ážááẠhost ááá¯ááºááá¯ááºááᯠáá¬ááœááºááá¯ááºá áœááºáž áá±ážáá«áááºá Calico ááœááºá áááºáá¶áá±á¬ááºááœááºáá±ážáá° á¡ááºáá¬áá±á·á áºááŸáá·áº ááá¯á¡ááºáá«á ááá¯á·ááºáá¶áá«ááºáá»á¬ážááᯠáá±á«ááºážá ááºáááºááŸááºááŒááºážááŒáá·áº áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº á¡áá¯á¶ážááŸááºááᯠáááºáá®ážááá¯ááºáááºá INPUT ááŸáá·áº OUTPUT ááœááºážáááºáá»á¬ážááŸá á á áºáá¯ááºááŸá¯ááá¬ážááᯠá¡áá¯á¶ážááŒá¯á á€á¡ááœá²á·á¡á ááºážá¡ááœáẠáá°áá«áááá¯ááºáᬠááŒáá¹áá¬ááºážáá»ááºááᯠá¡á±á¬ááºááŒááºáá«áááºá áá¯á¶ááœááºááŒááºáááá·áºá¡ááá¯ááºážá (á) áááºážááá¯á·ááẠnode/host áá±á«áºááŸá áá±ááá¹áá áá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº áááºááá¯ááºáá«áááºá ááá¯ááá¯áááºááŸá¬á á¡áááºá áááºááẠáááºáá¶áá±á¬ááºááœááºáá±ážáá° á¡áá¯á¶ážááŸááºááᯠáááºááá¯ááºááá·áº áá°áá«ááá áºáá¯ááᯠáááºáá®ážáá«áá áááºážááẠáááºá pods áá»á¬ážáá®ááá¯á· ááœá¬áž/áá¬ááá·áº á¡ááœá¬ážá¡áá¬ááᯠááááá¯ááºáááºááá¯ááºáá«á ááá¯á·áá±á¬áº Calico áá°áá«ááá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºá host ááŸáá·áº pods áá»á¬ážá¡ááœáẠtraffic ááá¯ááááºááá¯á·áááºá¡ááœáẠsingle interface/syntax ááá¯áá±ážáá«áááºá áááºážááẠááœá²ááŒá¬ážáá±á¬ááœááºáááºáá áºáá¯á¡ááœáẠáá°áá«ááá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážáá¯ááºáááºážá ááºááᯠáá»á¬ážá áœá¬ááá¯ážááŸááºážá á±áááºá á¡á á¯á¡ááœá²á·áá¯á¶ááŒá¯á¶áá±ážááᯠááá¯ážááŒáŸáá·áºááẠáááºáá¶áá±á¬ááºááœááºáá±ážáá° á¡áá¯á¶ážááŸááºáá°áá«ááá»á¬ážááᯠááŒááºáááºáááºááŸááºááŒááºážááẠá¡ááŒá¬ážá¡áá±ážááŒá®ážáá±á¬ á¡áá¯á¶ážááŒá¯ááŸá¯ááá á¹á ááŒá áºáááºá
OnForward áá°áá«á (á) áá»ááºááᯠáá»áá·áºáá¯á¶ážááŒááºážá
áááºáá¶áá°á០áá áºááá·áºááá¯á·ááá·áº á¡ááœá¬ážá¡áᬠá¡áá«á¡ááẠáááºáá¶áá±á¬ááºááœááºáá±ážáá° á¡áá¯á¶ážááŸááºááᯠááŒááºáááºážááœá¬ážáá±á¬ á¡ááœá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááᯠááœáá·áºááŒá¯ááẠApplyOnForward ááœá±ážáá»ááºááŸá¯ááᯠCalico ááá¹áá¬áá¯á¶ážááá¯ááºáᬠááœááºáááºáá°áá«áááœáẠáááá¯ááºáá«áááºá áááºážááœáẠlocal pod ááá¯á· áááºááá·áºááá¯á·áá±á¬ áááºážááŒá±á¬ááºážáá»á¬áž áá«áááºáááºá Calico ááẠPreDNAT ááᯠá¡áá¯á¶ážááŒá¯á áá°áá«ááá»á¬ážá¡ááœáẠá€áááºáááºááᯠááœáá·áºáá¬ážááẠááá¯á¡ááºááŒá®áž ááŒá±áá¬áá¶ááá¬ážáá±á¬á á¡á±á¬ááºáá«ááá¹ááá»á¬ážááᯠááŒáá·áºáá«á ááá¯á·á¡ááŒááºá ApplyOnForward ááᯠvirtual router ááá¯á·ááá¯áẠsoftware NAT ááá¯á¡áá¯á¶ážááŒá¯ááá·áºááá á¹á áá»á¬ážááœáẠhost traffic ááá¯á á±á¬áá·áºááŒáá·áºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
á¡áááºá áááºááẠáá°áá®áá±á¬ááœááºáááºáá°áá«áááᯠáááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº pods ááŸá áºáá¯á áá¯á¶ážááœáẠáá»áá·áºáá¯á¶ážááẠááá¯á¡ááºáá«áá áááºááẠApplyOnForward ááœá±ážáá»ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠáááá¯á¡ááºááŒá±á¬ááºáž áááááŒá¯áá«á áááºáá¯ááºááẠááá¯á¡ááºáááºááŸá¬ ááá¯á¡ááºáá±á¬ hostendpoint ááŸáá·áº workload endpoint (pod) á¡ááœáẠá¡ááœáŸááºážáá áºáᯠáááºáá®ážáá«á Calico ááẠá¡áá¯á¶ážááŸááºá¡áá»áá¯ážá¡á á¬áž ( hostendpoint ááá¯á·ááá¯áẠworkload ) ááááºááá¯ááºáá² á¡ááœáŸááºážáá»á¬ážáá±á«áºááœáẠá¡ááŒá±áá¶á áá°áá«áááᯠáá»áá·áºáá¯á¶ážááẠáá¯á¶áá±á¬ááºáá±á¬ á áááºááŒá áºáááºá
PreDNAT áá°áá«á (á)á
Kubernetes ááœááºá NodePorts ááœá±ážáá»ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á áááºáá±á¬ááºááŸá¯ááá¯ááºáᬠááááºáááºážáá»á¬ážááᯠááŒááºáááœáẠáá±á¬áºáá¯ááºááá¯ááºááẠááá¯á·ááá¯áẠ(Calico ááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá«) áááºážááá¯á·á¡á¬áž Cluster IPs ááá¯á·ááá¯áẠááŒááºá IP ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŒá±á¬áºááŒá¬ááŒááºážááŒáá·áº áááºážááá¯á·ááᯠááŒááºáááœáẠáá¯ááºáá±á¬áºááá¯ááºáá«áááºá Kube-proxy ááẠDNAT ááᯠá¡áá¯á¶ážááŒá¯á áááºááá¯ááºáá¬áááºáá±á¬ááºááŸá¯á pods áá»á¬ážááá¯á· á¡áááºá¡ááœá¬ážá¡áá¬ááᯠáá»áááºááœááºáá»áŸá¬ááŸááá±ážáááºá á€á¡áá»ááºááŒá±á¬áá·áºá NodePorts ááŸáááá·áº ááœá¬ážáá¬ááŸá¯ááá¯ááºáᬠáá°áá«ááá»á¬ážááᯠáááºáááºáá²á·ááá¯á· áá»áá·áºáá¯á¶ážáááºáááºážá á¡ááœá¬ážá¡áá¬ááᯠDNAT á ááá¯ááºáá±á¬ááºáá® á€áá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážááŒá±á¬ááºáž áá±áá»á¬á á±ááẠ(á¡áááºááŸááº-ááááºáááºážááŸáá·áº áááºá ááºáááºáá±á¬ááºááŸá¯ááŒá¬ážááœáẠááŒá±áá¯á¶ááœá²ááŒááºážááŒá áºáááº)á Calico ááẠ"preDNAT: true" áá¯áá±á«áºáá±á¬ globalNetworkPolicy á¡ááœáẠááá·áºáááºáá»ááºáá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
DNAT ááá¯ááŒáá¯áááºááœáá·áºáá¬ážáá±á¬á¡áá«á á€áá°áá«ááá»á¬ážááᯠDNAT áááá¯ááºáá®áá»ááºáá»ááºážáá¯ááºáá±á¬ááºááẠ- PREROUTING ááœááºážáááºá mangle ááá¬ážááŸá áá¯á¶ (á) ááœáẠá€áá°áá«ááá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«áááºá á€áá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážááŒááºážááẠáá¬ááºááŒá±á¬ááááºááá¯á·ááŸá¯ áá¯ááºáááºážá ááºááœáẠáá»á¬ážá áœá¬á á±á¬áá±á¬ááŒá±á¬áá·áº á€ááœáẠáá¯á¶ááŸááºáá°áá«ááá»á¬ážá á¡á á®á¡á á¥áºááᯠáááá¯ááºáá¬áá«á ááá¯á·áá±á¬áºá preDNAT áá°áá«ááá»á¬ážááẠáááºážááá¯á·á¡áá»ááºážáá»ááºáž áá»áŸá±á¬ááºáá¬ážááŸá¯á¡á á®á¡á á¥áºááᯠáá±ážá á¬ážáá«áááºá
ááŒáá¯ááẠDNAT ááŒáá·áº áá°áá«ááá»á¬ážáááºáá®ážáá±á¬á¡áá«á áááºáá¯ááºáá±á¬ááºááá¯áá±á¬ á¡ááœá¬ážá¡áá¬ááŸáá·áºáááºáááºá ááá¯ááŒá¯áááºááŸáá·áº á¡áá»á¬ážá
á¯ááᯠááŒááºážáááºááŒááºážááᯠááœáá·áºááŒá¯ááẠá¡áá±ážááŒá®ážáá«áááºá DNAT á¡ááŒáá¯áá°áá«áááœáẠ'ááœáá·áºááŒá¯' áᯠá¡ááŸááºá¡áá¬ážááŒá¯áá¬ážááá·áº áá¬ááºá¡ááœá¬ážá¡áá¬ááᯠáááºáá¶ááŸááºááŸááºáá°áá«áááŒáá·áº á
á
áºáá±ážáááºááá¯ááºáá±á¬á·áá²á DNAT á¡ááŒáá¯áá°áá«áááᯠáá»ááºááœááºáá±á¬ á¡ááœá¬ážá¡áá¬áá»á¬ážááẠáá»ááºááŸáááá·áº ááœááºážáááºáá»á¬ážááŸáá
áºááá·áº áááºáááºááŸááá±áááºááŒá
áºáááºá
Calico ááẠpreDNAT ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠapplyOnForward option ááá¯ááœáá·áºáááºáááŒá
áºááá±ááŒá¯áá¯ááºáá¬ážáá±á¬ááŒá±á¬áá·áºá áááºážááŒá±á¬ááºážááŠážáááºáá¬ááá¯áááœá±ážáá»ááºááá±ážáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá á¡ááœá¬ážá¡áá¬ááᯠáááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá
ááºááá¯á· ááœáŸááºááŒá¬ážááá¯ááºáááºá ááá¯á·ááá¯áẠáááºážááᯠpod ááá¯á·ááá¯áẠá¡ááŒá¬áž node ááá¯á· áááºááá·áºáá±ážááá¯á·ááá¯ááºáááºá
ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«á (á )
ááœááºáááºáá»á¬ážááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážááœáẠá¡ááŒá¯á¡áá° ááœá²ááŒá¬ážááŸá¯áá»á¬áž ááŸáááá¯ááºáááºá á¡áá»áá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááœááºá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠáááá¬áá»áááºáááºááŸá¯áá»á¬ážá
áœá¬ááᯠáááºáá®ážáá±ážááá¯ááºáááºá áááºážááẠconntrack (Linux networking stack á á¡áááá¡á
áááºá¡ááá¯ááºážáá
áºáá¯) áááºááá¯áá®áá¯ááºááœá¬ážááá¯ááºáááºá á¡á
ááºá¡áá¬á¡á¬ážááŒáá·áºá á€á¡ááá®áá±ážááŸááºážá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠLinux ááœáẠrun áááºá áááºááẠconntrack ááá¯áá»á±á¬áºááœáŸá¬ážááẠááá¯ááºááá¯áẠconfigure ááá¯á·ááá¯áẠdisable áá¯ááºááẠááá¯á·ááá¯áẠiptables á
ááºážáá»ááºážáá»á¬ážááᯠáá±ážáá¬ážááááºááŒá
áºáááºá Calico ááœáẠááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«áááẠáá»áááºáááºááŸá¯áá»á¬ážááᯠáááºááá¯ááºááá»áŸ ááŒááºááŒááºáá¯ááºáá±á¬ááºááá¯áá«á ááá¯ááá¯ááá¯ážááŸááºážááŒá®áž áááá±á¬ááºááŸá¯ááŸááá±á¬ ááœá±ážáá»ááºááŸá¯áá
áºáá¯ááŒá
áºáááºá á¥ááá¬á¡á¬ážááŒáá·áº áá¯áááºááŒá®ážáá¬ážáá»áŸááº
áá«ááá¯áááºáá«á
Calico globalNetworkPolicy ááœáẠ"doNotTrack: true" ááœá±ážá áá¬ááᯠáááºáááºááŸááºáá±á¬á¡áá«á áááºážááẠ**ááŒá±áá¬áá¶ááá¬ážáá±á¬** áá°áá«ááá áºáá¯ááŒá áºáá¬ááŒá®áž Linux packet áá¯ááºáá±á¬ááºááŒááºážááá¯ááºááá¯ááºážááœáẠá¡ááœááºá á±á¬á á®ážá áœá¬ áááºáá±á¬ááºáá«áááºá á¡áááºáá±á¬áºááŒáá« áá¯á¶ááŒááºážááᯠááŒáá·áºáá«á áá»áááºáááºááŸá¯ ááŒá±áá¬áá¶ááŒááºáž (conntrack) áá áááºáá® á¡ááŒááºážááá¬ážááŸá ááŒáá¯áááºááŸáá·áº á¡ááœááºááœá²ááŒáá¯ážáá»á¬ážááœáẠááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážáá«áááºá ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«áááŒáá·áº áááºáááºáá áºáá¯ááᯠááœáá·áºááŒá¯áá±á¬á¡áá«á áááºážááẠááá¯áááºáááºá¡ááœáẠáá»áááºáááºááŸá¯ ááŒá±áá¬áá¶ááŒááºážááᯠááááºááẠááŸááºáá¬ážáá¬ážáááºá ááá¯ááá¯áááºááŸá¬-
- ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«áááᯠáááºáááºáá áºáá¯áá»ááºážá á®á¡ááá¯áẠáá»áá·áºáá¯á¶ážáá«áááºá áá»áááºáááºááŸá¯ (ááá¯á·ááá¯ááº) á á®ážáááºážááŸá¯ ááá±á¬ááá¬áž áááŸááá«á áá»áááºáááºááŸá¯ áááŸáááŒááºážááẠá¡áá±ážááŒá®ážáá±á¬ á¡áá»áá¯ážáááºáá»á¬ážá áœá¬ ááŸááááºá
- áá±á¬ááºážááá¯ááŸá¯ááŸáá·áº áá¯á¶á·ááŒááºááŸá¯áááºážááŒá±á¬ááºážááŸá áºáá¯áá¯á¶ážááᯠááœáá·áºááŒá¯ááá¯áá«áá á¡áááºááŸáá·áºá¡ááœáẠááŸá áºáá¯á áá¯á¶ážá¡ááœáẠá ááºážáá»ááºážáá áºáᯠááá¯á¡ááºááẠ(Calico áá¯á¶ááŸááºá¡á¬ážááŒáá·áº ááœáá·áºááŒá¯áá¬ážááá·áºá¡ááá¯ááºáž áá¯á¶á·ááŒááºááŸá¯áááºážááŒá±á¬ááºážááᯠá¡ááŸááºá¡áá¬ážááŒá¯ááẠconntrack ááᯠá¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áº)á
- ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«áááẠKubernetes á¡áá¯ááºáá»á¬áž (pods) á¡ááœáẠá¡áá¯ááºáááŒá áºáá±á¬ááŒá±á¬áá·áº á€á¡ááŒá±á¡áá±ááœáẠáá±á«á·ááºá០ááœááºááœá¬ážáá±á¬ áá»áááºáááºááŸá¯ááᯠááŒá±áá¬áá¶ááẠáááºážáááºážáááŸááá«á
- NAT ááẠááŒá±áá¬áá¶ááá¬ážáá±á¬ áááºáá±á·ááºá»áá»á¬ážááŒáá·áº ááŸááºáááºá áœá¬ á¡áá¯ááºááá¯ááºáá« (kernel ááẠNAT mapping ááᯠconntrack ááœáẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº)á
- ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«áááŸá "á¡á¬ážáá¯á¶ážááœáá·áºááŒá¯áááº" á ááºážáá»ááºážááᯠááŒááºáááºážááá·áºá¡áá«á áááºáá±á·ááºá»á¡á¬ážáá¯á¶ážááᯠááŒá±áá¬áá¶ááá¬ážááá·áºá¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá áááºážááẠáááºá¡ááá¯ááŸááá±á¬á¡áá¬ááᯠá¡ááŒá²áááºážáá®ážáá«ážááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áº ááŒá±áá¬áá¶ááá¬ážáá±á¬áá°áá«ááá»á¬ážá០ááœáá·áºááŒá¯áá¬ážáá±á¬ áááºáááºáá»á¬ážááŸáá·áº áááºáááºá ááœá±ážáá»ááºááẠá¡áá±ážááŒá®ážááẠ(ááŸáá·áº áááºážááŒá±á¬ááºážá¡áá»á¬ážá á¯ááᯠáá¯á¶ááŸááºááŒá±áá¬áá¶áá¬ážáá±á¬ áá°áá«ááá»á¬ážááŸáá áºááá·áº ááŒááºáááºážááœáá·áºááŒá¯áá«)á
- packet processing pipeline áá¡á ááœáẠááŒá±áá¬áá¶ááá¬ážáá±á¬áá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážáá«áááºá Calico áá°áá«ááá»á¬ážááᯠáááºáá®ážáá¬ááœáẠáá¬ážáááºááẠá€á¡áá¬ááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá ááá·áºááœáẠá¡ááŸá¬á á¬-á áá«áá±á¬ pod áá±á«áºáá á®áá áºáá¯ááŸáá·áº ááŸá¬áá°ááŸá¯-1 ááŒáá·áº ááŒá±áá¬áá¶ááá¬ážáá±á¬áá°áá«ááá áºáᯠááŸáááá¯ááºáá«áááºá á¡áá±ážáááŒá®ážáá«áá°ážá pod ááá°áá«áááŸá±á·ááŸá±á¬ááºááœááºááŒá±áá¬áá¶ááá¬ážáá±á¬áá°áá«áááá¯á¡áá¯á¶ážááŒá¯áááá·áºáááºá ááŒá±áá¬áá¶ááá¬ážáá±á¬ áá°áá«ááá»á¬ážááẠááœááºáá»ááºáá±ážá¡áááá·áºááᯠáááºážááá¯á·á¡áá»ááºážáá»ááºážáᬠáá±ážá á¬ážááŒáááºá
doNotTrack áá°áá«áá áááºááœááºáá»ááºáá»á¬ážáá²á០áá áºáá¯ááẠLinux packet processing pipeline ááœáẠáá°áá«áááᯠá á±á¬á á®ážá áœá¬ áá»áá·áºáá¯á¶ážáááºááŒá áºááŒá®áž Calico ááẠdoNotTrack ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠapplyOnForward ááœá±ážáá»ááºááŸá¯á¡á¬áž áááºááŸááºááẠáááŒá áºááá± ááá¯á¡ááºáá«áááºá packet processing diagram ááᯠáááºááœáŸááºážááŒá®áž áááºážááŒá±á¬ááºážááá¯á¶ážááŒááºáá® ááŒá±áá¬áá¶ááá¬ážáá±á¬ (á ) áá°áá«áááᯠáá»áá·áºáá¯á¶ážááŒá±á¬ááºáž áááááŒá¯áá«á á¡ááœá¬ážá¡áá¬ááᯠáááºáá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáááºážá ááºááá¯á· ááœáŸááºááŒá¬ážááá¯ááºáááºá ááá¯á·ááá¯áẠáááºážááᯠpod ááá¯á·ááá¯áẠá¡ááŒá¬áž node ááá¯á· áááºááá·áºáá±ážááá¯á·ááá¯ááºáááºá
ááááºáá»á¬ážááá¯
Calico ááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ áá°áá«áááœá±ážáá»ááºá áá¬áá»á¬áž (Host endpointá ApplyOnForwardá preDNAT ááŸáá·áº Untracked) ááŸáá·áº packet processing áááºážááŒá±á¬ááºážáá áºáá»áŸá±á¬áẠáááºážááá¯á·ááᯠáááºááá¯á·á¡áá¯á¶ážáá»ááŒáááºááᯠáá»áœááºá¯ááºááá¯á· ááŒáá·áºááŸá¯áá²á·áááºá áááºážááá¯á·áá¯ááºáá±á¬ááºáá¯á¶ááᯠáá¬ážáááºááŒááºážááẠáááá±á¬ááºááŒá®áž áá±ážáááºážáá±á¬áá°áá«ááá»á¬ážááᯠáá±á¬áºáá±á¬ááºáá¬ááœáẠá¡áá±á¬ááºá¡áá°ááŒá áºá á±áá«áááºá Calico ááŒáá·áº áááºááẠá¡ááœáŸááºážáá áºáᯠ(nodes ááŸáá·áº pods á¡á¯ááºá á¯áá»á¬áž) á¡ááœáẠáááºááá¯ááºááá·áº ááá¹áá¬áá¯á¶ážááá¯ááºáᬠááœááºáááºáá°áá«áááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áá±á¬ááºá¡áá»áá¯ážáá»áá¯ážááŒáá·áº áá°áá«ááá»á¬ážááᯠáá»áá·áºáá¯á¶ážááá¯ááºáááºá áááºážááẠCalico áá°áá«ááá»á¬ážááŒáá·áº áá°áá«ááá¬áá¬á áá¬ážáá áºáá¯áááºážááᯠá¡áá¯á¶ážááŒá¯á áá¯á¶ááŒá¯á¶áá±ážááŸáá·áº ááœááºáááºáá®ááá¯ááºážááá¬ááŸááºáá»á¬ážááᯠ"á¡áá¬áá¬" (á¡áá¯á¶ážááŸááºá¡áá»áá¯ážá¡á á¬ážáá»á¬áž) ááᯠá¡áááºááŒá±á áœá¬ áá¬ááœááºááá¯ááºá á±áá«áááºá
á¡ááá¡ááŸááºááŒá¯ááŒááºáž- áá»á±ážáá°ážáááºááá¯áá«áááºá
source: www.habr.com