Razumijevanje opcija primjene mrežne politike uz Calico

Razumijevanje opcija primjene mrežne politike uz Calico

Mrežni dodatak Calico pruža širok spektar mrežnih politika sa unificiranom sintaksom za zaštitu hardverskih hostova, virtuelnih mašina i podova. Ove politike se mogu primijeniti unutar imenskog prostora ili biti globalne mrežne politike koje se primjenjuju na krajnja tačka domaćina (za zaštitu aplikacija koje rade direktno na hostu - host može biti server ili virtuelna mašina) ili krajnja tačka radnog opterećenja (za zaštitu aplikacija koje rade u kontejnerima ili hostovanim virtuelnim mašinama). Calico politike vam omogućavaju da primijenite sigurnosne mjere na različitim tačkama putanje paketa koristeći opcije kao što su preDNAT, unracked i applyOnForward. Razumijevanje načina na koji ove opcije funkcionišu može pomoći u poboljšanju sigurnosti i performansi vašeg cjelokupnog sistema. Ovaj članak objašnjava suštinu ovih opcija politike Calico (preDNAT, unracked i applyOnForward) primijenjenih na krajnje tačke domaćina, s naglaskom na ono što se dešava u putevima obrade paketa (iptabels lanci).

Ovaj članak pretpostavlja da imate osnovno razumijevanje o tome kako funkcionišu Kubernetes i Calico mrežne politike. Ako ne, preporučujemo da probate osnovni vodič mrežne politike и vodič za zaštitu domaćina koristite Calico prije nego što pročitate ovaj članak. Takođe očekujemo da imate osnovno razumevanje rada iptables u linuxu.

Calico globalna mrežna politika omogućava vam da primijenite skup pravila pristupa prema oznakama (na grupe hostova i radnih opterećenja/podova). Ovo je veoma korisno ako zajedno koristite heterogene sisteme - virtuelne mašine, sistem direktno na hardveru ili kubernetes infrastrukturu. Osim toga, možete zaštititi svoj klaster (čvorove) korištenjem skupa deklarativnih politika i primijeniti mrežne politike na dolazni promet (na primjer, putem usluge NodePorts ili External IPs).

Na fundamentalnom nivou, kada Calico poveže pod sa mrežom (pogledajte dijagram ispod), on ga povezuje sa hostom koristeći virtuelni Ethernet interfejs (veth). Saobraćaj koji šalje pod dolazi hostu iz ovog virtuelnog interfejsa i obrađuje se na isti način kao da dolazi sa fizičkog mrežnog interfejsa. Podrazumevano, Calico ovim interfejsima daje naziv caliXXX. Pošto saobraćaj dolazi preko virtuelnog interfejsa, on ide kroz iptables kao da je pod udaljen jedan skok. Stoga, kada promet dođe do/iz pod, on se prosljeđuje sa stanovišta domaćina.

Na Kubernetes čvoru koji pokreće Calico, možete mapirati virtuelni interfejs (veth) u radno opterećenje na sledeći način. U primjeru ispod, možete vidjeti da je veth#10 (calic1cbf1ca0f8) povezan sa cnx-manager-* u calico-monitoring imenskom prostoru.

[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
...

Razumijevanje opcija primjene mrežne politike uz Calico

S obzirom da Calico kreira veth interfejs za svako radno opterećenje, kako sprovodi politike? Da bi to uradio, Calico kreira kuke u različitim lancima putanje obrade paketa koristeći iptables.

Dijagram ispod prikazuje lance uključene u obradu paketa u iptables (ili netfilter podsistemu). Kada paket stigne preko mrežnog interfejsa, on prvo prolazi kroz lanac PREROUTING. Tada se donosi odluka o usmjeravanju i na osnovu toga paket prolazi ili kroz INPUT (usmjeren na host procese) ili FORWARD (usmjeren na pod ili drugi čvor na mreži). Iz lokalnog procesa, paket prolazi kroz OUTPUT, a zatim POSTROUTING lanac prije nego što se pošalje niz kabel.

Imajte na umu da je pod također eksterni entitet (povezan sa vethom) u smislu obrade iptables. Hajde da rezimiramo:

  • Proslijeđeni saobraćaj (nacionalni, rutirani ili do/od pod) prolazi kroz lance PREROUTING - FORWARD - POSTROUTING.
  • Saobraćaj do lokalnog host procesa prolazi kroz PREROUTING - INPUT lanac.
  • Saobraćaj iz lokalnog host procesa prolazi kroz lanac OUTPUT - POSTROUTING.

Razumijevanje opcija primjene mrežne politike uz Calico

Calico nudi opcije politike koje vam omogućavaju primjenu politika u svim lancima. Imajući to na umu, pogledajmo različite opcije konfiguracije politike dostupne u Calico. Brojevi na listi opcija ispod odgovaraju brojevima na dijagramu iznad.

  1. Politika krajnje tačke radnog opterećenja (pod).
  2. Politika krajnje tačke domaćina
  3. Opcija ApplyOnForward
  4. Politika PredNAT
  5. Untracked Policy

Počnimo tako što ćemo pogledati kako se politike primjenjuju na krajnje tačke radnog opterećenja (Kubernetes pods ili OpenStack VM), a zatim pogledamo opcije politike za krajnje tačke hosta.

Krajnje tačke radnog opterećenja

Politika krajnje tačke radnog opterećenja (1)

Ovo je opcija za zaštitu vaših kubernetes podova. Calico podržava rad sa Kubernetes NetworkPolicy, ali takođe pruža dodatne politike - Calico NetworkPolicy i GlobalNetworkPolicy. Calico kreira lanac za svaki pod (radno opterećenje) i zakači u INPUT i OUTPUT lance za radno opterećenje na tablicu filtera FORWARD lanca.

Host Endpoints

Politika krajnje tačke domaćina (2)

Uz CNI (interfejs mreže kontejnera), Calico politike pružaju mogućnost zaštite samog hosta. U Calico, možete kreirati krajnju tačku domaćina tako što ćete navesti kombinaciju interfejsa hosta i, ako je potrebno, brojeva portova. Sprovođenje politike za ovaj entitet se postiže korištenjem tabele filtera u lancima INPUT i OUTPUT. Kao što možete vidjeti iz dijagrama, (2) primjenjuju se na lokalne procese na čvoru/hostu. To jest, ako kreirate politiku koja se primjenjuje na krajnju tačku hosta, to neće utjecati na promet koji ide ka/iz vaših podova. Ali pruža jedno sučelje/sintaksu za blokiranje prometa za vaš host i podove koristeći Calico politike. Ovo uvelike pojednostavljuje proces upravljanja politikama za heterogenu mrežu. Konfiguriranje politika krajnje točke hosta za poboljšanje sigurnosti klastera je još jedan važan slučaj upotrebe.

Politika ApplyOnForward (3)

Opcija ApplyOnForward je dostupna u globalnoj mrežnoj politici Calico kako bi se omogućilo primjenu politika na sav promet koji prolazi kroz krajnju tačku hosta, uključujući promet koji će host proslijediti. Ovo uključuje promet proslijeđen na lokalni pod ili bilo gdje drugdje na mreži. Calico zahtijeva da ova postavka bude omogućena za politike koje koriste PreDNAT i bez praćenja, pogledajte sljedeće odeljke. Dodatno, ApplyOnForward se može koristiti za praćenje prometa na hostu u slučajevima kada se koristi virtuelni ruter ili softverski NAT.

Imajte na umu da ako trebate primijeniti istu mrežnu politiku i na host procese i na podove, onda ne morate koristiti opciju ApplyOnForward. Sve što treba da uradite je da kreirate oznaku za potrebnu krajnju tačku hosta i radnog opterećenja (pod). Calico je dovoljno pametan da sprovodi politiku zasnovanu na oznakama, bez obzira na tip krajnje tačke (hostendpoint ili radno opterećenje).

PredDNAT politika (4)

U Kubernetesu, portovi uslužnog entiteta mogu biti izloženi eksterno pomoću opcije NodePorts ili, opciono (kada se koristi Calico), oglašavanjem pomoću opcija Cluster IPs ili External IPs. Kube-proxy balansira dolazni saobraćaj vezan za uslugu na podove odgovarajuće usluge koristeći DNAT. S obzirom na ovo, kako provodite politike za promet koji dolazi kroz NodePorts? Kako bi osigurao da se ove politike primjenjuju prije nego što promet obradi DNAT (što je mapiranje između host:porta i odgovarajuće usluge), Calico obezbjeđuje parametar za globalNetworkPolicy pod nazivom "preDNAT: true".

Kada je pre-DNAT omogućen, ove politike se implementiraju u (4) na dijagramu - u tablici mangle lanca PREROUTING - neposredno prije DNAT-a. Ovdje se ne poštuje uobičajeni redoslijed politika, budući da se primjena ovih politika događa mnogo ranije na putu obrade saobraćaja. Međutim, politike preDNAT-a međusobno poštuju redoslijed primjene.

Prilikom kreiranja politika s pre-DNAT-om, važno je biti oprezan u vezi sa prometom koji želite obraditi i dozvoliti da većina bude odbijena. Saobraćaj označen kao 'dozvoljen' u politici prije DNAT-a više neće biti provjeravan od strane politike hostendpoint-a, dok će se promet koji ne ispuni pred-DNAT politiku nastaviti kroz preostale lance.
Calico je učinio obaveznim omogućavanje opcije applyOnForward kada se koristi preDNAT, budući da po definiciji odredište saobraćaja još nije odabrano. Saobraćaj se može usmjeriti na host proces, ili se može proslijediti na pod ili drugi čvor.

Nepraćena politika (5)

Mreže i aplikacije mogu imati velike razlike u ponašanju. U nekim ekstremnim slučajevima, aplikacije mogu stvoriti mnogo kratkotrajnih veza. Ovo može uzrokovati da conntrack (osnovna komponenta Linux mrežnog steka) ostane bez memorije. Tradicionalno, da biste pokrenuli ove vrste aplikacija na Linuxu, morali biste ručno konfigurirati ili onemogućiti conntrack, ili napisati iptables pravila da biste zaobišli conntrack. Nepraćena politika u Calico je jednostavnija i efikasnija opcija ako želite obraditi veze što je brže moguće. Na primjer, ako koristite masive memcache ili kao dodatna mjera zaštite od DDOS.

Pročitaj ovo blog post (ili naš prevod) za više informacija, uključujući testove performansi pomoću nepraćene politike.

Kada postavite opciju "doNotTrack: true" u Calico globalNetworkPolicy, ona postaje **nepraćena** politika i primjenjuje se vrlo rano u procesu obrade Linux paketa. Gledajući gornji dijagram, nepraćene politike se primjenjuju u lancima PREROUTING i OUTPUT u sirovoj tabeli prije nego što se započne praćenje veze (conntrack). Kada je paket dozvoljen politikom nepraćenog, on je označen da onemogućava praćenje veze za taj paket. To znači:

  • Nepraćena politika se primjenjuje na osnovu paketa. Ne postoji koncept veze (ili toka). Nedostatak veza ima nekoliko važnih posljedica:
  • Ako želite da dozvolite i saobraćaj zahteva i odgovora, potrebno vam je pravilo i za dolazni i za odlazni (pošto Calico obično koristi conntrack da označi saobraćaj odgovora kao dozvoljen).
  • Nepraćena politika ne radi za Kubernetes radna opterećenja (podove), jer u ovom slučaju ne postoji način da se prati odlazna veza iz pod.
  • NAT ne radi ispravno sa nepraćenim paketima (pošto kernel pohranjuje NAT mapiranje u conntrack).
  • Prilikom prolaska kroz pravilo "dopusti sve" u politici nepraćenih, svi paketi će biti označeni kao nepraćeni. Ovo skoro uvek nije ono što želite, pa je važno da budete veoma selektivni u vezi sa paketima koje dozvoljavaju nepraćene politike (i dozvolite da većina saobraćaja prođe kroz normalna pravila praćenja).
  • Nepraćene politike se primenjuju na samom početku procesa obrade paketa. Ovo je veoma važno razumjeti kada kreirate Calico politike. Možete imati polisu pod s narudžbom:1 i nepraćenu politiku s narudžbom:1000. Neće biti važno. Politika Untracked će se primijeniti prije politike za pod. Nepraćene politike poštuju nalog izvršenja samo među sobom.

Budući da je jedna od svrha politike doNotTrack provođenje politike vrlo rano u cevovodu za obradu Linux paketa, Calico čini obaveznim navođenje opcije applyOnForward kada se koristi doNotTrack. Pozivajući se na dijagram obrade paketa, imajte na umu da se politika untracked(5) primjenjuje prije bilo kakve odluke o rutiranju. Saobraćaj se može usmjeriti na host proces, ili se može proslijediti na pod ili drugi čvor.

Ishodi

Pogledali smo različite opcije politike (Host endpoint, ApplyOnForward, preDNAT i Untracked) u Calico-u i kako se one primjenjuju duž putanje obrade paketa. Razumijevanje njihovog funkcioniranja pomaže u razvoju učinkovitih i sigurnih politika. Sa Calico možete koristiti politiku globalne mreže koja se primjenjuje na oznaku (grupu čvorova i podova) i primjenjivati ​​politike s različitim parametrima. Ovo omogućava profesionalcima za sigurnost i dizajn mreže da jednostavno zaštite "sve" (tipove krajnjih tačaka) odjednom koristeći jedan jezik politika s Calico politikama.

Priznanje: Želeo bih da se zahvalim Sean Crampton и Alexa Pollitta za njihov pregled i vrijedne informacije.

izvor: www.habr.com

Dodajte komentar