ื”ื‘ื ืช ืืคืฉืจื•ื™ื•ืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืขื Calico

ื”ื‘ื ืช ืืคืฉืจื•ื™ื•ืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืขื Calico

ืชื•ืกืฃ ื”ืจืฉืช ืฉืœ Calico ืžืกืคืง ืžื’ื•ื•ืŸ ืจื—ื‘ ืฉืœ ืžื“ื™ื ื™ื•ืช ืจืฉืช ืขื ืชื—ื‘ื™ืจ ืื—ื™ื“ ืœื”ื’ื ื” ืขืœ ืžืืจื—ื™ ื—ื•ืžืจื”, ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ืชืจืžื™ืœื™ื. ื ื™ืชืŸ ืœื”ื—ื™ืœ ืžื“ื™ื ื™ื•ืช ื–ื• ื‘ืชื•ืš ืžืจื—ื‘ ืฉืžื•ืช ืื• ืœื”ื™ื•ืช ืžื“ื™ื ื™ื•ืช ืจืฉืช ื’ืœื•ื‘ืœื™ืช ื”ื—ืœื” ืขืœื™ื” ื ืงื•ื“ืช ืงืฆื” ืžืืจื— (ื›ื“ื™ ืœื”ื’ืŸ ืขืœ ืืคืœื™ืงืฆื™ื•ืช ื”ืคื•ืขืœื•ืช ื™ืฉื™ืจื•ืช ืขืœ ื”ืžืืจื— - ื”ืžืืจื— ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืจืช ืื• ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช) ืื• ื ืงื•ื“ืช ืงืฆื” ืฉืœ ืขื•ืžืก ืขื‘ื•ื“ื” (ื›ื“ื™ ืœื”ื’ืŸ ืขืœ ืืคืœื™ืงืฆื™ื•ืช ื”ืคื•ืขืœื•ืช ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืื• ื‘ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืžืชืืจื—ื•ืช). ืžื“ื™ื ื™ื•ืช Calico ืžืืคืฉืจืช ืœืš ืœื”ื—ื™ืœ ืืžืฆืขื™ ืื‘ื˜ื—ื” ื‘ื ืงื•ื“ื•ืช ืฉื•ื ื•ืช ื‘ื ืชื™ื‘ ืฉืœ ื—ื‘ื™ืœื” ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ื™ื•ืช ื›ื’ื•ืŸ preDNAT, unrracked ื•-applyOnForward. ื”ื‘ื ื” ื›ื™ืฆื“ ืคื•ืขืœื•ืช ืืคืฉืจื•ื™ื•ืช ืืœื• ื™ื›ื•ืœื” ืœืกื™ื™ืข ื‘ืฉื™ืคื•ืจ ื”ืื‘ื˜ื—ื” ื•ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืžืขืจื›ืช ื”ื›ื•ืœืœืช ืฉืœืš. ืžืืžืจ ื–ื” ืžืกื‘ื™ืจ ืืช ื”ืžื”ื•ืช ืฉืœ ืืคืฉืจื•ื™ื•ืช ื”ืžื“ื™ื ื™ื•ืช ื”ืœืœื• ืฉืœ Calico (preDNAT, unrracked ื•-applyOnForward) ื”ืžื™ื•ืฉืžื•ืช ืขืœ ื ืงื•ื“ื•ืช ืงืฆื” ืžืืจื—, ืขื ื“ื’ืฉ ืขืœ ืžื” ืฉืงื•ืจื” ื‘ื ืชื™ื‘ื™ ืขื™ื‘ื•ื“ ืžื ื•ืช (ืฉืจืฉืจื•ืช iptabels).

ืžืืžืจ ื–ื” ืžื ื™ื— ืฉื™ืฉ ืœืš ื”ื‘ื ื” ื‘ืกื™ืกื™ืช ื›ื™ืฆื“ ืคื•ืขืœืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ื•-Calico. ืื ืœื, ืื ื—ื ื• ืžืžืœื™ืฆื™ื ืœื ืกื•ืช ืืช ื–ื” ืžื“ืจื™ืš ื‘ืกื™ืกื™ ืœืžื“ื™ื ื™ื•ืช ืจืฉืช ะธ ื”ื“ืจื›ื” ืœื”ื’ื ืช ืžืืจื— ื‘ืืžืฆืขื•ืช Calico ืœืคื ื™ ืงืจื™ืืช ืžืืžืจ ื–ื”. ื›ืžื• ื›ืŸ, ืื ื• ืžืฆืคื™ื ืฉืชื”ื™ื” ืœืš ื”ื‘ื ื” ื‘ืกื™ืกื™ืช ื‘ืขื‘ื•ื“ื” iptables ื‘ืœื™ื ื•ืงืก.

ืงืืœื™ืงื• ืžื“ื™ื ื™ื•ืช ืจืฉืช ื’ืœื•ื‘ืœื™ืช ืžืืคืฉืจ ืœืš ืœื”ื—ื™ืœ ืงื‘ื•ืฆื” ืฉืœ ื›ืœืœื™ ื’ื™ืฉื” ืœืคื™ ืชื•ื•ื™ื•ืช (ืขืœ ืงื‘ื•ืฆื•ืช ืฉืœ ืžืืจื—ื™ื ื•ืขื•ืžืกื™ ืขื‘ื•ื“ื”/ืชืจืžื™ืœื™ื). ื–ื” ืžืื•ื“ ืฉื™ืžื•ืฉื™ ืื ืืชื” ืžืฉืชืžืฉ ื‘ืžืขืจื›ื•ืช ื”ื˜ืจื•ื’ื ื™ื•ืช ื‘ื™ื—ื“ - ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช, ืžืขืจื›ืช ื™ืฉื™ืจื•ืช ืขืœ ื—ื•ืžืจื” ืื• ืชืฉืชื™ืช kubernetes. ื‘ื ื•ืกืฃ, ืืชื” ื™ื›ื•ืœ ืœื”ื’ืŸ ืขืœ ื”ืืฉื›ื•ืœ (ื”ืฆืžืชื™ื) ืฉืœืš ื‘ืืžืฆืขื•ืช ืงื‘ื•ืฆื” ืฉืœ ืžื“ื™ื ื™ื•ืช ื”ืฆื”ืจืชื™ืช ื•ืœื”ื—ื™ืœ ืžื“ื™ื ื™ื•ืช ืจืฉืช ืขืœ ืชืขื‘ื•ืจื” ื ื›ื ืกืช (ืœื“ื•ื’ืžื”, ื“ืจืš ืฉื™ืจื•ืช NodePorts ืื• External IPs).

ื‘ืจืžื” ื”ื‘ืกื™ืกื™ืช, ื›ืืฉืจ 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 ื™ื•ืฆืจืช ืžืžืฉืง ื•ืชื™ืง ืขื‘ื•ืจ ื›ืœ ืขื•ืžืก ืขื‘ื•ื“ื”, ื›ื™ืฆื“ ื”ื™ื ืื•ื›ืคืช ืžื“ื™ื ื™ื•ืช? ืœืฉื ื›ืš, Calico ื™ื•ืฆืจ ื•ื•ื™ื ื‘ืฉืจืฉืจืื•ืช ืฉื•ื ื•ืช ืฉืœ ื ืชื™ื‘ ืขื™ื‘ื•ื“ ื”ืžื ื•ืช ื‘ืืžืฆืขื•ืช iptables.

ื”ืชืจืฉื™ื ืฉืœื”ืœืŸ ืžืฆื™ื’ ืืช ื”ืฉืจืฉืจืื•ืช ื”ืžืขื•ืจื‘ื•ืช ื‘ืขื™ื‘ื•ื“ ืžื ื•ืช ื‘-iptables (ืื• ื‘ืชืช-ืžืขืจื›ืช netfilter). ื›ืืฉืจ ืžื ื” ืžื’ื™ืขื” ื“ืจืš ืžืžืฉืง ืจืฉืช, ื”ื™ื ืขื•ื‘ืจืช ืชื—ื™ืœื” ื“ืจืš ืฉืจืฉืจืช PREROUTING. ืœืื—ืจ ืžื›ืŸ ืžืชืงื‘ืœืช ื”ื—ืœื˜ืช ื ื™ืชื•ื‘, ื•ื‘ื”ืชื‘ืกืก ืขืœ ื›ืš, ื”ื—ื‘ื™ืœื” ืขื•ื‘ืจืช ื“ืจืš INPUT (ืžื•ืคื ื” ืœืชื”ืœื™ื›ื™ื ืžืืจื—) ืื• FORWARD (ืžื•ืคื ื™ื ืœืคื•ื“ ืื• ืœืฆื•ืžืช ืื—ืจ ื‘ืจืฉืช). ืžื”ืชื”ืœื™ืš ื”ืžืงื•ืžื™, ื”ื—ื‘ื™ืœื” ืขื•ื‘ืจืช ื“ืจืš ืฉืจืฉืจืช ื”-OUTPUT ื•ืœืื—ืจ ืžื›ืŸ POSTROUTING ืœืคื ื™ ืฉื ืฉืœื—ืช ืœื›ื‘ืœ.

