A hálózati irányelvek érvényesítési lehetőségei a Calico segítségével

A hálózati irányelvek érvényesítési lehetőségei a Calico segítségével

A Calico hálózati beépülő modul a hálózati házirendek széles skáláját kínálja egységes szintaxissal a hardvergazdagépek, virtuális gépek és pod-ok védelmére. Ezek a házirendek alkalmazhatók egy névtéren belül, vagy lehetnek globális hálózati házirendek, amelyekre vonatkoznak gazdagép végpontja (a közvetlenül a gazdagépen futó alkalmazások védelmére - a gazdagép lehet szerver vagy virtuális gép) ill munkaterhelés végpontja (tárolókban vagy tárolt virtuális gépekben futó alkalmazások védelmére). A Calico házirendek lehetővé teszik, hogy biztonsági intézkedéseket alkalmazzon a csomag útvonalának különböző pontjain olyan opciókkal, mint a preDNAT, unraracked és applyOnForward. Ezen opciók működésének megértése javíthatja a teljes rendszer biztonságát és teljesítményét. Ez a cikk ismerteti a gazdagép végpontokra alkalmazott Calico házirend-beállítások (preDNAT, unraracked és applyOnForward) lényegét, különös tekintettel arra, hogy mi történik a csomagfeldolgozási útvonalakon (iptabels láncok).

Ez a cikk feltételezi, hogy alapvető ismeretekkel rendelkezik a Kubernetes és a Calico hálózati házirendek működéséről. Ha nem, javasoljuk, hogy próbálja ki alapvető hálózati házirend oktatóanyag и gazdagépvédelmi oktatóanyag használja a Calico-t a cikk elolvasása előtt. Elvárjuk továbbá a munka alapvető megértését is iptables linuxban.

Karton globális hálózati politika lehetővé teszi hozzáférési szabályok készletének címkék szerinti alkalmazását (gazdacsoportokra és munkaterhelésekre/podokra). Ez nagyon hasznos, ha heterogén rendszereket használ együtt – virtuális gépeket, közvetlenül hardveren lévő rendszert vagy kubernetes infrastruktúrát. Ezenkívül megvédheti fürtjét (csomópontjait) deklaratív házirendek készletével, és hálózati házirendeket alkalmazhat a bejövő forgalomra (például a NodePorts vagy az External IPs szolgáltatáson keresztül).

Alapvetően, amikor a Calico egy pod-ot csatlakoztat a hálózathoz (lásd az alábbi ábrát), virtuális Ethernet interfész (veth) segítségével csatlakoztatja azt a gazdagéphez. A pod által küldött forgalom erről a virtuális interfészről érkezik a gazdagéphez, és ugyanúgy kerül feldolgozásra, mintha egy fizikai hálózati interfészről érkezne. Alapértelmezés szerint a Calico ezeket az interfészeket caliXXX-nek nevezi el. Mivel a forgalom a virtuális felületen keresztül érkezik, az iptables-on keresztül megy, mintha a pod egy ugrásnyira lenne. Ezért amikor a forgalom egy podba érkezik/egyből érkezik, az a gazdagép szemszögéből kerül továbbításra.

A Calico-t futtató Kubernetes-csomóponton a következőképpen rendelhet hozzá egy virtuális felületet (veth) egy munkaterheléshez. Az alábbi példában láthatja, hogy a veth#10 (calic1cbf1ca0f8) a cnx-manager-*-hoz kapcsolódik a calico-monitoring névtérben.

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

A hálózati irányelvek érvényesítési lehetőségei a Calico segítségével

Mivel a Calico minden munkaterheléshez létrehoz egy veth felületet, hogyan érvényesíti a házirendeket? Ehhez a Calico hook-okat hoz létre a csomagfeldolgozási útvonal különböző láncaiban az iptables segítségével.

Az alábbi diagram az iptables (vagy a netfilter alrendszer) csomagfeldolgozásában részt vevő láncokat mutatja be. Amikor egy csomag hálózati interfészen keresztül érkezik, először a PREROUTING láncon megy keresztül. Ezután megszületik az útválasztási döntés, és ennek alapján a csomag vagy az INPUT-on (gazdafolyamatokhoz irányítva) vagy FORWARD-on (a hálózat podjára vagy másik csomópontjára irányítva) halad át. A helyi folyamatból a csomag átmegy az OUTPUT, majd a POSTROUTING láncon, mielőtt leküldené a kábelen.

Vegye figyelembe, hogy a pod az iptables feldolgozás szempontjából egy külső entitás is (a veth-hez kapcsolódik). Összefoglaljuk:

  • A továbbított forgalom (nat, irányított vagy egy podba/ból) áthalad a PREROUTING - FORWARD - POSTROUTING láncokon.
  • A helyi gazdagép folyamatára irányuló forgalom a PREROUTING - INPUT láncon halad keresztül.
  • A helyi gazdagép folyamatából származó forgalom az OUTPUT - POSTROUTING láncon megy keresztül.

A hálózati irányelvek érvényesítési lehetőségei a Calico segítségével

A Calico olyan házirend-lehetőségeket kínál, amelyek lehetővé teszik az irányelvek alkalmazását az összes láncon. Ezt szem előtt tartva nézzük meg a Calicoban elérhető különböző házirend-konfigurációs lehetőségeket. Az alábbi opciók listájában szereplő számok megfelelnek a fenti diagramon szereplő számoknak.

  1. Munkaterhelési végpont (pod) házirend
  2. Gazdavégpont házirend
  3. ApplyOnForward opció
  4. PreDNAT szabályzat
  5. Követetlen szabályzat

Kezdjük azzal, hogy megvizsgáljuk, hogyan alkalmazzák a házirendeket a munkaterhelés-végpontokra (Kubernetes pod-ok vagy OpenStack virtuális gépek), majd nézzük meg a házirend-beállításokat a gazdagép-végpontokhoz.

Munkaterhelési végpontok

Munkaterhelési végpont házirend (1)

Ez egy lehetőség a kubernetes hüvelyek védelmére. A Calico támogatja a Kubernetes NetworkPolicy-val való együttműködést, de további házirendeket is biztosít – Calico NetworkPolicy és GlobalNetworkPolicy. A Calico minden egyes pod (munkaterhelés) számára létrehoz egy láncot, és az INPUT és OUTPUT láncokat a munkaterheléshez rögzíti a FORWARD lánc szűrőtáblájához.

Gazdavégpontok

Gazdavégpont házirend (2)

A CNI (container network interface) mellett a Calico házirendek lehetőséget biztosítanak magának a gazdagépnek a védelmére. A Calico alkalmazásban a gazdagép interfész és szükség esetén a portszámok kombinációjának megadásával hozhat létre gazdagép végpontot. A házirend érvényesítése ennél az entitásnál az INPUT és OUTPUT láncok szűrőtáblázatával érhető el. Amint az ábrán látható, (2) a csomóponton/gazdagépen lévő helyi folyamatokra vonatkoznak. Ez azt jelenti, hogy ha létrehoz egy házirendet, amely a gazdagép végpontjára vonatkozik, az nem lesz hatással a pod-okba érkező/azokból érkező forgalomra. De egyetlen interfészt/szintaxist biztosít a gazdagép és a pod-ok forgalmának blokkolásához a Calico házirendek használatával. Ez nagymértékben leegyszerűsíti a heterogén hálózatok irányelveinek kezelését. Egy másik fontos használati eset a gazdagép-végpont-házirendek konfigurálása a fürt biztonságának növelése érdekében.

ApplyOnForward szabályzat (3)

Az ApplyOnForward opció a Calico globális hálózati házirendjében érhető el, hogy lehetővé tegye a házirendek alkalmazását a gazdagép végponton áthaladó összes forgalomra, beleértve a gazdagép által továbbított forgalmat is. Ez magában foglalja a helyi podba vagy a hálózat bármely más részére továbbított forgalmat. A Calico előírja, hogy ezt a beállítást engedélyezni kell a PreDNAT-ot használó és nyomon követés nélküli házirendekhez, lásd a következő szakaszokat. Ezenkívül az ApplyOnForward használható a gazdagép forgalom figyelésére olyan esetekben, amikor virtuális útválasztót vagy szoftveres NAT-ot használnak.

Vegye figyelembe, hogy ha ugyanazt a hálózati házirendet kell alkalmaznia mind a gazdagép folyamatokra, mind a podokra, akkor nem kell használnia az ApplyOnForward beállítást. Mindössze annyit kell tennie, hogy létrehoz egy címkét a szükséges gazdagép- és munkaterhelés-végponthoz (pod). A Calico elég okos ahhoz, hogy a végpont típusától (hostendpoint vagy workload) függetlenül címkéken alapuló szabályzatot érvényesítsen.

PreDNAT-szabályzat (4)

A Kubernetes szolgáltatásban a szolgáltatási entitások portjai a NodePorts beállítással, vagy opcionálisan (Calico használata esetén) a Fürt IP-címek vagy a Külső IP-címek beállításával hirdethetők meg. A Kube-proxy kiegyensúlyozza a szolgáltatáshoz kötött bejövő forgalmat a megfelelő szolgáltatás podjaihoz a DNAT használatával. Ennek alapján hogyan érvényesítheti a NodePortokon keresztül érkező forgalomra vonatkozó irányelveket? Annak biztosítására, hogy ezeket a házirendeket alkalmazzák, mielőtt a forgalmat a DNAT (amely a gazdagép:port és a megfelelő szolgáltatás közötti leképezést jelenti), a Calico egy "preDNAT: true" nevű paramétert biztosít a globalNetworkPolicy számára.

Ha a pre-DNAT engedélyezve van, ezek a házirendek a diagram (4) pontjában valósulnak meg - a PREROUTING lánc mangle táblázatában - közvetlenül a DNAT előtt. A házirendek szokásos sorrendjét itt nem követjük, mivel ezeknek az irányelveknek az alkalmazása sokkal korábban történik a forgalomfeldolgozási útvonalon. A preDNAT-irányelvek azonban tiszteletben tartják az egymás közötti alkalmazási sorrendet.

Amikor elő-DNAT-tal hoz létre házirendeket, fontos, hogy legyen körültekintő a feldolgozni kívánt forgalommal kapcsolatban, és engedje meg a többség elutasítását. A pre-DNAT-házirendben „engedélyezett”-ként megjelölt forgalmat a továbbiakban nem ellenőrzi a gazdagéppont-házirend, míg a DNS- előtti házirendet megszegő forgalom a fennmaradó láncokon keresztül folytatódik.
A Calico kötelezővé tette az applyOnForward opció engedélyezését a preDNAT használatakor, mivel értelemszerűen a forgalom célállomása még nincs kiválasztva. A forgalom irányítható a gazdagép folyamathoz, vagy továbbítható egy podra vagy egy másik csomópontra.

Követetlen szabályzat (5)

A hálózatok és alkalmazások viselkedésében nagy különbségek lehetnek. Egyes szélsőséges esetekben az alkalmazások sok rövid élettartamú kapcsolatot hozhatnak létre. Emiatt a conntrack (a Linux hálózati verem egyik alapvető összetevője) memóriája elfogy. Hagyományosan az ilyen típusú alkalmazások Linuxon való futtatásához manuálisan kell konfigurálnia vagy letiltania a conntrack-et, vagy meg kellett írnia az iptables szabályokat a conntrack megkerüléséhez. A Calico követetlen szabályzata egyszerűbb és hatékonyabb megoldás, ha a kapcsolatokat a lehető leggyorsabban szeretné feldolgozni. Például ha masszívot használ memcache vagy kiegészítő védelmi intézkedésként az ellen DDOS.

Olvasd ezt el blogbejegyzés (vagy fordításunk).

Ha beállítja a „doNotTrack: true” beállítást a Calico globalNetworkPolicy alkalmazásban, az **untracked** házirend lesz, és a Linux csomagfeldolgozási folyamatának nagyon korán kerül alkalmazásra. A fenti diagramot tekintve a követetlen házirendek a nyers tábla PREROUTING és OUTPUT láncaiban kerülnek alkalmazásra, mielőtt a kapcsolatkövetés (conntrack) elindulna. Ha egy csomagot engedélyez a nyomon követés nélküli házirend, akkor a rendszer megjelöli az adott csomag kapcsolatkövetésének letiltását. Azt jelenti:

  • A követés nélküli szabályzatot csomagonként alkalmazzák. Nincs kapcsolat (vagy áramlás) fogalma. A kapcsolatok hiányának számos fontos következménye van:
  • Ha engedélyezni szeretné a kérés- és a válaszforgalmat is, akkor a bejövő és a kimenő forgalomra is szükség van egy szabályra (mivel a Calico általában a conntrack használatával jelöli meg a válaszforgalmat engedélyezettként).
  • A nyomon követés nélküli házirend nem működik Kubernetes-munkaterheléseknél (pod-oknál), mert ebben az esetben nincs mód a podból kimenő kapcsolat nyomon követésére.
  • A NAT nem működik megfelelően a követetlen csomagokkal (mivel a kernel a NAT-leképezést a conntrack-ben tárolja).
  • Amikor áthalad az „minden engedélyezése” szabályon a nyomon követés nélküli házirendben, az összes csomag nyomon követetlenként lesz megjelölve. Ez szinte mindig nem az, amit szeretne, ezért fontos, hogy nagyon szelektív legyen a nem nyomon követett irányelvek által engedélyezett csomagokkal kapcsolatban (és hagyja, hogy a forgalom nagy része a normál nyomon követett szabályzatokon menjen keresztül).
  • A nyomon nem követett házirendek a csomagfeldolgozási folyamat legelején kerülnek alkalmazásra. Ezt nagyon fontos megérteni a Calico irányelvek létrehozásakor. Rendelkezhet egy pod szabályzattal, amelynek rendelése:1, és egy nem követett kötvényével, amelynek a sorrendje: 1000. Nem számít. A nyomon követés nélküli házirend a sorba rendezésre vonatkozó szabályzat előtt kerül alkalmazásra. A nem követett szabályzatok csak egymás között tartják tiszteletben a végrehajtási sorrendet.

Mivel a doNotTrack házirend egyik célja a házirend nagyon korai érvényre juttatása a Linux csomagfeldolgozási folyamatában, a Calico kötelezővé teszi az applyOnForward beállítás megadását a doNotTrack használatakor. A csomagfeldolgozási diagramra hivatkozva vegye figyelembe, hogy az útválasztási döntések előtt az untracked(5) házirend kerül alkalmazásra. A forgalom irányítható a gazdagép folyamathoz, vagy továbbítható egy podra vagy egy másik csomópontra.

Eredményei

Megvizsgáltuk a különféle házirend-lehetőségeket (Host végpont, ApplyOnForward, preDNAT és Untracked) a Calico alkalmazásban, és hogyan alkalmazzák azokat a csomagfeldolgozási útvonalon. Működésük megértése segít hatékony és biztonságos politikák kialakításában. A Calico segítségével olyan globális hálózati házirendet használhat, amely egy címkére (csomópontok és pod-ok csoportjára) vonatkozik, és különböző paraméterekkel rendelkező házirendeket alkalmazhat. Ez lehetővé teszi a biztonsági és hálózattervező szakemberek számára, hogy kényelmesen védjenek „mindent” (végponttípusokat) egyszerre egyetlen szabályzatnyelvvel a Calico házirendekkel.

Köszönetnyilvánítás: Szeretném megköszönni Sean Crampton и Alexa Pollitta áttekintésükért és értékes információikért.

Forrás: will.com

Hozzászólás