Pochopenie možností použitia sieťových politík s Calico

Pochopenie možností použitia sieťových politík s Calico

Sieťový plugin Calico poskytuje široký súbor sieťových politík s jednotným syntaktickým systémom pre ochranu hostiteľov na hardvéri, virtuálnych strojoch a podcoch. Tieto politiky môžu byť aplikované v rámci namespace alebo byť globálnymi sieťovými politikami platnými pre host endpoint (pre ochranu aplikácií, ktoré bežia priamo na hoste — hostiteľ môže byť priamo server alebo virtuálny stroj) alebo na workload endpoint (pre ochranu aplikácií, ktoré bežia v kontajneroch alebo virtuálnych strojoch umiestnených na hoste). Politiky Calico umožňujú implementovať bezpečnostné opatrenia pre rôzne body cesty paketov pomocou takýchto parametrov, ako sú preDNAT, unraracked a applyOnForward. Pochopenie toho, ako tieto možnosti fungujú, môže pomôcť zvýšiť bezpečnosť a výkonnosť systému ako celku. V tomto článku sa vysvetľujú základné aspekty týchto parametrov politík Calico (preDNAT, unraracked a applyOnForward), aplikovaných na hostiteľské body, s dôrazom na to, čo sa deje v cestách spracovania paketov (reťazcoch iptables).

Tento článok predpokladá, že máte pochopenie základných princípov fungovania sieťových politík Kubernetes a Calico. Ak nie, odporúčame vyskúšať basic network policy tutorial a host protection tutorial s Calico, pred čítaním tohto článku. Taktiež predpokladáme, že máte základné pochopenie fungovania iptables v Linuxe.

Calico global network policy dovoľuje vám aplikovať súbor pravidiel prístupu na základe labelov (pre skupiny hostiteľov a workloads/pods). To je veľmi užitočné, ak používate rôznorodé systémy — virtuálne stroje, systém priamo na hardvéri alebo infraštruktúru Kubernetes. Taktiež môžete chrániť svoj cluster (nody) pomocou súboru deklaratívnych politík a aplikovať sieťové politiky na prichádzajúcu prevádzku (napríklad cez NodePorts alebo External IPs).

Na fundamentálnej úrovni, keď Calico pripája pod k sieti (pozri schému nižšie), pripája ho k hostiteľovi pomocou virtuálneho Ethernet rozhrania (veth). Odoslaný traffic z podu prichádza na hostiteľa z tohto virtuálneho rozhrania a spracováva sa rovnako, ako keby prišiel z fyzického sieťového rozhrania. Predvolene Calico nazýva tieto rozhrania caliXXX. Keďže traffic prichádza cez virtuálne rozhranie, prechádza cez iptables, akoby sa pod nachádzal na vzdialenosti jedného hopu. Preto, keď traffic prichádza/odchádza od podu, je presmerovaný (forwarded) z pohľadu hostiteľa.

Na uzle Kubernetes, na ktorom je spustený Calico, môžete priradiť virtuálne rozhranie (veth) k workloadu nasledujúcim spôsobom. V uvedenom príklade môžete vidieť, že veth#10 (calic1cbf1ca0f8) je pripojené k cnx-manager-* v namespace calico-monitoring.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4:  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í použitia sieťových politík s Calico

Vzhľadom na to, že Calico vytvára veth rozhranie pre každý workload, ako aplikuje politiky? Na to Calico vytvára hooky do rôznych reťazcov spracovania paketov, používajúc iptables.

Na schéme nižšie sú zobrazené reťazce účastniace sa spracovania paketov v iptables (alebo subsystéme netfilter). Keď paket prichádza cez sieťové rozhranie, najprv prechádza cez reťazec PREROUTING. Potom sa rozhoduje o smerovaní a na základe toho paket prechádza buď cez INPUT (smerovaný na procesy hostiteľa), alebo cez FORWARD (smerovaný na pod alebo na inú uzol v sieti). Z lokálneho procesu paket prechádza cez reťazec OUTPUT a následne POSTROUTING pred odoslaním po kábli.

Všimnite si, že pod je tiež vonkajším objektom (pripojeným k veth) z hľadiska spracovania iptables. Zhrňme to:

  • Presmerovaný (forwarded) traffic (nat, smerovaný alebo do/z podu) prechádza cez reťazce PREROUTING — FORWARD — POSTROUTING.
  • Traffic na lokálny proces hostiteľa prechádza cez reťazec PREROUTING — INPUT.
  • Traffic od lokálneho procesu hostiteľa prechádza cez reťazec OUTPUT — POSTROUTING.

Pochopenie možností použitia sieťových politík s Calico

