Pochopenie možností sieťovej politiky s Calico

Pochopenie možností sieťovej politiky s Calico

Sieťový doplnok Calico poskytuje širokú škálu sieťových politík s jednotnou syntaxou na ochranu hardvérových hostiteľov, virtuálnych strojov a modulov. Tieto politiky môžu byť aplikované v rámci menného priestoru alebo to môžu byť globálne sieťové politiky, na ktoré sa vzťahujú hostiteľský koncový bod (na ochranu aplikácií bežiacich priamo na hostiteľovi - hostiteľom môže byť server alebo virtuálny stroj) alebo koncový bod pracovného zaťaženia (na ochranu aplikácií bežiacich v kontajneroch alebo hosťovaných virtuálnych strojoch). Zásady Calico vám umožňujú aplikovať bezpečnostné opatrenia v rôznych bodoch cesty paketu pomocou možností ako preDNAT, unracked a applyOnForward. Pochopenie toho, ako tieto voľby fungujú, môže pomôcť zlepšiť bezpečnosť a výkon vášho celkového systému. Tento článok vysvetľuje podstatu týchto možností politiky Calico (preDNAT, unraraced a applyOnForward) aplikovaných na hostiteľské koncové body, s dôrazom na to, čo sa deje v cestách spracovania paketov (iptabels chains).

Tento článok predpokladá, že máte základné znalosti o tom, ako fungujú sieťové politiky Kubernetes a Calico. Ak nie, odporúčame vyskúšať návod na základnú sieťovú politiku и návod na ochranu hostiteľa pomocou Calico pred prečítaním tohto článku. Očakávame od vás aj základné znalosti o práci iptables v linuxe.

kaliko globálna sieťová politika umožňuje aplikovať súbor pravidiel prístupu podľa štítkov (na skupiny hostiteľov a záťaže/pody). To je veľmi užitočné, ak spolu používate heterogénne systémy – virtuálne stroje, systém priamo na hardvéri alebo infraštruktúru kubernetes. Okrem toho môžete chrániť svoj klaster (uzly) pomocou súboru deklaratívnych politík a aplikovať sieťové politiky na prichádzajúcu komunikáciu (napríklad prostredníctvom služby NodePorts alebo External IPs).

Na základnej úrovni, keď Calico pripojí modul k sieti (pozri diagram nižšie), pripojí ho k hostiteľovi pomocou virtuálneho ethernetového rozhrania (veth). Prevádzka odosielaná modulom prichádza k hostiteľovi z tohto virtuálneho rozhrania a je spracovaná rovnakým spôsobom, ako keby prichádzala z fyzického sieťového rozhrania. Calico štandardne nazýva tieto rozhrania caliXXX. Keďže prevádzka prichádza cez virtuálne rozhranie, prechádza cez iptables, ako keby bol modul vzdialený jeden skok. Preto, keď návštevnosť prichádza do/z pod, je presmerovaná z pohľadu hostiteľa.

Na uzle Kubernetes so systémom Calico môžete namapovať virtuálne rozhranie (veth) na pracovné zaťaženie nasledovne. V nižšie uvedenom príklade môžete vidieť, že veth#10 (calic1cbf1ca0f8) je pripojený k cnx-manager-* v mennom priestore 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
...

Pochopenie možností sieťovej politiky s Calico

Vzhľadom na to, že Calico vytvára rozhranie veth pre každé pracovné zaťaženie, ako presadzuje zásady? Na tento účel Calico vytvára háčiky v rôznych reťazcoch cesty spracovania paketov pomocou iptables.

Nižšie uvedený diagram ukazuje reťazce zapojené do spracovania paketov v iptables (alebo subsystéme netfilter). Keď paket príde cez sieťové rozhranie, najprv prejde reťazcom PREROUTING. Potom sa urobí rozhodnutie o smerovaní a na základe toho paket prechádza buď cez INPUT (smerovaný na hostiteľské procesy) alebo VPRED (nasmerovaný na modul alebo iný uzol v sieti). Z lokálneho procesu prechádza paket cez OUTPUT a potom POSTROUTING reťazec predtým, ako je odoslaný po kábli.

Všimnite si, že modul je tiež externá entita (pripojená k veth) z hľadiska spracovania iptables. Poďme si to zhrnúť:

  • Preposlaná prevádzka (nat, smerovaná alebo do/z modulu) prechádza cez reťazce PREROUTING - FORWARD - POSTROUTING.
  • Prevádzka do procesu lokálneho hostiteľa prechádza cez reťazec PREROUTING - INPUT.
  • Prevádzka z lokálneho hostiteľského procesu prechádza reťazcom VÝSTUP – POSTROUTING.

Pochopenie možností sieťovej politiky s Calico

Calico poskytuje možnosti politiky, ktoré vám umožňujú aplikovať politiky vo všetkých reťazcoch. S ohľadom na to sa pozrime na rôzne možnosti konfigurácie politiky dostupné v Calico. Čísla v zozname možností nižšie zodpovedajú číslam na obrázku vyššie.

  1. Politika koncového bodu pracovného zaťaženia (pod).
  2. Politika hostiteľského koncového bodu
  3. Možnosť ApplyOnForward
  4. Zásady PreDNAT
  5. Nesledovaná politika

Začnime tým, že sa pozrieme na to, ako sa politiky aplikujú na koncové body pracovného zaťaženia (Kubernetes pod alebo OpenStack VM), a potom sa pozrime na možnosti politiky pre koncové body hostiteľa.

Koncové body pracovného zaťaženia

Pravidlá pre koncový bod pracovného zaťaženia (1)

Toto je možnosť ochrany vašich modulov kubernetes. Calico podporuje prácu s Kubernetes NetworkPolicy, ale poskytuje aj ďalšie zásady – Calico NetworkPolicy a GlobalNetworkPolicy. Calico vytvorí reťazec pre každý modul (pracovné zaťaženie) a zavesí reťazce INPUT a OUTPUT pre pracovné zaťaženie na filtračnú tabuľku reťazca FORWARD.

Hostiteľské koncové body

Pravidlá hostiteľského koncového bodu (2)

Okrem CNI (kontajnerové sieťové rozhranie) poskytujú politiky Calico možnosť chrániť samotného hostiteľa. V Calico môžete vytvoriť koncový bod hostiteľa zadaním kombinácie hostiteľského rozhrania a v prípade potreby čísel portov. Presadzovanie politiky pre túto entitu sa dosahuje pomocou tabuľky filtrov v reťazcoch INPUT a OUTPUT. Ako môžete vidieť z diagramu, (2) sa vzťahujú na lokálne procesy na uzle/hostiteľovi. To znamená, že ak vytvoríte politiku, ktorá sa vzťahuje na koncový bod hostiteľa, neovplyvní to prevádzku smerujúcu do/z vašich modulov. Poskytuje však jediné rozhranie/syntax na blokovanie prenosu pre vášho hostiteľa a moduly pomocou zásad Calico. To značne zjednodušuje proces riadenia politík pre heterogénnu sieť. Konfigurácia politík koncového bodu hostiteľa na zvýšenie bezpečnosti klastra je ďalším dôležitým prípadom použitia.

ApplyOnForward Policy (3)

Voľba ApplyOnForward je dostupná v globálnej sieťovej politike Calico, ktorá umožňuje aplikovať politiky na všetku komunikáciu prechádzajúcu cez koncový bod hostiteľa, vrátane prevádzky, ktorú bude posielať hostiteľ. To zahŕňa prenos presmerovaný na lokálny modul alebo kdekoľvek inde v sieti. Calico vyžaduje, aby bolo toto nastavenie povolené pre politiky používajúce PreDNAT a nesledované, pozrite si nasledujúce časti. Okrem toho možno použiť ApplyOnForward na monitorovanie hostiteľskej prevádzky v prípadoch, keď sa používa virtuálny smerovač alebo softvérový NAT.

Upozorňujeme, že ak potrebujete použiť rovnakú sieťovú politiku na hostiteľské procesy aj pod, nemusíte použiť možnosť ApplyOnForward. Všetko, čo musíte urobiť, je vytvoriť štítok pre požadovaný koncový bod hostiteľa a koncový bod pracovného zaťaženia (pod). Calico je dostatočne inteligentný na to, aby presadzoval politiku založenú na štítkoch bez ohľadu na typ koncového bodu (hostendpoint alebo pracovné zaťaženie).

Pravidlá preDNAT (4)

V Kubernetes môžu byť porty entity služby vystavené externe pomocou možnosti NodePorts alebo voliteľne (pri použití Calico) ich inzerciou pomocou možností Cluster IPs alebo External IPs. Kube-proxy vyvažuje prichádzajúcu prevádzku viazanú na službu na moduly zodpovedajúcej služby pomocou DNAT. Vzhľadom na to, ako presadzujete pravidlá pre prevádzku prichádzajúcu cez NodePorts? Aby sa zabezpečilo, že tieto politiky sa aplikujú pred spracovaním prenosu pomocou DNAT (čo je mapovanie medzi hostiteľ:port a zodpovedajúcou službou), Calico poskytuje parameter pre globalNetworkPolicy s názvom "preDNAT: true".

Keď je aktivovaná pre-DNAT, tieto politiky sú implementované v (4) v diagrame - v mandlovej tabuľke reťazca PREROUTING - bezprostredne pred DNAT. Zvyčajné poradie politík sa tu nedodržiava, pretože k aplikácii týchto politík dochádza oveľa skôr na ceste spracovania prevádzky. Politiky preDNAT však rešpektujú poradie aplikácie medzi sebou.

Pri vytváraní politík s pre-DNAT je dôležité dávať pozor na prevádzku, ktorú chcete spracovať, a umožniť odmietnutie väčšiny. Prevádzka označená ako „povolená“ v politike pre-DNAT už nebude kontrolovaná politikou hostiteľského bodu, zatiaľ čo prevádzka, ktorá zlyhá v politike pre-DNAT, bude pokračovať cez zostávajúce reťazce.
Calico stanovilo povinné zapnutie možnosti applyOnForward pri používaní preDNAT, pretože podľa definície ešte nebol vybratý cieľ prevádzky. Prevádzka môže byť nasmerovaná na hostiteľský proces alebo môže byť presmerovaná na modul alebo iný uzol.

Nesledovaná politika (5)

Siete a aplikácie môžu mať veľké rozdiely v správaní. V niektorých extrémnych prípadoch môžu aplikácie generovať mnoho krátkodobých spojení. To môže spôsobiť nedostatok pamäte conntrack (hlavná súčasť sieťového zásobníka Linuxu). Na spustenie týchto typov aplikácií v systéme Linux by ste tradične museli manuálne nakonfigurovať alebo zakázať conntrack alebo napísať pravidlá iptables, aby ste obišli conntrack. Nesledovaná politika v Calico je jednoduchšia a efektívnejšia možnosť, ak chcete spracovať pripojenia čo najrýchlejšie. Napríklad, ak používate masívne Memcache alebo ako dodatočné opatrenie ochrany proti DDOS.

Prečítaj toto blog post (Alebo náš preklad), kde nájdete ďalšie informácie vrátane testov výkonnosti pomocou nesledovanej politiky.

Keď v Calico globalNetworkPolicy nastavíte možnosť „doNotTrack: true“, stane sa **nesledovanou** politikou a použije sa veľmi skoro v procese spracovania paketov Linuxu. Pri pohľade na vyššie uvedený diagram sa nesledované politiky aplikujú v reťazcoch PREROUTING a OUTPUT v nespracovanej tabuľke pred spustením sledovania pripojenia (conntrack). Keď je paket povolený zásadou nesledovania, je označený, aby sa zakázalo sledovanie pripojenia pre daný paket. To znamená:

  • Nesledovaná politika sa aplikuje na základe jednotlivých paketov. Neexistuje žiadna koncepcia spojenia (alebo toku). Nedostatok spojení má niekoľko dôležitých dôsledkov:
  • Ak chcete povoliť prenos požiadaviek aj odozvy, potrebujete pravidlo pre prichádzajúce aj odchádzajúce (pretože Calico zvyčajne používa conntrack na označenie prenosu odozvy ako povolený).
  • Nesledovaná politika nefunguje pre úlohy Kubernetes (pody), pretože v tomto prípade neexistuje spôsob, ako sledovať odchádzajúce pripojenie z pod.
  • NAT nefunguje správne s nesledovanými paketmi (keďže jadro ukladá mapovanie NAT v conntrack).
  • Pri prechode cez pravidlo „povoliť všetko“ v politike nesledovania budú všetky pakety označené ako nesledované. Takmer vždy to nie je to, čo chcete, takže je dôležité byť veľmi selektívny, pokiaľ ide o pakety povolené nesledovanými politikami (a umožniť, aby väčšina prevádzky prešla cez normálne sledované politiky).
  • Nesledované politiky sa aplikujú na samom začiatku procesu spracovania paketov. Toto je veľmi dôležité pochopiť pri vytváraní politík Calico. Môžete mať politiku pod s objednávkou:1 a nesledovanú politiku s objednávkou:1000. To bude jedno. Pred politikou pre modul sa použije zásada Nesledované. Nesledované politiky rešpektujú príkaz na vykonanie iba medzi sebou.

Pretože jedným z účelov politiky doNotTrack je vynútiť túto politiku veľmi skoro v procese spracovania paketov Linuxu, Calico vyžaduje, aby bolo pri používaní doNotTrack povinné zadať voľbu applyOnForward. S odvolaním sa na diagram spracovania paketov si všimnite, že pred akýmikoľvek rozhodnutiami o smerovaní sa uplatňuje politika nesledovania (5). Prevádzka môže byť nasmerovaná na hostiteľský proces alebo môže byť presmerovaná na modul alebo iný uzol.

Výsledky

Pozreli sme sa na rôzne možnosti politiky (koncový bod hostiteľa, ApplyOnForward, preDNAT a Untracked) v Calico a ako sa aplikujú na cestu spracovania paketov. Pochopenie toho, ako fungujú, pomáha pri vytváraní účinných a bezpečných politík. S Calico môžete použiť globálnu sieťovú politiku, ktorá sa vzťahuje na štítok (skupinu uzlov a podov) a aplikovať politiky s rôznymi parametrami. To umožňuje profesionálom v oblasti bezpečnosti a dizajnu siete pohodlne chrániť „všetko“ (typy koncových bodov) naraz pomocou jediného jazyka politiky s politikami Calico.

Poďakovanie: Chcel by som poďakovať Sean Crampton и Alexa Pollitta za ich prehľad a cenné informácie.

Zdroj: hab.com

Pridať komentár