Hoʻomaopopo i nā koho kulekele pūnaewele me Calico

Hoʻomaopopo i nā koho kulekele pūnaewele me Calico

Hāʻawi ka Calico network plugin i kahi ākea o nā kulekele pūnaewele me kahi syntax i hui pū ʻia e pale i nā pūʻali lako, nā mīkini virtual a me nā pods. Hiki ke hoʻohana ʻia kēia mau kulekele i loko o kahi inoa inoa a i ʻole nā ​​kulekele pūnaewele puni honua e pili ana wahi hoʻokipa (no ka pale ʻana i nā noi e holo pololei ana ma luna o ka mea hoʻokipa - hiki i ka mea hoʻokipa ke lilo i kikowaena a i ʻole he mīkini virtual) a i ʻole ka palena o ka hana (e pale i nā noi e holo ana i loko o nā pahu a i ʻole nā ​​mīkini virtual hoʻokipa). ʻAe nā kulekele Calico iā ʻoe e hoʻohana i nā ana palekana ma nā wahi like ʻole i ke ala o kahi packet me ka hoʻohana ʻana i nā koho e like me preDNAT, unraracked, a applyOnForward. ʻO ka hoʻomaopopo ʻana i ka hana ʻana o kēia mau koho hiki ke kōkua i ka hoʻomaikaʻi ʻana i ka palekana a me ka hana o kāu ʻōnaehana holoʻokoʻa. Hōʻike kēia ʻatikala i ke ʻano o kēia mau koho kulekele Calico (preDNAT, unraracked a applyOnForward) i hoʻopili ʻia i nā hopena hoʻokipa, me ka manaʻo nui i nā mea e hana nei i nā ala hoʻoili packet (iptabels chains).

Ke manaʻo nei kēia ʻatikala he ʻike kumu kāu e pili ana i ka hana ʻana o nā kulekele ʻoihana ʻo Kubernetes a me Calico. Inā ʻaʻole, paipai mākou e hoʻāʻo kumu aʻo kumu aʻoaʻo kulekele pūnaewele и aʻoaʻo hoʻomalu hoʻokipa e hoʻohana ana iā Calico ma mua o ka heluhelu ʻana i kēia ʻatikala. Manaʻo mākou e loaʻa iā ʻoe kahi ʻike kumu o ka hana ipoku ma linux.

ʻO Kalico kulekele pūnaewele puni honua hiki iā ʻoe ke hoʻopili i kahi hoʻonohonoho o nā lula e pili ana i nā lepili (i nā pūʻulu o nā pūʻali a me nā hana hana/pods). He mea maikaʻi loa kēia inā hoʻohana pū ʻoe i nā ʻōnaehana heterogeneous - nā mīkini virtual, kahi ʻōnaehana ma luna o ka lako lako, a i ʻole kahi ʻōnaehana kubernetes. Eia hou, hiki iā ʻoe ke pale aku i kāu pūʻulu (nodes) me ka hoʻohana ʻana i kahi hoʻonohonoho o nā kulekele hoʻolaha a hoʻopili i nā kulekele pūnaewele i nā kaʻa e hiki mai ana (no ka laʻana, ma o ka lawelawe NodePorts a i ʻole External IPs).

Ma kahi pae kumu, i ka wā e hoʻopili ai ʻo Calico i kahi pod i ka pūnaewele (e ʻike i ke kiʻikuhi ma lalo), hoʻopili ʻo ia i ka host me ka hoʻohana ʻana i kahi interface Ethernet virtual (veth). ʻO ke kaʻa i hoʻouna ʻia e ka pod e hele mai i ka mea hoʻokipa mai kēia kikowaena virtual a ua hana ʻia ma ke ʻano like me ka mea i hele mai mai kahi kikowaena pūnaewele kino. ʻO ka mea paʻamau, kapa ʻia ʻo Calico i kēia mau kikowaena caliXXX. Ma muli o ka hele ʻana mai o ke kaʻa ma ke kikowaena virtual, hele ʻo ia i nā iptables me he mea lā he hop kahi mamao ka pod. No laila, ke hele mai ke kaʻa i/mai kahi pod, hoʻouna ʻia ia mai ka manaʻo o ka mea hoʻokipa.

