Kuelewa Chaguo za Utekelezaji wa Sera ya Mtandao na Calico

Kuelewa Chaguo za Utekelezaji wa Sera ya Mtandao na Calico

Programu-jalizi ya mtandao wa Calico hutoa sera mbalimbali za mtandao zilizo na sintaksia iliyounganishwa ili kulinda wapangishi wa maunzi, mashine pepe na ganda. Sera hizi zinaweza kutumika ndani ya nafasi ya majina au kuwa sera za kimataifa za mtandao zinazotumika mwisho wa mwenyeji (ili kulinda programu zinazoendeshwa moja kwa moja kwenye seva pangishi - mwenyeji anaweza kuwa seva au mashine pepe) au mwisho wa mzigo wa kazi (ili kulinda programu zinazoendeshwa katika vyombo au mashine pepe zinazopangishwa). Sera za Calico hukuruhusu kutumia hatua za usalama katika sehemu mbalimbali katika njia ya pakiti kwa kutumia chaguo kama vile preDNAT, unraracked, na applyOnForward. Kuelewa jinsi chaguo hizi zinavyofanya kazi kunaweza kusaidia kuboresha usalama na utendakazi wa mfumo wako kwa ujumla. Makala haya yanafafanua kiini cha chaguo hizi za sera ya Calico (preDNAT, haijachambuliwa na kutekelezwaOnForward) inayotumika kwa ncha za upangishaji, kwa msisitizo wa kile kinachotokea katika njia za kuchakata pakiti (minyororo ya iptabels).

Makala haya yanachukulia kuwa una ufahamu wa kimsingi wa jinsi sera za mtandao za Kubernetes na Calico zinavyofanya kazi. Ikiwa sivyo, tunapendekeza kujaribu mafunzo ya msingi ya sera ya mtandao ΠΈ mafunzo ya ulinzi wa mwenyeji kutumia Calico kabla ya kusoma nakala hii. Pia tunatarajia uwe na uelewa wa kimsingi wa kazi iptables katika linux.

Calico sera ya mtandao ya kimataifa hukuruhusu kutumia seti ya sheria za ufikiaji kwa lebo (kwa vikundi vya wapangishaji na mzigo wa kazi/maganda). Hii ni muhimu sana ikiwa unatumia mifumo tofauti kwa pamoja - mashine pepe, mfumo moja kwa moja kwenye maunzi, au miundombinu ya kubernetes. Kwa kuongeza, unaweza kulinda kundi lako (nodi) kwa kutumia seti ya sera za kutangaza na kutumia sera za mtandao kwa trafiki inayoingia (kwa mfano, kupitia huduma ya NodePorts au IPs za Nje).

Katika kiwango cha kimsingi, Calico inapounganisha ganda kwenye mtandao (ona mchoro hapa chini), huiunganisha kwa seva pangishi kwa kutumia kiolesura cha Ethaneti pepe (veth). Trafiki inayotumwa na ganda huja kwa mwenyeji kutoka kwa kiolesura hiki pepe na huchakatwa kwa njia sawa na kana kwamba imetoka kwa kiolesura halisi cha mtandao. Kwa chaguo-msingi, Calico hutaja violesura hivi caliXXX. Kwa kuwa trafiki huja kupitia kiolesura cha mtandaoni, hupitia iptables kana kwamba ganda lilikuwa umbali wa kurukaruka moja. Kwa hivyo, wakati trafiki inakuja/kutoka kwenye ganda, inasambazwa kutoka kwa mtazamo wa mwenyeji.

Kwenye nodi ya Kubernetes inayoendesha Calico, unaweza kuweka kiolesura pepe (veth) kwa mzigo wa kazi kama ifuatavyo. Katika mfano ulio hapa chini, unaweza kuona kwamba veth#10 (calic1cbf1ca0f8) imeunganishwa kwa cnx-manager-* katika nafasi ya jina ya 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
...

Kuelewa Chaguo za Utekelezaji wa Sera ya Mtandao na Calico

Ikizingatiwa kuwa Calico huunda kiolesura cha veth kwa kila mzigo wa kazi, inatekelezaje sera? Ili kufanya hivyo, Calico huunda ndoano katika minyororo mbalimbali ya njia ya usindikaji wa pakiti kwa kutumia iptables.

