Razumijevanje opcija mrežne politike uz Calico

Razumijevanje opcija mrežne politike uz Calico

Mrežni dodatak Calico pruža širok raspon mrežnih pravila s jedinstvenom sintaksom za zaštitu hardverskih hostova, virtualnih strojeva i modula. Ta se pravila mogu primijeniti unutar imenskog prostora ili biti globalna mrežna pravila koja se primjenjuju na krajnja točka domaćina (za zaštitu aplikacija koje se izvode izravno na hostu - host može biti poslužitelj ili virtualni stroj) ili krajnja točka radnog opterećenja (za zaštitu aplikacija koje se izvode u spremnicima ili hostiranih virtualnih strojeva). Pravila Calico vam omogućuju primjenu sigurnosnih mjera na različitim točkama putanje paketa pomoću opcija kao što su preDNAT, unraracked i applyOnForward. Razumijevanje načina rada ovih opcija može pomoći u poboljšanju sigurnosti i performansi vašeg cjelokupnog sustava. Ovaj članak objašnjava bit ovih Calico opcija pravila (preDNAT, unraracked i applyOnForward) primijenjenih na krajnje točke glavnog računala, s naglaskom na ono što se događa u putovima obrade paketa (iptabels lancima).

Ovaj članak pretpostavlja da imate osnovno razumijevanje načina rada mrežnih pravila Kubernetes i Calico. Ako ne, preporučujemo da ga isprobate vodič za osnovne mrežne politike и vodič za zaštitu hosta koristeći Calico prije čitanja ovog članka. Također očekujemo da imate osnovno razumijevanje rada iptables u linuxu.

platno globalna mrežna politika omogućuje vam primjenu skupa pravila pristupa prema oznakama (na grupe hostova i radnih opterećenja/podova). Ovo je vrlo korisno ako zajedno koristite heterogene sustave - virtualne strojeve, sustav izravno na hardveru ili kubernetes infrastrukturu. Osim toga, možete zaštititi svoj klaster (čvorove) pomoću skupa deklarativnih pravila i primijeniti mrežna pravila na dolazni promet (na primjer, putem usluge NodePorts ili External IPs).

Na osnovnoj razini, kada Calico poveže pod s mrežom (pogledajte donji dijagram), povezuje ga s hostom pomoću virtualnog Ethernet sučelja (veth). Promet koji šalje pod dolazi do glavnog računala s ovog virtualnog sučelja i obrađuje se na isti način kao da dolazi s fizičkog mrežnog sučelja. Prema zadanim postavkama, Calico ta sučelja naziva caliXXX. Budući da promet dolazi kroz virtualno sučelje, prolazi kroz iptables kao da je pod jedan skok udaljen. Stoga, kada promet dolazi do/od modula, prosljeđuje se sa stajališta domaćina.

Na Kubernetes čvoru koji izvodi Calico, možete preslikati virtualno sučelje (veth) na radno opterećenje kako slijedi. U donjem primjeru možete vidjeti da je veth#10 (calic1cbf1ca0f8) povezan s cnx-manager-* u prostoru imena 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
...

Razumijevanje opcija mrežne politike uz Calico

S obzirom da Calico stvara veth sučelje za svako radno opterećenje, kako provodi pravila? Da bi to učinio, Calico stvara spojnice u različitim lancima puta obrade paketa pomoću iptables.

Donji dijagram prikazuje lance uključene u obradu paketa u iptables (ili podsustav netfilter). Kada paket stigne kroz mrežno sučelje, prvo prolazi kroz lanac PREROUTING. Zatim se donosi odluka o usmjeravanju, a na temelju toga paket prolazi kroz INPUT (usmjeren na procese glavnog računala) 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 vanjski entitet (povezan s vethom) u smislu obrade iptables. Ukratko:

  • Proslijeđeni promet (nat, usmjeren ili do/od modula) prolazi kroz lance PREROUTING - FORWARD - POSTROUTING.
  • Promet prema procesu lokalnog hosta prolazi kroz lanac PREROUTING - INPUT.
  • Promet iz procesa lokalnog hosta prolazi kroz lanac OUTPUT - POSTROUTING.

Razumijevanje opcija mrežne politike uz Calico

Calico nudi opcije pravila koje vam omogućuju primjenu pravila u svim lancima. Imajući to na umu, pogledajmo različite opcije konfiguracije politike dostupne u Calicu. Brojevi na popisu opcija u nastavku odgovaraju brojevima na gornjem dijagramu.

  1. Pravila krajnje točke (pod) radnog opterećenja
  2. Politika krajnje točke hosta
  3. Opcija ApplyOnForward
  4. PreDNAT politika
  5. Nepraćena politika