Ma kahi node Kubernetes e holo ana iā Calico, hiki iā ʻoe ke palapala ʻāina i kahi interface virtual (veth) i kahi haʻahaʻa hana e like me kēia. Ma ka laʻana ma lalo nei, hiki iā ʻoe ke ʻike i ka pili ʻana o veth#10 (calic1cbf1ca0f8) i cnx-manager-* ma ka inoa inoa 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
...

Hoʻomaopopo i nā koho kulekele pūnaewele me Calico

Hāʻawi ʻia ʻo Calico i hana i kahi interface veth no kēlā me kēia haʻahaʻa hana, pehea e hoʻokō ai i nā kulekele? No ka hana ʻana i kēia, hana ʻo Calico i nā makau ma nā kaulahao like ʻole o ke ala hoʻoili packet me ka hoʻohana ʻana i nā iptables.

Hōʻike ke kiʻikuhi ma lalo nei i nā kaulahao e pili ana i ka hoʻoili ʻana i ka packet ma nā iptables (a i ʻole ka ʻōnaehana netfilter). Ke hōʻea mai kahi ʻeke ma o kahi kikowaena pūnaewele, hele mua ia ma ke kaulahao PREROUTING. Hoʻoholo ʻia kahi hoʻoholo hoʻoholo, a ma muli o kēia, hele ka ʻeke ma INPUT (i kuhikuhi ʻia i nā kaʻina hoʻokipa) a i ʻole FORWARD (i kuhikuhi ʻia i kahi pod a i ʻole kekahi node ma ka pūnaewele). Mai ke kaʻina hana kūloko, hele ka ʻeke ma ka OUTPUT a laila POSTROUTING kaulahao ma mua o ka hoʻouna ʻana i ke kaula.

E hoʻomaopopo he ʻano waho waho ka pod (pili i ka veth) ma ke ʻano o ka hana iptables. E hōʻuluʻulu kākou:

  • Ke hele nei nā kaʻa i mua (nat, routed a i/mai kahi pod) ma nā kaulahao PREROUTING - FORWARD - POSTROUTING.
  • Ke hele nei ke kaʻina kaʻa i ke kaʻina hoʻokipa kūloko ma ke kaulahao PREROUTING - INPUT.
  • E hele ana ke kalaiwa mai ke kaʻina hoʻokipa kūloko ma ke kaulahao OUTPUT - POSTROUTING.

Hoʻomaopopo i nā koho kulekele pūnaewele me Calico

Hāʻawi ʻo Calico i nā koho kulekele e ʻae iā ʻoe e hoʻopili i nā kulekele ma nā kaulahao āpau. Me kēlā manaʻo, e nānā kākou i nā koho hoʻonohonoho kulekele ʻokoʻa i loaʻa ma Calico. ʻO nā helu ma ka papa inoa o nā koho ma lalo nei e pili ana i nā helu ma ke kiʻi ma luna.

  1. Kulekele hoʻopau hana (pod).
  2. Kulekele hoʻokipa hoʻokipa
  3. koho ApplyOnForward
  4. Kulekele PreDNAT
  5. Kulekele Untracked

E hoʻomaka kākou ma ka nānā ʻana i ke ʻano o ka hoʻohana ʻia ʻana o nā kulekele i nā helu hope loa (Kubernetes pods a i ʻole OpenStack VMs), a laila e nānā i nā koho kulekele no nā wahi hoʻokipa.

Nā Kūlana Hoʻopaʻa Hana

Kulekele Hoʻopau Hana Hana (1)

He koho kēia no ka pale ʻana i kāu mau kubernetes pods. Kākoʻo ʻo Calico i ka hana pū me Kubernetes NetworkPolicy, akā hāʻawi pū kekahi i nā kulekele hou - Calico NetworkPolicy a me GlobalNetworkPolicy. Hoʻokumu ʻo Calico i kaulahao no kēlā me kēia pod (kaumaha hana) a me nā makau ma nā kaulahao INPUT a me OUTPUT no ka ukana hana i ka papa kānana o ke kaulahao FORWARD.