Mchoro ulio hapa chini unaonyesha minyororo inayohusika katika usindikaji wa pakiti katika iptables (au mfumo mdogo wa netfilter). Pakiti inapofika kupitia kiolesura cha mtandao, kwanza hupitia mlolongo wa PREROUTING. Uamuzi wa uelekezaji unafanywa, na kwa kuzingatia hili, pakiti hupitia ama INPUT (inayoelekezwa kwa michakato ya mwenyeji) au FORWARD (inayoelekezwa kwa ganda au nodi nyingine kwenye mtandao). Kutoka kwa mchakato wa ndani, pakiti hupitia OUTPUT na kisha POSTROUTING kabla ya kutumwa chini ya kebo.

Kumbuka kwamba ganda pia ni chombo cha nje (kilichounganishwa na veth) kwa suala la usindikaji wa iptables. Hebu tufanye muhtasari:

  • Trafiki inayosambazwa (nat, iliyopitishwa au kwenda/kutoka kwenye ganda) hupitia minyororo ya PREROUTING - MBELE - POSTROUTING.
  • Trafiki kwa mchakato wa mwenyeji wa ndani hupitia msururu wa PREROUTING - INPUT.
  • Trafiki kutoka kwa mchakato wa mwenyeji wa ndani hupitia OUTPUT - POSTROUTING chain.

Kuelewa Chaguo za Utekelezaji wa Sera ya Mtandao na Calico

Calico hutoa chaguo za sera zinazokuruhusu kutumia sera kwenye misururu yote. Kwa kuzingatia hilo, hebu tuangalie chaguo tofauti za usanidi wa sera zinazopatikana katika Calico. Nambari katika orodha ya chaguzi hapa chini zinalingana na nambari kwenye mchoro hapo juu.

  1. Sera ya mwisho wa kazi (pod).
  2. Sera ya mwisho ya seva pangishi
  3. OmbaOnForward chaguo
  4. Sera ya PreDNAT
  5. Sera Isiyofuatiliwa

Hebu tuanze kwa kuangalia jinsi sera zinavyotumika kwa sehemu za mwisho za mzigo wa kazi (Kubernetes pods au OpenStack VMs), kisha tuangalie chaguo za sera za miisho ya seva pangishi.

Mwisho wa mzigo wa kazi

Sera ya Mwisho wa Mzigo wa Kazi (1)

Hili ni chaguo la kulinda maganda yako ya kubernetes. Calico inasaidia kufanya kazi na Kubernetes NetworkPolicy, lakini pia inatoa sera za ziada - Calico NetworkPolicy na GlobalNetworkPolicy. Calico huunda mnyororo kwa kila ganda (mzigo wa kazi) na kulabu kwenye minyororo ya PEMBEJEO na PATO kwa mzigo wa kazi kwenye jedwali la kichujio cha mnyororo wa FORWARD.

Sehemu za Mwisho za Mwenyeji

Sera ya Mwisho ya Mwenyeji (2)

Kando na CNI (kiolesura cha mtandao cha kontena), sera za Calico hutoa uwezo wa kulinda seva pangishi yenyewe. Katika Calico, unaweza kuunda mwisho wa mwenyeji kwa kubainisha mchanganyiko wa kiolesura cha mwenyeji na, ikiwa ni lazima, nambari za bandari. Utekelezaji wa sera wa huluki hii unapatikana kwa kutumia jedwali la kichujio katika misururu ya PEMBEJEO na PATO. Kama unavyoona kutoka kwa mchoro, (2) zinatumika kwa michakato ya ndani kwenye nodi/mwenyeji. Hiyo ni, ikiwa utaunda sera ambayo inatumika kwa mwisho wa seva pangishi, haitaathiri trafiki inayoenda/kutoka kwenye maganda yako. Lakini inatoa kiolesura/syntax moja ya kuzuia trafiki kwa mwenyeji wako na maganda kwa kutumia sera za Calico. Hii hurahisisha sana mchakato wa kudhibiti sera za mtandao wa aina tofauti. Kusanidi sera za mwisho za seva pangishi ili kuimarisha usalama wa nguzo ni kesi nyingine muhimu ya utumiaji.

Tumia Sera ya Mbele (3)

Chaguo la ApplyOnForward linapatikana katika sera ya mtandao ya kimataifa ya Calico ili kuruhusu sera kutumika kwa trafiki yote inayopitia mwisho wa seva pangishi, ikiwa ni pamoja na trafiki ambayo itatumwa na mwenyeji. Hii inajumuisha trafiki inayotumwa kwa ganda la ndani au mahali pengine popote kwenye mtandao. Calico inahitaji mpangilio huu kuwashwa kwa sera zinazotumia PreDNAT na ambazo hazijafuatiliwa, angalia sehemu zifuatazo. Kwa kuongeza, ApplyOnForward inaweza kutumika kufuatilia trafiki ya mwenyeji katika hali ambapo kipanga njia pepe au programu ya NAT inatumiwa.

Kumbuka kwamba ikiwa unahitaji kutumia sera sawa ya mtandao kwa michakato ya mwenyeji na pods, basi huhitaji kutumia chaguo la ApplyOnForward. Unachohitaji kufanya ni kuunda lebo ya mahali pa hosteli inayohitajika na sehemu ya mwisho ya mzigo wa kazi (pod). Calico ni mahiri vya kutosha kutekeleza sera kulingana na lebo, bila kujali aina ya sehemu ya mwisho (hostendpoint au mzigo wa kazi).

Sera ya PreDNAT (4)

Katika Kubernetes, bandari za huluki ya huduma zinaweza kufichuliwa nje kwa kutumia chaguo la NodePorts au, kwa hiari (unapotumia Calico), kwa kuzitangaza kwa kutumia IPs za Kundi au chaguo za IP za Nje. Kube-proxy husawazisha trafiki inayoingia inayofungamana na huduma kwa maganda ya huduma inayolingana kwa kutumia DNAT. Kwa kuzingatia hili, unatekelezaje sera za trafiki inayokuja kupitia NodePorts? Ili kuhakikisha kuwa sera hizi zinatumika kabla ya trafiki kuchakatwa na DNAT (ambayo ni ramani kati ya seva pangishi:bandari na huduma inayolingana), Calico hutoa kigezo cha globalNetworkPolicy kiitwacho "preDNAT: true".

Wakati DNAT ya awali imewashwa, sera hizi hutekelezwa katika (4) katika mchoro - katika jedwali la msururu wa msururu wa PREROUTING - mara moja kabla ya DNAT. Mpangilio wa kawaida wa sera haufuatwi hapa, kwa kuwa utumiaji wa sera hizi hutokea mapema zaidi katika njia ya kuchakata trafiki. Hata hivyo, sera za preDNAT zinaheshimu utaratibu wa matumizi miongoni mwao.

Unapounda sera kwa kutumia pre-DNAT, ni muhimu kuwa mwangalifu kuhusu trafiki unayotaka kuchakata na kuruhusu nyingi kukataliwa. Trafiki iliyoalamishwa kama 'kuruhusu' katika sera ya pre-DNAT haitaangaliwa tena na sera ya hostendpoint, wakati trafiki ambayo inafeli sera ya pre-DNAT itaendelea kupitia misururu iliyosalia.
Calico imeifanya kuwa ya lazima kuwezesha chaguo la applyOnForward unapotumia preDNAT, kwani kwa ufafanuzi mwisho wa trafiki bado haujachaguliwa. Trafiki inaweza kuelekezwa kwa mchakato wa mwenyeji, au inaweza kutumwa kwa ganda au nodi nyingine.

Sera Isiyofuatiliwa (5)

Mitandao na programu zinaweza kuwa na tofauti kubwa za tabia. Katika hali zingine mbaya, programu zinaweza kutoa miunganisho mingi ya muda mfupi. Hii inaweza kusababisha conntrack (sehemu kuu ya safu ya mtandao ya Linux) kukosa kumbukumbu. Kijadi, ili kuendesha aina hizi za programu kwenye Linux, utahitaji kusanidi mwenyewe au kuzima uingiliaji, au kuandika sheria za iptables ili kukwepa ulanguzi. Sera ambayo haijafuatiliwa katika Calico ni chaguo rahisi na bora zaidi ikiwa ungependa kuchakata miunganisho haraka iwezekanavyo. Kwa mfano, ikiwa unatumia kubwa memcache au kama hatua ya ziada ya ulinzi dhidi ya DDOS.

Soma hii blog post (Au tafsiri yetu) kwa maelezo zaidi, ikijumuisha majaribio ya utendakazi kwa kutumia sera ambayo haijafuatiliwa.

Unapoweka chaguo la "doNotTrack: true" katika Calico globalNetworkPolicy, inakuwa sera ya **isiyofuatiliwa** na inatumika mapema sana kwenye bomba la kuchakata pakiti za Linux. Ukiangalia mchoro hapo juu, sera ambazo hazijafuatiliwa hutumika katika minyororo ya PREROUTING na OUTPUT katika jedwali ghafi kabla ya kuanza kwa ufuatiliaji wa muunganisho (conntrack). Wakati pakiti inaruhusiwa na sera ambayo haijafuatiliwa, inatiwa alama ili kuzima ufuatiliaji wa muunganisho wa pakiti hiyo. Inamaanisha:

  • Sera ambayo haijafuatiliwa inatumika kwa misingi ya kila pakiti. Hakuna dhana ya uunganisho (au mtiririko). Ukosefu wa uhusiano una matokeo kadhaa muhimu:
  • Iwapo ungependa kuruhusu trafiki ya ombi na majibu, unahitaji sheria kwa zinazoingia na zinazotoka (kwa kuwa Calico kwa kawaida hutumia uzuiaji kuashiria trafiki ya majibu inavyoruhusiwa).
  • Sera isiyofuatiliwa haifanyi kazi kwa mzigo wa kazi wa Kubernetes (pods), kwa sababu katika kesi hii hakuna njia ya kufuatilia uunganisho unaotoka kutoka kwenye pod.
  • NAT haifanyi kazi ipasavyo na pakiti ambazo hazijafuatiliwa (kwa vile kernel huhifadhi ramani ya NAT kwa ushawishi).
  • Unapopitia sheria ya "ruhusu yote" katika sera ambayo haijafuatiliwa, pakiti zote zitatiwa alama kuwa hazijafuatiliwa. Hiki sio kile unachotaka kila wakati, kwa hivyo ni muhimu kuwa mwangalifu sana kuhusu pakiti zinazoruhusiwa na sera ambazo hazijafuatiliwa (na kuruhusu trafiki nyingi kupitia sera za kawaida zinazofuatiliwa).
  • Sera ambazo hazijafuatiliwa hutumika mwanzoni kabisa mwa bomba la kuchakata pakiti. Hili ni muhimu sana kuelewa unapounda sera za Calico. Unaweza kuwa na sera ya pod iliyo na agizo:1 na sera ambayo haijafuatiliwa na agizo:1000. Haitajalisha. Sera Isiyofuatiliwa itatumika kabla ya sera ya ganda. Sera ambazo hazijafuatiliwa zinaheshimu amri ya utekelezaji pekee kati yao wenyewe.

Kwa sababu mojawapo ya madhumuni ya sera ya doNotTrack ni kutekeleza sera mapema sana katika mchakato wa uchakataji wa pakiti za Linux, Calico hufanya iwe lazima kubainisha chaguo la applyOnForward unapotumia doNotTrack. Ukirejelea mchoro wa kuchakata pakiti, kumbuka kuwa sera ambayo haijafuatiliwa(5) inatumika kabla ya maamuzi yoyote ya uelekezaji. Trafiki inaweza kuelekezwa kwa mchakato wa mwenyeji, au inaweza kutumwa kwa ganda au nodi nyingine.

Matokeo ya

Tuliangalia chaguo mbalimbali za sera (Njia ya mwisho ya seva pangishi, ApplyOnForward, preDNAT, na Isiyofuatiliwa) katika Calico na jinsi zinavyotumika kwenye njia ya kuchakata pakiti. Kuelewa jinsi zinavyofanya kazi husaidia katika kuunda sera bora na salama. Ukiwa na Calico unaweza kutumia sera ya kimataifa ya mtandao ambayo inatumika kwa lebo (kundi la nodi na maganda) na kutumia sera zilizo na vigezo mbalimbali. Hii inaruhusu wataalamu wa usalama na muundo wa mtandao kulinda kwa urahisi "kila kitu" (aina za mwisho) kwa wakati mmoja kwa kutumia lugha moja ya sera iliyo na sera za Calico.

Shukrani: Ningependa kushukuru Sean Crampton ΠΈ Alexa Pollitta kwa ukaguzi wao na habari muhimu.

Chanzo: mapenzi.com

Kuongeza maoni