Započnimo gledajući kako se pravila primjenjuju na krajnje točke radnog opterećenja (Kubernetes pods ili OpenStack VM), a zatim pogledajmo opcije pravila za krajnje točke hosta.

Krajnje točke radnog opterećenja

Pravila krajnje točke radnog opterećenja (1)

Ovo je opcija za zaštitu vaših kubernetes mahuna. Calico podržava rad s Kubernetes NetworkPolicy, ali nudi i dodatna pravila - Calico NetworkPolicy i GlobalNetworkPolicy. Calico stvara lanac za svaku pod (radno opterećenje) i spaja ULAZNE i IZLAZNE lance za radno opterećenje na tablicu filtra lanca NAPRIJED.

Krajnje točke domaćina

Pravila krajnje točke glavnog računala (2)

Uz CNI (mrežno sučelje spremnika), Calico politike pružaju mogućnost zaštite samog hosta. U Calicu možete stvoriti krajnju točku glavnog računala navođenjem kombinacije sučelja glavnog računala i, ako je potrebno, brojeva portova. Provedba politike za ovaj entitet postiže se pomoću tablice filtera u INPUT i OUTPUT lancima. Kao što možete vidjeti na dijagramu, (2) oni se primjenjuju na lokalne procese na čvoru/domaćinu. To jest, ako stvorite pravilo koje se primjenjuje na krajnju točku glavnog računala, to neće utjecati na promet koji ide do/iz vaših modula. Ali pruža jedinstveno sučelje/sintaksu za blokiranje prometa za vaš host i module pomoću Calico pravila. Ovo uvelike pojednostavljuje proces upravljanja politikama za heterogenu mrežu. Konfiguriranje pravila krajnje točke glavnog računala za poboljšanje sigurnosti klastera još je jedan važan slučaj upotrebe.

Pravila ApplyOnForward (3)

Opcija ApplyOnForward dostupna je u politici globalne mreže Calico kako bi se omogućila primjena pravila na sav promet koji prolazi kroz krajnju točku glavnog računala, uključujući promet koji će proslijediti glavno računalo. To uključuje promet proslijeđen lokalnoj jedinici ili bilo gdje drugdje na mreži. Calico zahtijeva da ova postavka bude omogućena za pravila koja koriste PreDNAT i ne prate se, pogledajte sljedeće odjeljke. Osim toga, ApplyOnForward se može koristiti za praćenje prometa glavnog računala u slučajevima kada se koristi virtualni usmjerivač ili softverski NAT.

Imajte na umu da ako trebate primijeniti istu mrežnu politiku na procese hosta i na module, tada ne morate koristiti opciju ApplyOnForward. Sve što trebate učiniti je stvoriti oznaku za potrebnu krajnju točku hosta i krajnju točku radnog opterećenja (pod). Calico je dovoljno pametan da provede politiku temeljenu na oznakama, bez obzira na vrstu krajnje točke (hostendpoint ili radno opterećenje).

PreDNAT politika (4)

U Kubernetesu, portovi entiteta usluge mogu se eksterno eksponirati korištenjem opcije NodePorts ili, izborno (kada koristite Calico), oglašavanjem pomoću opcija IP-ja klastera ili Vanjskih IP-ova. Kube-proxy uravnotežuje dolazni promet povezan s uslugom s podovima odgovarajuće usluge pomoću DNAT-a. S obzirom na to, kako provodite pravila za promet koji dolazi kroz NodePorts? Kako bi osigurao da se ova pravila primjenjuju prije nego što promet obradi DNAT (što je mapiranje između host:port i odgovarajuće usluge), Calico daje parametar za globalNetworkPolicy pod nazivom "preDNAT: true".

Kada je pre-DNAT omogućen, ova pravila se implementiraju u (4) u dijagramu - u tablici iskrivljenosti lanca PREROUTING - neposredno prije DNAT-a. Ovdje se ne slijedi uobičajeni redoslijed pravila, budući da se primjena ovih pravila događa puno ranije u putu obrade prometa. Međutim, preDNAT politike poštuju redoslijed međusobne primjene.

Prilikom kreiranja pravila s pre-DNAT-om, važno je paziti na promet koji želite obraditi i dopustiti da većina bude odbijena. Promet koji je označen kao 'dozvoli' u pravilima prije DNAT više neće biti provjeravan od strane pravila za krajnju točku, dok će se promet koji ne zadovolji pravilo prije DNAT nastaviti kroz preostale lance.
Calico je učinio obaveznim uključivanje opcije applyOnForward kada se koristi preDNAT, budući da po definiciji odredište prometa još nije odabrano. Promet se može usmjeriti na glavni proces ili se može proslijediti podu ili drugom čvoru.

Nepraćena pravila (5)

Mreže i aplikacije mogu imati velike razlike u ponašanju. U nekim ekstremnim slučajevima aplikacije mogu generirati mnoge kratkotrajne veze. To može uzrokovati da conntrack (osnovna komponenta Linux mrežnog skupa) ostane bez memorije. Tradicionalno, da biste pokrenuli ove vrste aplikacija na Linuxu, morali biste ručno konfigurirati ili onemogućiti conntrack, ili napisati pravila za iptables da zaobiđete conntrack. Nepraćena politika u Calicu je jednostavnija i učinkovitija opcija ako želite obraditi veze što je brže moguće. Na primjer, ako koristite masivnu memcache ili kao dodatna mjera zaštite od DDOS.

Pročitaj ovo blog post (Ili naš prijevod) za više informacija, uključujući testove performansi pomoću nepraćenih pravila.

Kada postavite opciju "doNotTrack: true" u Calico globalNetworkPolicy, ona postaje **nepraćena** politika i primjenjuje se vrlo rano u Linux cjevovodu za obradu paketa. Gledajući gornji dijagram, pravila koja se ne prate primjenjuju se u lancima PREROUTING i OUTPUT u neobrađenoj tablici prije nego što se pokrene praćenje veze (conntrack). Kada je paket dopušten nepraćenim pravilom, označen je da onemogućuje praćenje veze za taj paket. To znači:

  • Nepraćeno pravilo primjenjuje se po paketu. Ne postoji koncept veze (ili toka). Nedostatak veza ima nekoliko važnih posljedica:
  • Ako želite dopustiti i promet zahtjeva i odgovora, potrebno vam je pravilo i za dolazni i za odlazni (budući da Calico obično koristi conntrack za označavanje prometa odgovora kao dopuštenog).
  • Nepraćeno pravilo ne funkcionira za Kubernetes radna opterećenja (podove), jer u ovom slučaju ne postoji način za praćenje odlazne veze iz modula.
  • NAT ne radi ispravno s nepraćenim paketima (jer kernel pohranjuje NAT mapiranje u conntrack).
  • Prilikom prolaska kroz pravilo "dopusti sve" u nepraćenim pravilima, svi će paketi biti označeni kao nepraćeni. To gotovo uvijek nije ono što želite, stoga je važno biti vrlo selektivan u pogledu paketa koje dopuštaju nepraćena pravila (i dopustiti da većina prometa prolazi kroz normalna praćena pravila).
  • Nepraćena pravila primjenjuju se na samom početku cjevovoda za obradu paketa. Ovo je vrlo važno razumjeti prilikom kreiranja Calico pravila. Možete imati pod pravilo s redoslijedom:1 i nepraćeno pravilo s nalogom:1000. Neće biti važno. Pravilo Nepraćeno primijenit će se prije pravila za blok. Politike bez praćenja poštuju redoslijed izvršenja samo među sobom.

Budući da je jedna od svrha pravila doNotTrack primijeniti pravilo vrlo rano u cjevovodu za obradu paketa Linuxa, Calico čini obaveznim specificiranje opcije applyOnForward kada se koristi doNotTrack. Pozivajući se na dijagram obrade paketa, imajte na umu da se pravilo untracked(5) primjenjuje prije bilo kakve odluke o usmjeravanju. Promet se može usmjeriti na glavni proces ili se može proslijediti podu ili drugom čvoru.

Rezultati

Pogledali smo različite opcije pravila (Host endpoint, ApplyOnForward, preDNAT i Untracked) u Calicu i kako se primjenjuju na putu obrade paketa. Razumijevanje njihovog funkcioniranja pomaže u razvoju učinkovitih i sigurnih politika. Uz Calico možete koristiti globalnu mrežnu politiku koja se primjenjuje na oznaku (skupinu čvorova i podova) i primijeniti politike s različitim parametrima. To omogućuje stručnjacima za sigurnost i mrežni dizajn da praktično zaštite "sve" (vrste krajnjih točaka) odjednom koristeći jedinstveni jezik pravila s Calico pravilima.

Priznanje: Želio bih zahvaliti Sean Crampton и Alexa Pollitta za njihov pregled i vrijedne informacije.

Izvor: www.habr.com

Dodajte komentar