Nā Hopena Hoʻokipa

Kulekele Hope Hope (2)

Ma waho aʻe o CNI (container network interface), hāʻawi nā kulekele Calico i ka hiki ke pale aku i ka mea hoʻokipa. Ma Calico, hiki iā ʻoe ke hana i kahi hopena host ma ke kuhikuhi ʻana i kahi hui o ka interface host a, inā pono, nā helu port. Hoʻokō ʻia ka hoʻokō kulekele no kēia hui me ka hoʻohana ʻana i kahi papa kānana ma nā kaulahao INPUT a me OUTPUT. E like me kāu e ʻike ai mai ke kiʻikuhi, (2) pili lākou i nā kaʻina kūloko ma ka node/host. ʻO ia hoʻi, inā ʻoe e hana i kahi kulekele e pili ana i ka host endpoint, ʻaʻole ia e hoʻopilikia i ka hele ʻana i/mai kāu pods. Akā hāʻawi ia i hoʻokahi interface / syntax no ka pale ʻana i ke kaʻa no kāu host a me nā pods e hoʻohana ana i nā kulekele Calico. He mea maʻalahi kēia i ke kaʻina hana o ka hoʻokele ʻana i nā kulekele no kahi pūnaewele heterogeneous. ʻO ka hoʻonohonoho ʻana i nā kulekele endpoint host e hoʻomaikaʻi i ka palekana cluster kekahi hihia hoʻohana nui.

Kulekele ApplyOnForward (3)

Loaʻa ka koho ApplyOnForward i ke kulekele ʻoihana honua ʻo Calico e ʻae i nā kulekele e hoʻopili ʻia i nā kaʻa a pau e hele ana ma ka hopena o ka host, me nā kaʻa e hoʻouna ʻia e ka mea hoʻokipa. Hoʻopili kēia i nā kaʻa i hoʻouna ʻia i ka pod kūloko a i ʻole ma kahi ʻē aʻe ma ka pūnaewele. Pono ʻo Calico e ʻae ʻia kēia hoʻonohonoho no nā kulekele me ka hoʻohana ʻana i ka PreDNAT a me ka wehe ʻole ʻia, e ʻike i nā ʻāpana aʻe. Eia hou, hiki ke hoʻohana ʻia ʻo ApplyOnForward e nānā i nā kaʻa o ka host i nā hihia i hoʻohana ʻia ai kahi router virtual a i ʻole lako polokalamu NAT.

E hoʻomaopopo inā pono ʻoe e hoʻopili i ke kulekele pūnaewele like i nā kaʻina hana a me nā pods, a laila ʻaʻole pono ʻoe e hoʻohana i ka koho ApplyOnForward. ʻO nā mea a pau āu e hana ai, ʻo ia ka hana ʻana i kahi lepili no ka hostendpoint e koi ʻia a me ka hana hope (pod). Maikaʻi ʻo Calico e hoʻokō i nā kulekele e pili ana i nā lepili, me ka nānā ʻole i ke ʻano o ka hopena (hostendpoint a i ʻole ka hana hana).

Kulekele PreDNAT (4)

Ma nā Kubernetes, hiki ke hōʻike ʻia nā awa ʻoihana lawelawe ma waho me ka hoʻohana ʻana i ke koho NodePorts a i ʻole, ke koho (ke hoʻohana ʻana iā Calico), ma ka hoʻolaha ʻana iā lākou me ka hoʻohana ʻana i nā Cluster IPs a i ʻole nā ​​koho IP waho. Hoʻohālikelike ʻo Kube-proxy i nā kaʻa komo i hoʻopaʻa ʻia i kahi lawelawe i nā pods o ka lawelawe pili me ka hoʻohana ʻana i ka DNAT. Hāʻawi ʻia kēia, pehea ʻoe e hoʻokō ai i nā kulekele no ke kaʻa e hele mai ana ma o NodePorts? No ka hōʻoia ʻana i ka hoʻohana ʻia ʻana o kēia mau kulekele ma mua o ka hana ʻia ʻana o ke kaʻa e DNAT (ʻo ia ka palapala ʻāina ma waena o ka host:port a me ka lawelawe pili), hāʻawi ʻo Calico i kahi ʻāpana no ka globalNetworkPolicy i kapa ʻia "preDNAT: ʻoiaʻiʻo".

Ke hoʻohana ʻia ka pre-DNAT, hoʻokō ʻia kēia mau kulekele ma (4) ma ke kiʻikuhi - ma ka papa mangle o ke kaulahao PREROUTING - ma mua koke o ka DNAT. ʻAʻole hahai ʻia ke ʻano maʻamau o nā kulekele ma ʻaneʻi, no ka mea, ʻoi aku ka mua o ka hoʻohana ʻana i kēia mau kulekele ma ke ala hoʻoili kaʻa. Eia naʻe, mahalo nā kulekele preDNAT i ke kauoha o ka noi ma waena o lākou iho.

I ka hana ʻana i nā kulekele me ka pre-DNAT, he mea nui e makaʻala e pili ana i ke kaʻa āu e makemake ai e hana a ʻae i ka hapa nui e hōʻole ʻia. ʻAʻole e nānā hou ʻia ke kaʻa kaʻa kaʻa he 'ʻae' i ke kulekele pre-DNAT e ke kulekele hostendpoint, ʻoiai e hoʻomau ʻia nā kaʻa i hāʻule i ke kulekele pre-DNAT ma o nā kaulahao i koe.
Ua kauoha ʻo Calico e hiki ke koho i ka applyOnForward i ka wā e hoʻohana ai i preDNAT, ʻoiai ma ka wehewehe ʻana ʻaʻole i koho ʻia ka huakaʻi o ke kaʻa. Hiki ke kuhikuhi ʻia ke kalaiwa i ke kaʻina hana hoʻokipa, a i ʻole hiki ke hoʻouna ʻia i kahi pod a i ʻole node ʻē aʻe.

Kulekele Untracked (5)

Hiki i nā pūnaewele a me nā noi ke loaʻa nā ʻokoʻa nui i ka hana. I kekahi mau hihia koʻikoʻi, hiki i nā noi ke hana i nā pilina pōkole. Hiki i kēia ke hana i ka conntrack (kahi mea nui o ka waihona pūnaewele Linux) e pau ka hoʻomanaʻo. ʻO ka mea maʻamau, e holo i kēia mau ʻano noi ma Linux, pono ʻoe e hoʻonohonoho lima a hoʻopau i ka conntrack, a i ʻole e kākau i nā lula iptables e kāpae i ka conntrack. ʻO ke kulekele i hoʻopaʻa ʻole ʻia ma Calico kahi koho maʻalahi a ʻoi aku ka maikaʻi inā makemake ʻoe e hoʻoponopono i nā pilina me ka wikiwiki. No ka laʻana, inā hoʻohana ʻoe i ka nui memcache a i ʻole ma ke ʻano he mea pale hou aku DDOS.

E heluhelu i keia moʻomanaʻo mo'omana'o Pūnaewele (ai ole kā mākou unuhi) no ka ʻike hou aku, me ka hoʻāʻo ʻana i ka hana me ka hoʻohana ʻana i ke kulekele i mālama ʻole ʻia.

Ke hoʻonoho ʻoe i ke koho "doNotTrack: ʻoiaʻiʻo" ma Calico globalNetworkPolicy, lilo ia i kulekele **untracked** a ua hoʻohana ʻia i ka wā mua loa i ka paipu hoʻoheheʻe packet Linux. Ke nānā nei i ke kiʻikuhi ma luna, ua hoʻohana ʻia nā kulekele i ʻike ʻole ʻia ma nā kaulahao PREROUTING a me OUTPUT i ka papa maka ma mua o ka hoʻomaka ʻana o ka hoʻopili ʻana (conntrack). Ke ʻae ʻia kahi ʻeke e ke kulekele ʻike ʻole ʻia, ua hōʻailona ʻia e hoʻopau i ka nānā ʻana i ka pilina no kēlā ʻeke. ʻO ia hoʻi:

  • Hoʻohana ʻia ke kulekele i mālama ʻole ʻia ma ke ʻano pākahi. ʻAʻohe manaʻo o ka pilina (a i ʻole kahe). ʻO ka nele o nā pilina he mau hopena koʻikoʻi:
  • Inā makemake ʻoe e ʻae i ka noi a me ka pane pane ʻana, pono ʻoe i ke kānāwai no ka komo ʻana a me waho (no ka mea, hoʻohana maʻamau ʻo Calico i conntrack e hōʻailona i ke kaʻa pane e like me ka ʻae ʻia).
  • ʻAʻole hoʻohana ʻia ke kulekele i mālama ʻole ʻia no nā hana hana Kubernetes (pods), no ka mea ma kēia hihia ʻaʻohe ala e nānā i ka pilina i waho mai ka pod.
  • ʻAʻole hana pololei ʻo NAT me nā ʻeke i ʻike ʻole ʻia (no ka mea, mālama ka kernel i ka palapala palapala NAT ma conntrack).
  • I ka wā e hele ai i ka lula "ʻae i nā mea āpau" i ke kulekele i mālama ʻole ʻia, e kaha ʻia nā ʻeke a pau me ka ʻike ʻole ʻia. ʻAʻole kēia i nā manawa a pau āu e makemake ai, no laila, he mea nui e koho pono i nā ʻeke i ʻae ʻia e nā kulekele ʻike ʻole ʻia (a e ʻae i ka hapa nui o nā kaʻa e hele i nā kulekele maʻamau).
  • Hoʻohana ʻia nā kulekele i ʻike ʻole ʻia ma ka hoʻomaka ʻana o ka paipu hoʻoili packet. He mea nui kēia e hoʻomaopopo i ka hana ʻana i nā kulekele Calico. Hiki iā ʻoe ke loaʻa i kahi kulekele pod me ke kauoha:1 a me kahi kulekele ʻike ʻole ʻia me ke kauoha:1000. ʻAʻole pili. E hoʻohana ʻia ke kulekele Untracked ma mua o ke kulekele no ka pod. ʻO nā kulekele i mālama ʻole ʻia e mālama i ke kauoha hoʻokō ma waena wale nō.

No ka mea, ʻo kekahi o nā kumu o ke kulekele doNotTrack e hoʻokō i ke kulekele i ka hoʻomaka ʻana o ka pipeline packet processing Linux, ua kauoha ʻo Calico e kuhikuhi i ke koho applyOnForward i ka wā e hoʻohana ai i doNotTrack. E pili ana i ke kiʻikuhi hana packet, e hoʻomaopopo ua hoʻohana ʻia ke kulekele i mālama ʻole ʻia (5) ma mua o nā hoʻoholo hoʻoholo. Hiki ke kuhikuhi ʻia ke kalaiwa i ke kaʻina hana hoʻokipa, a i ʻole hiki ke hoʻouna ʻia i kahi pod a i ʻole node ʻē aʻe.

Nā hopena

Ua nānā mākou i nā koho kulekele like ʻole (Host endpoint, ApplyOnForward, preDNAT, a Untracked) ma Calico a pehea e hoʻohana ʻia ai lākou ma ke ala hoʻoili packet. ʻO ka hoʻomaopopo ʻana i kā lākou hana e kōkua i ka hoʻomohala ʻana i nā kulekele kūpono a palekana. Me Calico hiki iā ʻoe ke hoʻohana i kahi kulekele pūnaewele puni honua e pili ana i kahi lepili (kahi pūʻulu o nā nodes a me nā pods) a hoʻohana i nā kulekele me nā ʻāpana like ʻole. Hāʻawi kēia i ka palekana a me nā ʻoihana hoʻolālā pūnaewele e pale pono i nā "mea āpau" (nā ʻano hopena) i ka manawa hoʻokahi me ka hoʻohana ʻana i kahi ʻōlelo kulekele hoʻokahi me nā kulekele Calico.

Mahalo: Makemake au e mahalo Sean Crampton и Alexa Pollitta no kā lākou loiloi a me ka ʻike waiwai.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka