Sigurimi i trafikut të grupeve të Kubernetes me politikat e rrjetit të pod


Kubernetes Pods mund të komunikojnë lirisht me njëri-tjetrin si parazgjedhje. Kjo paraqet një rrezik sigurie kur grupi juaj përdoret për aplikacione ose ekipe të shumta. Sjellja e gabuar ose qasja me qëllim të keq në një Pod mund të drejtojë trafikun në grupet e tjera të grupit tuaj.

Ky artikull do t'ju mësojë se si ta shmangni këtë skenar duke vendosur politikat e rrjetit. Këto rregulla ju lejojnë të kontrolloni flukset e trafikut Pod-to-Pod në nivelin e adresës IP (shtresa OSI 3 ose 4). Ju mund të përcaktoni saktësisht burimet e hyrjes dhe daljes të lejuara për çdo Pod.

Krijimi i një politike rrjeti

Politikat e rrjetit krijohen duke shtuar objekte NetworkPolicy në grupin tuaj. Çdo politikë përcakton Pods për të cilat zbatohet dhe një ose më shumë rregulla të hyrjes dhe daljes. Këtu është një manifestim bazë i politikës:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: app
spec:
  podSelector:
    matchLabels:
      component: database
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
      - podSelector:
          matchLabels:
            component: api
  egress:
    - to:
        - podSelector:
            matchLabels:
              component: api

Kjo politikë rrjeti zbatohet për çdo Pod me një etiketë component: database në hapësirën e emrave app. Ai thotë se trafiku hyrës (hyrës) dhe i daljes (daljes) lejohet vetëm nga dhe në Pods me një etiketë komponent: api. Çdo kërkesë që vjen nga Pods të tjera, si p.sh. component: web-frontend, do të bllokohet.

Politikat e rrjetit mund të aplikohen si çdo objekt tjetër duke përdorur Kubectl. Ato do të hyjnë në fuqi menjëherë pasi të krijohen. Mund të shtoni politikën e rrjetit përpara se të filloni Pods-et që ai zgjedh.

$ kubectl apply -f policy.yaml
networkingpolicy.networking.k8s.io/network-policy created

Si funksionojnë politikat e rrjetit

Politikat e rrjetit zbatohen nga shtojca aktive e rrjetit të grupit tuaj. Politikat tuaja nuk do të kenë asnjë efekt nëse shtojca juaj nuk e mbështet funksionin. Opsionet më të njohura si Calico dhe Cilium dërgohen me mbështetjen e politikave të rrjetit të aktivizuar.

Kur një politikë rrjeti zbatohet për një Pod, shtojca do të inspektojë trafikun e saj për të kontrolluar se është në përputhje me kërkesat e politikës. Çdo lidhje që nuk plotëson kriteret do të mos lejohet. Pod që u përpoq të niste lidhjen do të gjejë se hosti në distancë është i paarritshëm, ose sepse po përpiqej të hynte në një burim të bllokuar nga një rregull daljeje, ose sepse një Pod në distancë mohoi lidhjen hyrëse duke përdorur një rregull hyrjeje.

Një lidhje e suksesshme midis dy Pods mund të krijohet vetëm kur politikat e rrjetit në të dyja e lejojnë atë. Lidhja mund të ndalohet nga një rregull i daljes së Pod-it inicues, ose një rregull hyrjeje në objektiv.

Politikat e rrjetit kanë gjithmonë natyrë shtesë. Kur politika të shumta zgjedhin të njëjtin Pod, lista e burimeve të lejuara të hyrjes dhe daljes do të jetë kombinimi i të gjitha politikave.

Shembull i politikave të rrjetit

Politikat e rrjetit mbështesin shumë opsione të ndryshme për personalizimin e Pods që synojnë dhe llojet e lidhjeve që lejohen. Shembujt e mëposhtëm paraqesin disa raste të përdorimit të zakonshëm.

Aplikoni një politikë për çdo Pod në hapësirën e emrave, duke lejuar vetëm trafikun e hyrjes nga një bllok specifik adresash IP

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - ipBlock:
            cidr: 172.17.0.0/16

Blloku bosh podSelector do të thotë që të gjitha Pods e hapësirës së emrave janë në shënjestër nga politika. Rregulli ipBlock kufizon trafikun hyrës në Pods me një adresë IP në intervalin e specifikuar. Trafiku në dalje nuk është i bllokuar.

Lejo trafikun Ingress nga një bllok adresash IP, por përjashto disa IP specifike

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - ipBlock:
            cidr: 172.17.0.0/16
            except:
              - 172.17.0.1/24
              - 172.17.0.2/24
              - 172.17.0.3/24

Rregullat ipBlock mbështesin një fushë përveç për të përjashtuar trafikun që vjen ose drejtohet në IP të veçanta.

Lejo trafikun Ingress nga të gjitha Pods në hapësirën e emrave, por vetëm nga një port specifik

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector: {}
          ports:
            - protocol: TCP
              port: 443

Fusha portet disponohet te rregullat e hyrjes dhe daljes. Ai përcakton portet nga të cilat trafiku mund të merret dhe dërgohet. Mund të specifikoni opsionalisht një gamë portash, si p.sh. 3000 – 3500, duke vendosur fushën endPort (3500) përveç port (3000).

Lejo trafikun nga Pods me një etiketë specifike që ekziston në një hapësirë tjetër emri

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: database
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              application: demo-app
          podSelector:
            matchLabels:
              component: database

Politika thotë se çdo Pod i etiketuar component: database mund të arrijë të gjitha Pods në hapësirën e emrave baza e të dhënave, nëse hapësira e tij e emrave është etiketuar aplikacioni demo .

Mund të lejosh trafikun nga të gjitha Pods në një hapësirë të jashtme emrash duke krijuar një rregull që përfshin vetëm një fushë namespaceSelector.

Lejo në mënyrë të qartë të gjithë trafikun

Ndonjëherë mund të dëshironi të lejoni në mënyrë eksplicite të gjithë trafikun e një lloji të caktuar brenda një hapësire emri. Përfshini llojin në politikën tuaj, por jepni një përzgjedhës bosh Pod dhe pa rregulla:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - {}
  egress:
    - {}

Të gjithë Pods në hapësirën e emrave mund të komunikojnë lirisht, sikur të mos kishte asnjë politikë. Krijimi i politikës gjithsesi ju lejon t'u tregoni synimet tuaja përdoruesve të tjerë të grupimit. Ata mund të vënë në dyshim praninë e një hapësire emri me rrjete të pakufizuara në një grup që është siguruar ndryshe.

Kur të përdorni politikat e rrjetit

Politikat e rrjetit duhet të krijohen për secilën nga hapësirat e emrave dhe Pods në grupin tuaj. Kjo izolon më mirë Pods tuaj dhe ju vë në kontroll të rrjedhës së trafikut.

Përpiquni t'i bëni politikat tuaja sa më të qarta. Zgjerimi i tepërt i aksesit, si p.sh. lejimi i aksesit midis të gjitha Pods në një hapësirë emri, ju lë të ekspozuar ndaj rreziqeve nëse një nga kontejnerët tuaj rrezikohet. Merrni parasysh përdorimin e përzgjedhësve të saktë për të identifikuar telekomandat individuale të hyrjes dhe daljes për Pods delikate si shërbimet e vërtetimit, bazat e të dhënave dhe mbajtësit e pagesave.

Kubernetes nuk mundëson asnjë politikë rrjeti si parazgjedhje që mund të lejojë që të ndodhin mbikëqyrje, edhe nëse synoni që të gjitha Pods të mbrohen nga një politikë. Ju mund ta zbusni këtë rrezik duke shtuar një politikë të kapjes së të gjithëve në hapësirat tuaja të emrave. Kjo politikë zgjedh çdo Pod në hapësirën e emrave dhe zbaton një rregull që ndalon të gjithë komunikimin në rrjet:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

Politikat e rrjetit janë gjithmonë të shtrira në hapësirat e emrave, kështu që do t'ju duhet të krijoni një kapje të veçantë për secilën prej tyre.

Përmbledhje

Kubernetes lejon që të gjitha Pods në grupin tuaj të komunikojnë me njëri-tjetrin. Kjo është shumë e lejueshme për aplikacionet e botës reale që ekzekutohen në grupe me shumë qëllime. Politikat e rrjetit e adresojnë këtë problem duke ofruar një sistem të ngjashëm me murin e zjarrit për menaxhimin e burimeve të hyrjes dhe objektivave të daljes që çdo Pod pranon.

Është praktikë e mirë të konfiguroni një politikë rrjeti në të gjitha Pod-et tuaja. Kjo do të sigurojë grupin tuaj në mënyrë që të lejohen vetëm flukset legjitime të trafikut. Politikat e rrjetit janë vetëm një pjesë e sigurisë së Kubernetes, megjithatë: mekanizma të tjerë mbrojtës si kontekstet e sigurisë RBAC dhe Pod janë gjithashtu mjete thelbësore për forcimin e mjedisit tuaj.


Të gjitha të drejtat e rezervuara. © Linux-Console.net • 2019-2024