Calico poskytuje možnosti pre politiky, pomocou ktorých môžete aplikovať politiky pre všetky reťazce. Odrážať na to, poďme sa pozrieť na rôzne možnosti nastavenia politík dostupných v Calico. Čísla v zozname možností nižšie zodpovedajú číslam na vyššie uvedenom diagrame.

  1. Politika pracovného bodu (pod)
  2. Politika hostiteľského bodu
  3. Možnosť ApplyOnForward
  4. Politika PreDNAT
  5. Politika Untracked

Začnime tým, ako sa politiky aplikujú na workload endpoints (pod’y Kubernetes alebo OpenStack VM), a potom sa pozrime na možnosti politík pre host endpoints.

Workload Endpoints

Politika pracovného bodu (1)

Toto je možnosť na ochranu vašich pod’ov Kubernetes. V Calico je podporovaná práca s Kubernetes NetworkPolicy, ale tiež poskytuje ďalšie politiky — Calico NetworkPolicy a GlobalNetworkPolicy. Calico vytvára reťazec pre každý pod (workload) a podvesí do reťazcov INPUT a OUTPUT pre workload do tabuľky filtrov reťazca FORWARD.

Host Endpoints

Politika hostiteľského bodu (2)

Okrem CNI (container network interface) politiky Calico poskytujú možnosť ochrany priamo hostiteľa. V Calico môžete vytvoriť host endpoint, určením kombinácie rozhrania hostiteľa a, ak je to potrebné, čísiel portov. Aplikácia politík pre túto entitu sa dosahuje pomocou tabuľky filtrov v reťazcoch INPUT a OUTPUT. Ako je vidieť z diagramu, (2) sú aplikované na lokálne procesy na node/hostiteľovi. To znamená, že ak ste vytvorili politiku, ktorá sa aplikuje na host endpoint, nebude mať vplyv na prevádzku idúcu k/od vašich pod’ov. Ale prostredníctvom nej sa zabezpečuje jednotné rozhranie/syntax pre blokovanie prevádzky pre váš host a pod’y pomocou politík Calico. To značne zjednodušuje proces správy politík pre heterogénnu sieť. Nastavenie host endpoint politík na posilnenie ochrany klastrov — to je ďalší dôležitý prípad ich použitia.

Politika ApplyOnForward (3)

Možnosť ApplyOnForward je k dispozícii v Calico global network policy, aby umožnila aplikáciu politík na všetku prevádzku prechádzajúcu cez host endpoint, vrátane prevádzky, ktorá bude hostiteľom presmerovaná (forwarded). Táto prevádzka zahŕňa tú, ktorá je posielaná do lokálneho pod’u alebo kdekoľvek inde v sieti. Calico vyžaduje, aby bol tento parameter zapnutý pre politiky používajúce PreDNAT a untracked, pozri nasledujúce sekcie. Okrem toho, ApplyOnForward môže byť použitý na sledovanie prevádzky hostiteľa v prípadoch použitia virtuálneho smerovača alebo softvérového NAT.

Všimnite si, že ak potrebujete použiť tú istú sieťovú politiku pre hostiteľské procesy aj pre pod-y, nemusíte používať možnosť ApplyOnForward. Stačí vytvoriť label pre požadované hostendpointy a workload endpointy (pod-y). Calico je dosť inteligentné na to, aby aplikovalo politiku na základe labelov, bez ohľadu na typ endpointu (hostendpoint alebo workload).

PreDNAT Politika (4)

V Kubernetes môžu byť porty služby presmerované navonok pomocou možnosti NodePorts alebo, voliteľne (pri použití Calico), ich deklarovaním prostredníctvom možností Cluster IPs alebo External IPs. Kube-proxy vyvažuje prichádzajúci traffic pripojený k službe k pod-om príslušnej služby pomocou DNAT. Z toho vyplýva, ako máš aplikovať politiky na traffic prichádzajúci cez NodePorts? Aby sa tieto politiky aplikovali pred tým, než bude traffic spracovaný DNAT (čo predstavuje mapovanie host:port a príslušnej služby), Calico poskytuje parameter pre globalNetworkPolicy s názvom „preDNAT: true“.

Keď je pre-DNAT zapnutý, tieto politiky sa implementujú (4) na diagrame — v tabuľke mangle reťazca PREROUTING — priamo pred DNAT. Bežný poriadok politík (order) tu nie je dodržaný, pretože aplikácia týchto politík sa deje oveľa skôr po ceste spracovania trafficu. Napriek tomu, politiky preDNAT dodržiavajú poradie aplikácie (order) medzi sebou.

Pri vytváraní politík s pre-DNAT je dôležité dávať pozor na traffic, ktorý chceš spracovať, a povoliť väčšine byť odmietnutej. Traffic označený ako 'allow' v politike pre-DNAT už nebude kontrolovaný politikou hostendpoint, zatiaľ čo traffic, ktorý neprejde politikou pre-DNAT, bude pokračovať cez ostatné reťazce.
Calico urobil povinným zapnutie možnosti applyOnForward pri použití preDNAT, pretože definíciou ešte nie je vybraný cieľ trafficu. Traffic môže byť smerovaný na hostiteľský proces, alebo môže byť presmerovaný na pod alebo na inú uzol.