ืฉื™ืžื• ืœื‘ ืฉื”ืคื•ื“ ื”ื•ื ื’ื ื™ืฉื•ืช ื—ื™ืฆื•ื ื™ืช (ืžื—ื•ื‘ืจืช ืœ-Veth) ืžื‘ื—ื™ื ืช ืขื™ื‘ื•ื“ iptables. ื‘ื•ืื• ื ืกื›ื:

  • ืชื ื•ืขื” ืžื•ืขื‘ืจืช (ื ื˜, ืžื ื•ืชื‘ืช ืื• ืืœ/ืžืคื•ื“) ืขื•ื‘ืจืช ื‘ืจืฉืชื•ืช PREROUTING - FORWARD - POSTROUTING.
  • ื”ืชื ื•ืขื” ืœืชื”ืœื™ืš ื”ืžืืจื— ื”ืžืงื•ืžื™ ืขื•ื‘ืจืช ื“ืจืš ืฉืจืฉืจืช PREROUTING - INPUT.
  • ื”ืชื ื•ืขื” ืžืชื”ืœื™ืš ื”ืžืืจื— ื”ืžืงื•ืžื™ ืขื•ื‘ืจืช ื“ืจืš ืฉืจืฉืจืช OUTPUT - POSTROUTING.

ื”ื‘ื ืช ืืคืฉืจื•ื™ื•ืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืขื Calico

Calico ืžืกืคืงืช ืืคืฉืจื•ื™ื•ืช ืคื•ืœื™ืกื” ื”ืžืืคืฉืจื•ืช ืœืš ืœื”ื—ื™ืœ ืคื•ืœื™ืกื•ืช ื‘ื›ืœ ื”ืจืฉืชื•ืช. ืขื ื–ืืช ื‘ื—ืฉื‘ื•ืŸ, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืืคืฉืจื•ื™ื•ืช ืชืฆื•ืจืช ื”ืžื“ื™ื ื™ื•ืช ื”ืฉื•ื ื•ืช ื”ื–ืžื™ื ื•ืช ื‘-Calico. ื”ืžืกืคืจื™ื ื‘ืจืฉื™ืžืช ื”ืืคืฉืจื•ื™ื•ืช ืœืžื˜ื” ืชื•ืืžื™ื ืœืžืกืคืจื™ื ื‘ืชืจืฉื™ื ืœืžืขืœื”.

  1. ืžื“ื™ื ื™ื•ืช ื ืงื•ื“ืช ืงืฆื” (ืชืจืžื™ืœ) ืฉืœ ืขื•ืžืก ืขื‘ื•ื“ื”
  2. ืžื“ื™ื ื™ื•ืช ื ืงื•ื“ืช ืงืฆื” ืžืืจื—
  3. ืืคืฉืจื•ืช ApplyOnForward
  4. ืžื“ื™ื ื™ื•ืช PreDNAT
  5. ืžื“ื™ื ื™ื•ืช ืœืœื ืžืขืงื‘

ื”ื‘ื” ื ืชื—ื™ืœ ื‘ื‘ื—ื™ื ืช ืื•ืคืŸ ื”ื—ืœืช ืžื“ื™ื ื™ื•ืช ืขืœ ื ืงื•ื“ื•ืช ืงืฆื” ืฉืœ ืขื•ืžืก ืขื‘ื•ื“ื” (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 ื”ื™ื ืืคืฉืจื•ืช ืคืฉื•ื˜ื” ื•ื™ืขื™ืœื” ื™ื•ืชืจ ืื ืืชื” ืจื•ืฆื” ืœืขื‘ื“ ื—ื™ื‘ื•ืจื™ื ืžื”ืจ ื›ื›ืœ ื”ืืคืฉืจ. ืœื“ื•ื’ืžื”, ืื ืืชื” ืžืฉืชืžืฉ ืžืืกื™ื‘ื™ memcache ืื• ื›ืืžืฆืขื™ ื ื•ืกืฃ ืœื”ื’ื ื” ืžืคื ื™ DDOS.

ืงืจื ืืช ื–ื” ื‘ืœื•ื’ (ืื• ื”ืชืจื’ื•ื ืฉืœื ื•) ืœืžื™ื“ืข ื ื•ืกืฃ, ื›ื•ืœืœ ืžื‘ื—ื ื™ ื‘ื™ืฆื•ืขื™ื ื‘ืืžืฆืขื•ืช ืžื“ื™ื ื™ื•ืช ืœืœื ืžืขืงื‘.

ื›ืืฉืจ ืืชื” ืžื’ื“ื™ืจ ืืช ื”ืืคืฉืจื•ืช "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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”