ᨠCalico á ááłá¨ áá¨áĽ áááá á¨áááľáá á áľá°áááá˝áᣠá¨áášáá áá˝áá˝á áĽá ááśá˝á ááá á á
á¨á°ááá° á ááŁáĽ áá á°á á¨á ááłá¨ áá¨áĽ ááá˛áá˝á áŤáááŁáᢠáĽááá
áááŞáŤáá˝ á áľá áŚáł ááľáĽ áá°áá አááá ááááá¨áłá¸á ááá á áá á¨á ááłá¨ áá¨áĽ ááá˛áá˝ ááá áá˝ááá˘
áá
á˝áá á¨áŠá áááľáľ áĽá á¨áŤáᎠá ááłá¨ áá¨áĽ ááá˛áá˝ áĽáá´áľ áĽáá°áá አáá á¨áłá áááᤠáĽááłáááľ áŤáľáŁáᢠáŤááá, áĽáá˛áááŠáľ áĽááááŤáá
áŤááŽ
á áá á¨áłá á°á¨á, áŤáᎠááľá á¨á ááłá¨ áá¨áĄ áá á˛áŤááá (á¨áá á áłá˝ áŤááá ááľá áááá¨áą), áááŁá á¨á¤á°áááľ á áááá˝ (áŹáľ) á áá áá á¨á áľá°ááá áá áŤáááá. á ááą á¨á°áá¨á áľáŤáá á¨áá áááŁá á áááá˝ áá° á áľá°ááá áááŁá áĽá á¨á áŤáá á ááłá¨ áá¨áĽ á áááá˝ áĽáá°áᣠá á°ááłáłá ááááľ áá¨ááááᢠá ááŁáŞáŁ Calico áĽááá á á áááážá˝ caliXXX áĽá á°á¨áá¸áᢠáľáŤáá á¨áááŁá á áááŁá á áááá˝ á áŠá áľáááᣠááą á ááľ áá áá áĽáá°ááá á iptables ááľáĽ áŤáááᢠáľááá ᣠáľáŤáá áá° ááľ á˛ááŁáŁ á¨á áľá°ááá áĽááł áá°ááááá˘
Calicoá á ááŤááľ á¨áŠá áááľáľ ááľááá ááááľ ááᣠá áá¨á°áá ááአá¨áášáá á áááá˝ (áŹáľ) áá° á¨áľáŤ áŤá áááľ áá˝ááᢠá¨áłá˝ áŁáá ááłáᣠ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
...
áŤáᎠááĽáŤááłááą á¨áĽáŤ áŤá á¨áŹáľ á áááá˝á áľááááĽáᣠááá˛áá˝á áĽáá´áľ áŤáľáá˝áá? áá
áá áááľá¨á, áŤáᎠiptables á áá áá á¨ááŹáľ ááááŁá áŞáŤ ááááľ á á°ááŤáŠ á°áá°ááśá˝ ááľáĽ ááá ááá˝á áááĽáŤá.
á¨áá á áłá˝ áŤáá ááľá á iptables (ááá á netfilter ááĄáľ áľáááľ) ááľáĽ á ááŹáľ áá°áľ ááľáĽ á¨á°áŤá°áąáľá á°áá°ááśá˝ áŤáłáŤáᢠá ááľ ááŹáľ á ááľááá á áááá˝ á˛á°ááľ ááááŞáŤ á PREROUTING á°áá°ááľ ááľáĽ áŤáááᢠá¨ááŤá á¨áááŞáŤ ááłá áá°á¨áá, áĽá á áá áá°á¨áľ, ááŹáą á INPUT (áá°áśá˝á áááľá°áááľ á°áááˇá) ááá FORWARD (áá° ááľ ááá á ááľááአáá áá° áá ááľááá ááááľ áááŤá). á¨á áŤáŁá˘á áá°áľ, ááŹá áááąá á¨ááá¨áą á ááľ á OUTPUT áĽá á¨ááŤá á POSTROUTING á°áá°ááľ ááľáĽ áŤááá.
ááą áĽáá˛á á¨á ááá˛ááľ ááááŁá áŞáŤ á ááá ááŤá á áŤá (á¨áŹáľ áá á¨á°ááá) áááá áἠáá á. áĽáá áááááĄ-
- á¨ááľá°ááá፠áľáŤáá (natáŁá¨á°áááᨠááá áá° ááľ) á PREROUTING - FORWARD - POSTROUTING á°áá°ááśá˝ ááľáĽ áŤáááá˘
- áľáŤáá áá° á áŤáŁá˘áŤá á áľá°ááá áá°áľ á PREROUTING - INPUT á°áá°ááľ ááľáĽ áŤáááá˘
- á¨á áŤáŁá˘á á áľá°ááá áá°áľ á¨áááŁá áľáŤáá á OUTPUT - POSTROUTING á°áá°ááľ ááľáĽ áŤáááá˘
áŤáᎠá ááá á°áá°ááśá˝ áá ááá˛áá˝á áĽáá˛á°ááĽáŠ á¨ááŤáľá˝áá á¨ááᲠá ááŤáŽá˝á áá°áŁáᢠáŤáá á á áĽááŻá˝á áááᣠá áŤáᎠááľáĽ áŤááľá á¨á°ááŤáŠ á¨ááᲠáá
á á ááŤáŽá˝á áĽáááá¨áľá˘ á¨áłá˝ áŁááľ á¨á ááŤáŽá˝ áááá ááľáĽ áŤááľ ááĽáŽá˝ á¨áá áŁáá áĽááá ááá፠ááľáĽ áŤááľ ááĽáŽá˝ áá ááááłáá˘
- á¨áĽáŤ áŤá á¨áá¨á¨áť ááĽáĽ (ááľ) ááá˛
- á¨á áľá°ááá á¨áá¨á¨áť ááĽáĽ ááá˛
- á°ááĽáOnForward á ááŤá
- PreDNAT ááá˛
- ááľáľá áŤáá°á°á¨áá áľ ááá˛
á¨áĽáŤ áŤá á¨áá¨á¨áť ááĽáŚá˝á (Kubernetes pods ááá OpenStack VMs) ááá˛áá˝ áĽáá´áľ áĽáá°áá°áá አá áááá¨áľ áĽááááᣠáĽá á¨á፠á¨á áľá°ááá á¨áá¨á¨áť ááĽáŚá˝á á¨ááᲠá ááŤáŽá˝á áĽáááá¨áľá˘
á¨áĽáŤ áŤá á¨áá¨á¨áť ááĽáŚá˝
á¨áĽáŤ áŤá á¨áá¨á¨áť ááĽáĽ ááᲠââ(1)
áá ᨠkubernetes ááľáá ááá á á á ááŤá áá. áŤáᎠᨠKubernetes NetworkPolicy áá á áĽáŽ ááľáŤáľá áá°ááá ááá áá á°á¨á᪠ááá˛áá˝á áŤáááŁá - Calico NetworkPolicy áĽá GlobalNetworkPolicy. áŤáᎠááĽáŤááłááą ááľ (á¨áĽáŤ áŤá) á°áá°ááľ áááĽáŤá áĽá á INPUT áĽá OUTPUT á°áá°ááśá˝ ááľáĽ ááĽáŤá áááľ áá° FORWARD á°áá°ááľ ááŁáŞáŤ á á¨á´á áá ááá ááá˝á áááĽáŤá.
á áľá°ááá á¨áá¨á¨áť ááĽáŚá˝
á¨á áľá°ááá á¨áá¨á¨áť ááĽáĽ ááᲠââ(2)
ᨠCNI (á¨áŽáá´ááá á ááłá¨áá¨áĽ á áááá˝) á á°á¨á᪠ᨠCalico ááá˛áá˝ á áľá°áááá áĽáŤáąá ááá á á á˝ááł áá°áŁá. á áŤáᎠááľáĽ á¨á áľá°áááá á áááá˝ áĽá á áľááá á¨áá á¨áá°áĽ ááĽáŽá˝á á ááá¨áľ á¨á áľá°ááá áá¨á¨áť ááĽáĽ ááá á áá˝áá. á¨áá á áŤá á¨ááᲠááľáá¸á፠á¨áá¨áááá á INPUT áĽá OUTPUT á°áá°ááśá˝ ááľáĽ áŁáá á¨ááŁáŞáŤ á°áá á¨áĽ á áá áá ááᢠá¨áĽáá áá áĽáá°ááłá¨á (2) á ááľááá ááááľ/á áľá°ááá áá áá áŤáŁá˘áŤá áá°áśá˝ á°ááťá ááááᢠáááľáᣠá á áľá°ááá á¨áá¨á¨áť ááĽáĽ áá á¨áá°áá á ááᲠá¨áá áŠáŁ áá° ááľá á¨áááľ/á¨áááľ áľáŤáá áá ááἠá áŤááŁáᢠááá áá á¨áŤáᎠááá˛áá˝á á áá áá áá áľá°ááá á áĽá áááłáá˝á áľáŤááá áááááľ á ááľ á áááá˝/á ááŁáĽ áá°áŁáᢠáá áá°ááŤáŠ á ááłá¨ áá¨áŚá˝ ááá˛áá˝á á¨ááľá°áłá°á áá°áľá á áĽá á áŤááááᢠá¨áááľá°á á°á áááľá áááťáťá á¨á áľá°ááá á¨áá¨á¨áť ááĽáĽ ááá˛áá˝á áááá ááá á áľááá á¨á á ááá ááłá ááá˘
á¨ááľá°ááá ááᲠ(3)
á¨ApplyOnForward á ááŤá á áŤáᎠáááŁá ááľááá ááᲠááľáĽ á á áľá°ááá á¨áá°ááááá áľáŤáá á¨áᎠá á áľá°ááá á¨áá¨á¨áť ááĽáĽ áá á ááŤáá áľáŤáá áá ááá˛áá˝ áĽáá˛á°áá አáŤáľá˝ááᢠáá áá° á áŤáŁá˘áŤá ááľ ááá á á ááłá¨ áá¨áĄ áá áá° áá áŚáł á¨áá°ááááá áľáŤáá áŤáŤáľáłáᢠáŤáᎠPreDNAT á ááá áá áááŞáŤáá˝ áĽá ááľáľá áĽááłáá°á¨áá áľ áá á ááĽá áĽáá˛áá áááááᣠá¨áá¨á°ááľá áááá˝ áááá¨áąá˘ á á°á¨ááŞá á áá áŚááááááľ á¨áášáá áŤáá°á ááá áśááľáá NAT áĽá á áá á áááá áľ áá á¨á áľá°ááá áľáŤááá ááááŁá á ááŤáááá áá˝ááá˘
ááááąá á¨á áľá°ááá áá°áśá˝ áĽá ááľáśá˝ á°ááłáłá á¨á ááłá¨ áá¨áĽ ááá˛á áá°áá á áŤáľáááááľ á¨ApplyOnForward á ááŤáá áá áá á áŤáľáááááľáᢠá¨ááŤáľáááá ááá á˘áá áááááá á¨á áľá°ááá ááĽáĽ áĽá á¨áľáŤ áŤá á¨áá¨á¨áť ááĽáĽ (ááľ) áá፠ááá á ááᢠáŤáᎠá¨áá¨á¨áťá ááĽáĽ á áááľ (á¨á áľá°ááá ááĽáĽ ááá á¨áľáŤ áŤá) ááá ááá áá á áááŤáá˝ áá á¨á°áá°á¨á° ááá˛á áááľáá¸á áĽáá ááá˘
á¨á áľá á˛ááľ ááᲠ(4)
á áŠá áááľáľ á¨á áááááľ á áá á áŤá áá°áŚá˝ ᨠNodePorts á ááŤáá á áá áá ááá á á ááŤá (áŤáᎠá˛á áá) á¨áááľá°á á áááá˝á ááá á¨áá á áááá˝á á ááŤáŽá˝á á áá áá á ááľá°ááá áááᥠáá˝ááᢠKube-proxy á¨á áááááľ áá á¨á°áŤáŤááá áᢠáľáŤáá á˛á¤áá¤á˛á á áá áá áá°ááá á áááááľ ááľáá˝ áŤáľá°áŤáááᢠá¨áá á áááᣠá ááľáááľáľ á áŠá ááááŁá á¨áľáŤáá ááᲠáĽáá´áľ áá á¨ááŤáľáá˝ááľ? áĽááá ááá˛áá˝ áľáŤáá á DNAT á¨áá°áŤáą á ááľ áá°áá áŠá ááá¨ááἠ(áá á á á áľá°ááá áĄáá°áĽ áĽá á á°ááá á áááááľ ááŤá¨á áŤáá áŤááł)ᣠáŤáᎠ"preDNAT: true" á¨ááŁá á¨áááŁáááľááá ááᲠáááŞáŤ á á áá§áá˘
á áľá-á˛á¤áá¤áľ á˛áá áĽááá ááá˛áá˝ á (4) á á˛áŤááŤá - á áááá á áá á¨áĽ á PREROUTING á°áá°ááľ - áá˛áŤáá á¨á˛á¤áá¤á˛ á ááľ áá°áá áŤáᢠá¨áĽááá ááá˛áá˝ á á°ááŁá á á áľáŤáá áá°áľ ááľáĽ á áŁá áá°á áĽá áľááá¨á°áľ á¨á°ááá°á á¨ááᲠá á°á á°á¨á°á áĽáá á áá°á¨á°ááᢠáááᣠá¨á áľá-á˛á¤áá¤á˛ ááá˛áá˝ á ááŤá¨áá¸á á¨áá°áá áŞáŤáá á á°á á°á¨á°á áŤá¨áĽáŤáá˘
á á
áľá-á˛á¤áá¤áľ ááá˛áá˝ á˛áá áŠáŁ áľááááááľ áľáŤáá áá ááá
áĽá á áĽááááš ááľá
áĽáá˛áá ááááľ á áľááá ááᢠá á
áľá-DNAT ááᲠááľáĽ 'áááľ' á¨áá ááááľ á¨á°á°á¨áá áľ áľáŤáá á á áľá°ááá
ááĽáĽ ááᲠââá áá¨áááĽáᣠá¨á
áľá-DNAT ááá˛á áŤáá°áłáŤ áľáŤáá á ááŞááš á°áá°ááśá˝ áááĽááá˘
áŤáᎠááŞá˛á¤áá¤áľá á˛á áá applyOnForward á¨áááá á ááŤá ááááľ á áľááłá
á áľáááłá ááááŤáąá á áľááá á¨áľáŤáá ááľá¨áťá áá á áá°áá¨á áᢠáľáŤáá áá° á áľá°ááá áá°áľ áá፠áá˝áá, ááá áá° ááľ ááá áá ááľááá ááááľ áá°ááá áá˝áá.
ááľáľá áŤáá°á°á¨áá áľ ááᲠ(5)
á ááłá¨ áá¨áŚá˝ áĽá áá°áá áŞáŤáá˝ á áŁá
᪠ááľáĽ áľáá
ááŠááľ áááŤá¸á áá˝ááᢠá á ááłááľ á¨áŁáľ áááłáá˝ áľáá áŤáá˝ áĽá á¨á áá áá áááááśá˝á áááĽáŠ áá˝ááᢠáá
áŽááľáŤáá (á¨ááááľ ááľááá ááá áá á áŤá) á¨ááľáłááľ á˝ááł áĽáá˛áŤáá
ááŤá°áá áá˝ááᢠá á°áááśáŁ áĽááá
á á áááľ á áááŹá˝áá˝ á ááááľ áá ááááľáŁ áŽááľáŤáąá áĽáŤáľá áááá ááá áá°áá¨áᣠááá áŽááľáŤááľá áááá á¨iptables á
áá˝á ááá á ááĽááľá˘ áááááśá˝á á á°áťá ááĽááľ áááľáŹáľ á¨ááá á áŤáᎠááľáĽ áŤáá°á¨á°á ááᲠááá áĽá áááŁá á ááŤá ááᢠáááłá, ááá á¨á°á áá
áá
á á ááĽáĽ
á áŤáᎠáááŁáááľááá ááᲠááľáĽ á¨"doNotTrack: true" á ááŤáá á˛áŤááá **áŤáá°á¨áłá°á** áááŞáŤ áááá áĽá á ááááľ ááŹáľ ááááŁá áŞáŤ á§á᧠ááľáá áá á áŁá áá°á áĽá áá°áá áŤáᢠá¨áá áŤááá áĽááá ááá፠áľáááá¨áľáŁ ááľáľá (conntrack) á¨áááአá ááľ ááľáľá á¨ááá¸á ááá˛áá˝ á áĽáŹá á áá á¨áĽ ááľáĽ á PREROUTING áĽá OUTPUT á°áá°ááśá˝ ááľáĽ áá°áá áŤáᢠá ááľ ááŹáľ ááľáľá áŁáá°á°á¨áááľ ááᲠá˛áááľáŁ áá፠ááŹáľ á¨áááááľ ááľáľáá ááá°áá¨á ááááľ áá°á¨áá áłáᢠáá áááľ:
- ááľáľá áŤáá°á°á¨áá áľ ááᲠá áĽáŤááłááą ááŹáľ áá°á¨áľ áá°áá áŤáᢠá¨áááááľ (ááá áá°áľ) á˝áá°-ááłáĽ á¨ááᢠá¨áááááśá˝ áĽáĽá¨áľ áĽá á áá áá¤áśá˝ á ááľ
- áááąáá á¨áĽáŤá áĽá á¨ááá˝ áľáŤáá ááááľ á¨áááᣠááááąá áá° ááľáĽá áá áá° á᪠á¨ááᣠá á áŤáľáááááłá (áŤáᎠá á°áááś á¨ááá˝ áľáŤááá á á°ááá°á áá°á¨áľ ááááá¨áľ áŽááľáŤááľá áľááá áá)á˘
- ááľáľá áŤáá°á°á¨áá áľ ááᲠá Kubernetes á¨áľáŤ áŤááá˝ (pods) á áá°áŤá, ááááŤáąá á áá áááł á¨ááľ á¨áááŁáá áááááľ ááá¨áłá°á ááá ááááľ á¨áá.
- á¤áá¤á˛ ááľáľá áŤáá°á°á¨ááá¸á ááŹáśá˝ áá á áľááá á áá°áŤá (á¨ááá ᨠNAT áŤááł áľáŤá á á°ááá áľáááŤá¨áá˝)á˘
- ááľáľá á ááá ááᲠááľáĽ "áááá áááľ" á¨áááá á á á˛áŤáá ááá áĽá˝áá˝ ááľáľá áĽááłáá°á°á¨ááŁá¸á ááááľ áá°á¨ááŁá¸ááᢠáá áááá áĽááľá á¨áááááľ á áá°áááŁáľááá ááľáľá á ááá°á¨ááŁá¸á ááá˛áá˝ áľáááááą ááŹáśá˝ (áĽá á áĽááá áľáŤáá á áá°á á ááľáľá á¨áá°á¨ááŁá¸á ááá˛áá˝ áĽáá˛áŤáá ááááľ) á áŁá á áľááá ááá˘
- áŤáá°á¨áłá°á ááá˛áá˝ á ááŹáľ ááááŁá áŞáŤ á§áá§á ááááŞáŤ áá áá°áá áŤáᢠáá á¨áŤáᎠááá˛áá˝á á˛ááĽáŠ ááá¨áłáľ á áŁá á áľááá áá. á¨ááľ ááᲠá áľáĽáááĄ1 áĽá ááľáľá áŤáá°á°á¨áá áľ ááᲠá¨áľáĽáááĄ1000 áá áááááľ áá˝ááᢠááá á ááááᢠááľáľá áŤáá°á°á¨áá áľ ááᲠáááľ ááᲠá¨áá°á¨á á ááľ áá°áá áŤáᢠááľáľá áŤáá°á°á¨ááŁá¸á ááá˛áá˝ á¨á ááťá¸á áľáĽááá á¨ááŤá¨áĽáŠáľ á ááŤá¨áá¸á áĽáť ááá˘
á¨doNotTrack ááᲠá ááą ááá ááá˛áá á ááááľ ááŹáľ áááá áŞáŤ á§á᧠ááľáá áá ááľáá¸á áľáááᣠCalico doNotTracká á˛á áá á¨á áááŹá˝á áŚááááááľá á ááŤá áááá˝ áŤáľááľáłáᢠá¨ááŹáľ ááááŁá áŞáŤ á˛áŤááŤáá á ááĽááľáŁ ááľáľá áŤáá°á°á¨áá áľ(5) áááŞáŤá á¨áááá¸áá á¨áááŞáŤ ááłááá˝ á ááľ áá°áá áŠá áἠáá áᢠáľáŤáá áá° á áľá°ááá áá°áľ áá፠áá˝áá, ááá áá° ááľ ááá áá ááľááá ááááľ áá°ááá áá˝áá.
áá¤áśá˝
á áŤáᎠááľáĽ áŤááľá á¨á°ááŤáŠ á¨ááᲠá ááŤáŽá˝á (á¨á áľá°ááá áá¨á¨áť ááĽáĽáŁ á áááŚááááááľáŁ ááŞá˛á¤áá¤áľ áĽá áŤáá°á¨áłá°á) áĽá á ááŹáľ ááááŁá áŞáŤ áąáŤ áá áĽáá´áľ áĽáá°áá°áá አá°áááá°ááᢠáĽáá´áľ áĽáá°áá አáá¨áłáą áá¤áłá áĽá á áľá°ááá ááá˛áá˝á ááááááľ áá¨áłáᢠá áŤáᎠá ááá áá á¨á ááłá¨ áá¨áĽ ááá˛á á áá áá áá፠áá (á¨á áááá˝ áĽá ááľáśá˝ áĄáľá) áĽá á¨á°ááŤáŠ áááŞáŤáá˝ áá ááá˛áá˝á áá°áá á áá˝ááᢠáá á¨á°á áááľ áĽá á¨á ááłá¨ áá¨áĽ ááľá áŁáááŤáá˝ á¨áŤáᎠááá˛áá˝ áá á ááľ á¨ááᲠááá á áá áá "áááá ááá" (á¨áá¨á¨áť ááĽáĽ ááááśá˝á) á á ááľ áá áĽáá˛á áĽá áŤáľá˝áá¸ááá˘
ááľááᥠáááľáá áĽááááá
ááá: hab.com