Nepostrádaná Politika (5)

Siete a aplikácie môžu mať výrazné rozdiely v správaní. V niektorých extrémnych prípadoch môžu aplikácie generovať množstvo krátkodobých pripojení. To môže viesť k nedostatku pamäte v conntrack (hlavnej súčasti sieťového zásobníka Linuxu). Tradične na spustenie takýchto aplikácií v Linuxe potrebujete ručne nastaviť alebo vypnúť conntrack, alebo napísať pravidlá iptables, aby ste obchádzali conntrack. Untracked policy v Calico je jednoduchšia a efektívnejšia možnosť, ak chcete spracovávať pripojenia čo najrýchlejšie. Napríklad, ak používate masívny memcache alebo ako ďalšiu ochrannú vrstvu proti DDOS.

Prečítajte si tento blogový príspevok (alebo našu verziu) pre ďalšie informácie vrátane testov výkonu pri použití untracked policy.

Keď nastavíte možnosť „doNotTrack: true“ v Calico globalNetworkPolicy, stáva sa **neodsledovateľnou** politikou a uplatňuje sa v najskoršej fáze spracovania paketov v systéme Linux. Ak sa pozriete na diagram vyššie, politiky untracked sa uplatňujú v reťazcoch PREROUTING a OUTPUT v tabuľke raw, predtým ako sa spustí sledovanie pripojení (conntrack). Keď je paket povolený untracked politikou, je označený tak, aby sa vypnulo sledovanie pripojenia pre tento paket. To znamená:

  • Politika untracked sa uplatňuje na každý paket. Neexistuje koncept pripojenia (alebo toku). Absencia pripojení (connection) má niekoľko dôležitých dôsledkov:
  • Ak chcete povoliť ako prichádzajúci, tak aj odchádzajúci prenos, potrebujete pravidlo pre prichádzajúci aj odchádzajúci (keďže Calico zvyčajne používa conntrack na označenie odpovedajúceho prenosu ako povoleného).
  • Politika untracked nefunguje pre workload Kubernetes (pod’y), pretože v tomto prípade nie je spôsob, ako sledovať odchádzajúce pripojenie z pod’y.
  • NAT nefunguje správne s neodsledovateľnými paketmi (keďže jadro uchováva mapovanie NAT v conntrack).
  • Pri prechode cez pravidlo „povoliť všetko“ v untracked politike budú všetky pakety označené ako neodsledovateľné. To zvyčajne nie je to, čo potrebujete, preto je dôležité byť veľmi selektívny pri pakety povolenými untracked politikami (a umožniť väčšine prenosu prechádzať cez bežné sledované politiky).
  • Nezaznamenané politiky sa uplatňujú na samotnom začiatku spracovateľského reťazca paketov. Je veľmi dôležité to pochopiť pri vytváraní politík Calico. Môžete mať politiku pre pod s order:1 a nezaznamenanú politiku s order:1000. To nebude dôležité. Nezaznamenaná politika bude uplatnená pred politikou pre pod. Nezaznamenané politiky dodržiavajú poradie vykonávania len medzi sebou.

Keďže jedným z cieľov politiky doNotTrack je vynútiť uplatnenie politiky v najskoršej fáze spracovateľského reťazca paketov Linux, Calico vyžaduje nastavenie možnosti applyOnForward pri používaní doNotTrack. Pri pohľade na diagram spracovania paketov si všimnite, že nezaznamenaná politika (5) sa uplatňuje pred akýmikoľvek rozhodnutiami o smerovaní. Prevádzka môže byť smerovaná na hostiteľský proces, alebo môže byť preposlaná na pod alebo na inú uzol.

Zhrnutie

Preskúmali sme rôzne možnosti politík (Host endpoint, ApplyOnForward, preDNAT a Nezaznamenané) v Calico a ako sa uplatňujú v procese spracovania paketov. Pochopenie podstaty ich fungovania pomáha pri vývoji efektívnych a bezpečných politík. S Calico môžete využiť globálnu sieťovú politiku, ktorá sa uplatňuje na label (skupinu uzlov a pod) a uplatniť politiky s rôznymi parametrami. To umožňuje odborníkom na bezpečnosť a návrh siete pohodlne chrániť všetko (typy koncových bodov) pomocou jedného jazyka politík s politikami Calico.

Poďakovanie: Chcel by som sa poďakovať Shonovi Crumptonovi a Alexovi Pollittovi za ich revíziu a za cenné informácie.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster