αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αž‡αžΆαž˜αž½αž™ Calico

αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αž‡αžΆαž˜αž½αž™ Calico

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž”αžŽαŸ’αžαžΆαž‰ Calico αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž‡αž½αžšαž’αŸ†αž‘αžΌαž›αžΆαž™αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž αžΆαžαžœαŸ‚αžš αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αž“αž·αž„αž•αžαŸ” αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„ namespace αž¬αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžŸαž€αž›αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡ αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ (αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ - αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž’αžΆαž…αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž¬αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž) ឬ αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžš (αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžš αž¬αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αŸ„αŸ‡)αŸ” αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ Calico αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαžœαž·αž’αžΆαž“αž€αžΆαžšαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž“αŸ…αž…αŸ†αžŽαž»αž…αž•αŸ’αžŸαŸαž„αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž›αžΌαžœαž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΌαž…αž‡αžΆ preDNAT, unracked αž“αž·αž„ applyOnForward αŸ” αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžΆαž…αž‡αž½αž™αž€αŸ‚αž›αž˜αŸ’αž’αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž‡αž˜αŸ’αžšαžΎαžŸαž‚αŸ„αž›αž€αžΆαžšαžŽαŸ Calico αž‘αžΆαŸ†αž„αž“αŸαŸ‡ (preDNAT, unracked αž“αž·αž„ applyOnForward) αžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αžŠαŸ„αž™αžŸαž„αŸ’αž€αžαŸ‹αž’αŸ’αž„αž“αŸ‹αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž›αžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ (αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ iptabels)αŸ”

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αž“αž·αž„ Calico αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸαž™αžΎαž„αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαŸ” αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ ΠΈ αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αž€αžΆαžšαž–αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž”αŸ’αžšαžΎ Calico αž˜αž»αž“αž–αŸαž›αž’αžΆαž“αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ” αž™αžΎαž„αž€αŸαžšαŸ†αž–αžΉαž„αžαžΆαž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡αŸ” iptables αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αŸ”

αž€αžΆαž›αžΈαž€αžΌαŸ” αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αžŸαž€αž› αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž’αŸ’αž“αž€β€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αžŸαŸ†αžŽαž»αŸ†β€‹αž“αŸƒβ€‹αž…αŸ’αž”αžΆαž”αŸ‹β€‹αž…αžΌαž›β€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αžŠαŸ„αž™β€‹αžŸαŸ’αž›αžΆαž€ (αž…αŸ†αž–αŸ„αŸ‡β€‹αž€αŸ’αžšαž»αž˜β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„β€‹αž”αž“αŸ’αž‘αž»αž€β€‹αž€αžΆαžšαž„αžΆαžš/αž•αž)αŸ” αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŽαžΆαžŸαŸ‹αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ - αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž›αžΎαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„ αž¬αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ kubernetes αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž€αžΆαžšαž–αžΆαžšαž…αž„αŸ’αž€αŸ„αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αžαŸ’αž“αžΆαŸ†αž„) αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αŸ’αžšαž€αžΆαžŸ αž“αž·αž„αž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αž‘αŸ…αž“αžΉαž„αž…αžšαžΆαž…αžšαžŽαŸαž…αžΌαž› (αž§αž‘αžΆαž αžšαžŽαŸ αžαžΆαž˜αžšαž™αŸˆαžŸαŸαžœαžΆ NodePorts ឬ IPs αžαžΆαž„αž€αŸ’αžšαŸ…)αŸ”

αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 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

αžŠαŸ„αž™αžŸαžΆαžš Calico αž”αž„αŸ’αž€αžΎαžαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ veth αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαž“αžΈαž˜αž½αž™αŸ— αžαžΎαžœαžΆαž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…? αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ Calico αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž•αŸ’αž›αžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎ iptables αŸ”

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ iptables (αž¬αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„ netfilter) αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž˜αž€αžŠαž›αŸ‹αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžαžΆαž‰ αžŠαŸ†αž”αžΌαž„αžœαžΆαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ PREROUTING αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž›αžΎαž•αŸ’αž›αžΌαžœαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„ αž αžΎαž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž“αŸαŸ‡ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‘αžΆαŸ†αž„ INPUT (αžŠαžΉαž€αž“αžΆαŸ†αž‘αŸ…αž€αžΆαž“αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“) ឬ FORWARD (αžαž˜αŸ’αžšαž„αŸ‹αž‘αŸ…αž•αž αž¬αžαŸ’αž“αžΆαŸ†αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž›αžΎαž”αžŽαŸ’αžαžΆαž‰)αŸ” αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹ OUTPUT αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ POSTROUTING αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ αž˜αž»αž“αž–αŸαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αžαžΆαž˜αžαŸ’αžŸαŸ‚αŸ”

αž…αŸ†αžŽαžΆαŸ†αžαžΆ pod αž€αŸαž‡αžΆαž’αž„αŸ’αž‚αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ… (αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… veth) αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš iptables αŸ” αžŸαžΌαž˜αžŸαž„αŸ’αžαŸαž”αŸ–

  • αž…αžšαžΆαž…αžšαžŽαŸβ€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αž”αž“αŸ’αž (ណអត αž•αŸ’αž›αžΌαžœ αž¬β€‹αž‘αŸ…/αž–αžΈβ€‹αž•αž) αž†αŸ’αž›αž„αž€αžΆαžαŸ‹β€‹αž…αŸ’αžšαžœαžΆαž€αŸ‹β€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αž”αž“αŸ’αž - αž”αž‰αŸ’αž‡αžΌαž“β€‹αž”αž“αŸ’αž - αž€αŸ’αžšαŸ„αž™β€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αž”αž“αŸ’αžαŸ”
  • αž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžαžΆαž˜αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ PREROUTING - INPUT αŸ”
  • αž…αžšαžΆαž…αžšαžŽαŸαž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ OUTPUT - POSTROUTING αŸ”

αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αž‡αžΆαž˜αž½αž™ Calico

Calico αž•αŸ’αžαž›αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžŠαŸ„αž™αž‚αž·αžαž€αŸ’αž“αž»αž„αž…αž·αžαŸ’αžαž“αŸ„αŸ‡ αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Calico αŸ” αž›αŸαžαž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž‡αž˜αŸ’αžšαžΎαžŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αž›αŸαžαž€αŸ’αž“αž»αž„αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž›αžΎαŸ”

  1. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžš (αž•αž)
  2. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒαž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αžšαž”αžŸαŸ‹αž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡
  3. αž‡αž˜αŸ’αžšαžΎαžŸ ApplyOnForward
  4. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ PreDNAT
  5. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž˜αž·αž“αžαžΆαž˜αžŠαžΆαž“

αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžš (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 αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰ αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž±αŸ’αž™αž”αžΆαž“αž›αžΏαž“αžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž’αŸ† memcache αž¬αž‡αžΆαžœαž·αž’αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜ DDOS.

αž’αžΆαž“αž“αŸαŸ‡αŸ” αž”αŸ’αžšαž€αžΆαžŸαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αžŽαŸ’αžŠαžΆαž‰ (ឬ αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αžαžΆαž˜αžŠαžΆαž“αŸ”

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž‡αž˜αŸ’αžšαžΎαžŸ "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 αŸ”

αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αŸ– αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžαŸ’αž›αŸ‚αž„αž’αŸ†αžŽαžšαž‚αž»αžŽ αž›αŸ„αž€ Sean Crampton ΠΈ Alexa Pollitta αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