Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Fanamarihana. transl.: Ny mpanoratra ny lahatsoratra, Reuven Harrison, dia manana traikefa mihoatra ny 20 taona amin'ny fampivoarana rindrambaiko, ary ankehitriny dia ny CTO sy mpiara-manorina ny Tufin, orinasa iray izay mamorona vahaolana amin'ny fitantanana ny politika momba ny fiarovana. Raha mijery ny politikan'ny tambajotra Kubernetes ho toy ny fitaovana mahery vaika amin'ny fizarazarana tambajotra ao anaty vondron-tambajotra izy, dia mino ihany koa izy fa tsy mora ny mampihatra izany amin'ny fampiharana. Ity fitaovana ity (tena be dia be) dia natao hanatsarana ny fahatsiarovan'ny manam-pahaizana manokana momba ity olana ity ary hanampy azy ireo hamorona ireo fanovana ilaina.

Ankehitriny, orinasa maro no misafidy ny Kubernetes hampandeha ny fampiharana azy ireo. Ny fahalianana amin'ity lozisialy ity dia avo loatra ka ny sasany dia miantso an'i Kubernetes hoe "ny rafitra fiasa vaovao ho an'ny foibe data." Tsikelikely, ny Kubernetes (na k8s) dia manomboka raisina ho ampahany manan-danja amin'ny orinasa, izay mitaky ny fandaminana ny fizotran'ny raharaham-barotra matotra, anisan'izany ny fiarovana ny tambajotra.

Ho an'ireo matihanina amin'ny fiarovana izay very hevitra amin'ny fiaraha-miasa amin'ny Kubernetes, ny tena fanambarana dia mety ho politikan'ny sehatra tsy miankina: avelao ny zava-drehetra.

Ity torolalana ity dia hanampy anao hahatakatra ny rafitra anatiny amin'ny politikan'ny tambajotra; hahatakatra ny maha-samihafa azy ireo amin'ny fitsipika momba ny firewalls mahazatra. Hanarona ny fandrika sasany ihany koa izy io ary hanome tolo-kevitra hanampy amin'ny fiarovana ny fampiharana amin'ny Kubernetes.

Politika tambajotra Kubernetes

Ny rafitra politikan'ny tambajotra Kubernetes dia ahafahanao mitantana ny fifaneraserana amin'ireo rindranasa napetraka eo amin'ny sehatra eo amin'ny sarin'ny tambajotra (fahatelo amin'ny maodely OSI). Ny politikan'ny tambajotra dia tsy manana ny sasany amin'ireo endri-javatra avo lenta amin'ny firewall maoderina, toy ny fampiharana ny OSI Layer 7 sy ny fandrahonana fandrahonana, saingy manome ambaratonga fototra amin'ny fiarovana ny tambajotra izay toerana fanombohana tsara.

Ny politikan'ny tambajotra dia mifehy ny fifandraisana eo amin'ny pods

Ny enta-mavesatra ao amin'ny Kubernetes dia zaraina amin'ny pods, izay misy kaontenera iray na maromaro napetraka miaraka. Ny Kubernetes dia manome adiresy IP azo idirana amin'ny pod hafa ny pod tsirairay. Ny politikan'ny tambajotra Kubernetes dia mametraka zo hidirana ho an'ny vondrona pods mitovy amin'ny fomba ampiasain'ny vondrona fiarovana ao amin'ny rahona hifehezana ny fidirana amin'ireo tranganà milina virtoaly.

Famaritana ny politikan'ny tambajotra

Tahaka ny loharanon-karena Kubernetes hafa, ny politikan'ny tambajotra dia voafaritra ao amin'ny YAML. Ao amin'ny ohatra etsy ambany, ny fampiharana balance fidirana amin'ny postgres:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: balance
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

(Fanamarihana. transl.: ity pikantsary ity, tahaka ireo sary mitovitovy amin'izany rehetra izany, dia noforonina tsy tamin'ny alalan'ny fitaovana Kubernetes teratany, fa tamin'ny fampiasana ny fitaovana Tufin Orca, izay novolavolain'ny orinasa mpanoratra ny lahatsoratra tany am-boalohany ary voatonona any amin'ny faran'ny fitaovana.)

Mba hamaritana ny politikan'ny tambajotranao manokana dia mila fahalalana fototra momba ny YAML ianao. Ity fiteny ity dia mifototra amin'ny indentation (voatondro amin'ny habaka fa tsy tabilao). Ny singa miondrika dia an'ny singa miondrika akaiky indrindra eo amboniny. Ny singa lisitra vaovao dia manomboka amin'ny tsipika, ny singa hafa rehetra dia manana endrika key-value.

Rehefa avy namaritra ny politika ao amin'ny YAML, ampiasao kubectlmba hamoronana azy ao amin'ny cluster:

kubectl create -f policy.yaml

Famaritana ny politikan'ny tambajotra

Ny famaritana ny politikan'ny tambajotra Kubernetes dia misy singa efatra:

  1. podSelector: mamaritra ny pods voakasik'ity politika ity (kendrena) - takiana;
  2. policyTypes: manondro izay karazana politika tafiditra ao anatin'izany: fidirana sy/na fivoahana - azo atao, fa manoro hevitra aho mba hamaritana azy mazava amin'ny tranga rehetra;
  3. ingress: mamaritra avela Narahi- ny fifamoivoizana mankany amin'ny pods kendrena dia tsy voatery;
  4. egress: mamaritra avela sariaka tsy voatery ny fifamoivoizana avy amin'ny pods kendrena.

Ohatra nalaina tao amin'ny tranokala Kubernetes (nosoloiko role amin'ny app), mampiseho ny fomba ampiasana ireo singa efatra:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:    # <<<
    matchLabels:
      app: db
  policyTypes:    # <<<
  - Ingress
  - Egress
  ingress:        # <<<
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:         # <<<
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana
Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Marihina fa tsy voatery ampidirina avokoa ireo singa efatra ireo. Tsy maintsy atao ihany podSelector, azo ampiasaina araka izay irina ny masontsivana hafa.

Raha avelantsika policyTypes, ny politika dia hadika toy izao manaraka izao:

  • Amin'ny alàlan'ny default, dia heverina fa mamaritra ny lafiny ingress. Raha tsy milaza mazava izany ny politika dia hihevitra ny rafitra fa voarara ny fifamoivoizana rehetra.
  • Ny fitondran-tena eo amin'ny lafiny fivoahana dia ho faritana amin'ny fisiana na tsy fisian'ny mari-pamantarana fivoahana mifanaraka amin'izany.

Mba hisorohana ny fahadisoana dia manoro hevitra aho ataovy mazava foana policyTypes.

Araka ny lojika etsy ambony, raha ny masontsivana ingress ary / na egress tsy nesorina, ny politika dia handà ny fifamoivoizana rehetra (jereo ny "Fitsipika fanalana" etsy ambany).

Ny politikan'ny default dia Allow

Raha tsy misy politika voafaritra dia avelan'ny Kubernetes ho default ny fifamoivoizana rehetra. Afaka mifanakalo vaovao malalaka ny pods rehetra. Mety ho toa mifanohitra amin'ny fomba fijery fiarovana izany, saingy tadidio fa ny Kubernetes dia novolavolain'ny mpamorona mba ahafahana mifandray amin'ny fampiharana. Nampiana ny politikan'ny tambajotra taty aoriana.

anaran-tsehatra

Namespaces no rafitra fiaraha-miasa Kubernetes. Izy ireo dia natao hampisaraka ny tontolo lojika amin'ny tsirairay, raha ny fifandraisana eo amin'ny habaka dia avela amin'ny alàlan'ny default.

Sahala amin'ny ankamaroan'ny singa Kubernetes, ny politikan'ny tambajotra dia miaina amin'ny sehatra anarana manokana. Ao amin'ny sakana metadata azonao atao ny mamaritra hoe aiza no misy ny politika:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: my-namespace  # <<<
spec:
...

Raha tsy voafaritra mazava ao amin'ny metadata ny namespace dia hampiasa ny namespace voatondro ao amin'ny kubectl ny rafitra (amin'ny alàlan'ny default namespace=default):

kubectl apply -n my-namespace -f namespace.yaml

Izaho dia mandrisika mamaritra mazava tsara ny namespace, raha tsy hoe manoratra politika mikendry toerana maromaro indray mandeha ianao.

Основной singa podSelector Ao amin'ny politika dia hifidy pods avy amin'ny namespace misy ny politika (tsy mahazo miditra pods avy amin'ny namespace hafa).

Toy izany koa, podSelectors amin'ny sakana fidirana sy fivoahana tsy afaka mifidy pods avy amin'ny toerana misy azy manokana, raha tsy hoe ampiarahinao amin'izy ireo namespaceSelector (Horesahina ao amin'ny fizarana "Sivana amin'ny anaran'ny toerana sy pods").

Fitsipika nomena anarana politika

Ny anaran'ny politika dia miavaka ao anatin'ny namespace mitovy. Tsy misy politika roa mitovy anarana amin'ny habaka iray, fa mety misy politika mitovy anarana amin'ny habaka samihafa. Tena ilaina izany rehefa te hampihatra indray ny politika mitovy amin'ny habaka maro.

Tiako indrindra ny iray amin'ireo fomba fiantsoana anarana. Izy io dia ahitana ny fampifangaroana ny anaran'ny espace miaraka amin'ireo pods kendrena. Ohatra:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres  # <<<
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

etikety

Azonao atao ny mametraka etikety manokana amin'ny zavatra Kubernetes, toy ny pods sy namespaces. Labels (etikety - tags) dia mitovy amin'ny marika ao amin'ny rahona. Ny politikan'ny tambajotra Kubernetes dia mampiasa etikety hisafidianana podsizay ampiharan'izy ireo:

podSelector:
  matchLabels:
    role: db

… na anaran-tsehatraizay ampiharan’izy ireo. Ity ohatra ity dia mifantina ny pods rehetra ao amin'ny namespaces miaraka amin'ny etikety mifanaraka aminy:

namespaceSelector:
  matchLabels:
    project: myproject

Tandremo iray: rehefa mampiasa namespaceSelector ataovy azo antoka fa ahitana ny etikety marina ny espace anarana nofidinao. Tandremo fa naorina-in namespaces toy ny default и kube-system, amin'ny alàlan'ny default dia tsy misy etikety.

Azonao atao ny manampy marika amin'ny habaka toy izao:

kubectl label namespace default namespace=default

Amin'izay fotoana izay ihany koa, namespace ao amin'ny fizarana metadata tokony manondro ny tena anaran'ny habaka fa tsy ny etikety:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default   # <<<
spec:
...

Loharano sy toerana haleha

Ny politikan'ny firewall dia misy fitsipika misy loharano sy toerana haleha. Ny politikan'ny tambajotra Kubernetes dia voafaritra ho an'ny tanjona iray - andian-pod izay ampiharan'izy ireo - ary avy eo mametraka fitsipika momba ny fifamoivoizana miditra sy/na mivoaka. Amin'ny ohatra ataontsika, ny lasibatry ny politika dia ny pods rehetra ao amin'ny namespace default misy etikety misy lakile app ary ny dikany db:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: db   # <<<
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana
Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Soso-pizarana ingress amin'ity politika ity, dia manokatra ny fifamoivoizana miditra amin'ireo pods kendrena. Raha lazaina amin'ny teny hafa, ny ingress no loharano ary ny tanjona dia ny tanjona mifanaraka amin'izany. Toy izany koa, ny fivoahana dia ny toerana haleha ary ny lasibatra no loharano.

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Izany dia mitovy amin'ny fitsipika firewall roa: Ingress → Target; Tanjona → Fivoahana.

Egress sy DNS (zava-dehibe!)

Amin'ny famerana ny fifamoivoizana mivoaka, tandremo manokana ny DNS - Mampiasa an'ity serivisy ity ny Kubernetes hametahana ny serivisy amin'ny adiresy IP. Ohatra, tsy mandeha ity politika manaraka ity satria tsy navelanao ny fampiharana balance fidirana DNS:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  policyTypes:
  - Egress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Azonao atao ny manamboatra izany amin'ny fanokafana ny fidirana amin'ny serivisy DNS:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:               # <<<
    ports:            # <<<
    - protocol: UDP   # <<<
      port: 53        # <<<
  policyTypes:
  - Egress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Singa farany to foana, ary noho izany dia mifidy ankolaka ny pods rehetra amin'ny espace rehetra, mamela balance Alefaso any amin'ny serivisy Kubernetes mifanaraka amin'izany ny fanontaniana DNS (matetika mandeha amin'ny habaka kube-system).

Ity fomba fiasa ity dia miasa, na izany aza milefitra loatra sy tsy azo antoka, satria mamela ny fangatahana DNS ho alefa any ivelan'ny cluster.

Azonao atao ny manatsara izany amin'ny dingana telo misesy.

1. Avelao ny fangatahana DNS ihany ao anatin'ny cluster amin'ny fanampiana namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector: {} # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

2. Avelao ao anatin'ny namespace ihany ny fangatahana DNS kube-system.

Mba hanaovana izany dia mila manampy etikety amin'ny namespace ianao kube-system: kubectl label namespace kube-system namespace=kube-system - ary soraty amin'ny politika fampiasana namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector:         # <<<
        matchLabels:             # <<<
          namespace: kube-system # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

3. Ny olona paranoïde dia afaka mandroso bebe kokoa ary mametra ny fanontaniana DNS amin'ny serivisy DNS manokana kube-system. Ny fizarana "Sivana amin'ny alàlan'ny namespaces sy pods" dia hilaza aminao ny fomba hanatanterahana izany.

Safidy iray hafa dia ny famahana ny DNS amin'ny sehatra namespace. Amin'ity tranga ity dia tsy mila misokatra ho an'ny serivisy tsirairay:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.dns
  namespace: default
spec:
  podSelector: {} # <<<
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

hanaisotra podSelector mifidy ny pods rehetra ao amin'ny namespace.

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Fifanarahana voalohany sy lamina

Ao amin'ny firewall mahazatra, ny hetsika (Avelao na mandà) amin'ny fonosana dia voafaritra amin'ny fitsipika voalohany izay mahafa-po azy. Ao amin'ny Kubernetes, tsy misy dikany ny filaharan'ny politika.

Amin'ny alàlan'ny default, rehefa tsy misy politika napetraka dia avela ny fifandraisana eo amin'ny pods ary afaka mifanakalo vaovao malalaka izy ireo. Raha vao manomboka mamolavola politika ianao, ny pod tsirairay voakasika amin'ny iray amin'izy ireo fara-fahakeliny dia lasa mitoka-monina araka ny fisarahana (lojika OR) amin'ny politika rehetra nifidy azy. Misokatra foana ny pod izay tsy voakasiky ny politika.

Azonao atao ny manova an'io fihetsika io amin'ny fampiasana fitsipika fanalana.

Fitsipika fanalana ("Deny")

Ny politikan'ny firewall mazàna dia mandà izay fifamoivoizana tsy azo atao mazava.

Tsy misy mandà ny hetsika ao Kubernetes, na izany aza, misy fiantraikany mitovy amin'izany dia azo atao amin'ny politika ara-dalàna (mamelabelatra) amin'ny alalan'ny fisafidianana vondrona poakaty misy loharano (fidirana):

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

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Ity politika ity dia misafidy ny pods rehetra ao amin'ny namespace ary mamela ny fidirana ho tsy voafaritra, mandà ny fifamoivoizana miditra rehetra.

Toy izany koa, azonao atao ny mametra ny fifamoivoizana mivoaka rehetra avy amin'ny namespace:

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

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Mariho tsara izany izay politika fanampiny mamela ny fifamoivoizana amin'ny pods ao amin'ny namespace dia ho loha laharana amin'ity fitsipika ity (mitovitovy amin'ny fampidirana fitsipika avela alohan'ny fitsipika mandà amin'ny fandrindrana firewall).

Avelao ny zavatra rehetra (Any-Any-Any-Allow)

Mba hamoronana politikan'ny Allow All, mila ampiana singa poakaty ny politikan'ny Deny etsy ambony ingress:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
  namespace: default
spec:
  podSelector: {}
  ingress: # <<<
  - {}     # <<<
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Mamela ny fidirana amin'ny ny pods rehetra amin'ny namespace rehetra (sy ny IP rehetra) amin'ny pod rehetra ao amin'ny namespace default. Ity fihetsika ity dia alefa amin'ny alàlan'ny default, ka matetika dia tsy mila faritana bebe kokoa. Na izany aza, indraindray ianao dia mety mila manafoana vetivety ny fahazoan-dàlana manokana hamantarana ilay olana.

Ny fitsipika dia azo teritery mba ahafahana miditra ihany karazana pods manokana (app:balance) ao amin'ny toeran'ny anarana default:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-to-balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  ingress: 
  - {}
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Ity politika manaraka ity dia mamela ny fifamoivoizana miditra sy mivoaka rehetra, anisan'izany ny fidirana amin'ny IP rehetra ivelan'ny cluster:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}
  egress:
  - {}
  policyTypes:
  - Ingress
  - Egress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana
Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Manambatra ny politika maro

Ny politika dia atambatra amin'ny fampiasana lojika OR amin'ny ambaratonga telo; Ny fanomezan-dàlana ho an'ny pod tsirairay dia apetraka mifanaraka amin'ny fampitsaharana ny politika rehetra mahakasika azy:

1. Eny an-tsaha from и to Karazana singa telo no azo faritana (ireo rehetra ireo dia atambatra amin'ny fampiasana OR):

  • namespaceSelector - mifidy ny namespace manontolo;
  • podSelector - mifidy pods;
  • ipBlock — mifidy zana-tambajotra.

Ambonin'izany, ny isan'ny singa (na mitovy aza) ao amin'ny fizarana from/to tsy voafetra. Ireo rehetra ireo dia hatambatra amin'ny lojika OR.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

2. Ao anatin'ny fizarana politika ingress afaka manana singa maro from (atambatra amin'ny lojika OR). Toy izany koa, fizarana egress mety ahitana singa maro to (atambatra koa amin'ny disjunction):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
  - from:
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

3. Ny politika samihafa dia ampiarahina amin'ny OR lojika

Saingy rehefa manambatra azy ireo dia misy fetra iray nanondro Chris Cooney: Tsy afaka manambatra politika amin'ny samy hafa ihany ny Kubernetes policyTypes (Ingress na Egress). Ny politika mamaritra ny fidirana (na ny fivoahana) dia hifanipaka.

Fifandraisana eo amin'ny toeran'ny anarana

Amin'ny alàlan'ny default, ny fifampizarana fampahalalana eo amin'ny toeran'ny anarana dia avela. Izany dia azo ovaina amin'ny fampiasana politika fandavana izay hamerana ny fifamoivoizana mivoaka sy/na miditra ao amin'ny namespace (jereo ny "Fitsipika fanalana" etsy ambony).

Rehefa voasakanao ny fidirana amin'ny toerana misy anarana (jereo ny "Fitsipika fanalana" etsy ambony), dia azonao atao ny maningana amin'ny politika fandavana amin'ny alàlan'ny famelana ny fifandraisana avy amin'ny sehatra anarana manokana mampiasa namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: # <<<
        matchLabels:
          namespace: default
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Vokatr'izany, ny pods rehetra ao amin'ny namespace default dia hanana fidirana amin'ny pods postgres amin'ny namespace database. Ahoana anefa raha te hanokatra ny fidirana amin'ny postgres pods manokana ao amin'ny namespace default?

Sivanina araka ny toerana misy anarana sy ny pods

Ny Kubernetes version 1.11 sy ambony dia ahafahanao manambatra ny mpandraharaha namespaceSelector и podSelector mampiasa lojika AND. Toa izao:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace: default
      podSelector: # <<<
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Nahoana izany no adika hoe AND fa tsy ilay OR mahazatra?

Mariho fa podSelector tsy manomboka amin'ny tsipika. Ao amin'ny YAML dia midika izany fa podSelector ary nitsangana teo anoloany namespaceSelector jereo ny singa lisitra mitovy. Noho izany, izy ireo dia mitambatra amin'ny lojika AND.

Manampy tsipika teo aloha podSelector dia hiteraka singa lisitra vaovao, izay hatambatra amin'ny teo aloha namespaceSelector mampiasa lojika OR.

Hifantina pods misy marika manokana amin'ny toerana misy anarana rehetra, midira banga namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Labels maro no miara-miasa amin'ny I

Ny fitsipika momba ny firewall misy zavatra maro (host, network, group) dia atambatra amin'ny fampiasana OR lojika. Ity fitsipika manaraka ity dia hiasa raha mifanaraka ny loharanon'ny fonosana Host_1 OR Host_2:

| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A    | HTTPS   | Allow  |
| Host_2 |             |         |        |
| ----------------------------------------|

Mifanohitra amin'izany, ao amin'ny Kubernetes ny marika isan-karazany ao podSelector na namespaceSelector dia mitambatra amin'ny lojika AND. Ohatra, ity fitsipika manaraka ity dia hifidianana pods izay manana etikety roa, role=db И version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

Mitovy amin'ny lojika ihany koa ny mihatra amin'ny karazana mpandraharaha rehetra: mpifidy lasibatra politika, mpisafidy pod, ary mpifidy namespace.

Subnets sy adiresy IP (IPBlocks)

Ny firewall dia mampiasa VLAN, adiresy IP, ary zana-tsipìka mba hizarana tambajotra.

Ao amin'ny Kubernetes, ny adiresy IP dia voatendry ho an'ny pods ary afaka miova matetika, noho izany dia ampiasaina ny etikety mba hifidianana pods sy namespaces amin'ny politikan'ny tambajotra.

Subnets (ipBlocks) dia ampiasaina rehefa mitantana fifandraisana miditra (miditra) na mivoaka (mivoaka) ivelany (Avaratra-Atsimo). Ohatra, ity politika ity dia misokatra amin'ny pods rehetra avy amin'ny namespace default fidirana amin'ny serivisy DNS Google:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-dns
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 8.8.8.8/32
    ports:
    - protocol: UDP
      port: 53

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Ny mpifidy pod tsy misy na inona na inona amin'ity ohatra ity dia midika hoe "safidio ny pods rehetra ao amin'ny namespace."

Ity politika ity dia mamela ny fidirana amin'ny 8.8.8.8 ihany; voarara ny fidirana amin'ny IP hafa. Noho izany, raha ny tena izy, nosakanao ny fidirana amin'ny serivisy DNS Kubernetes anatiny. Raha mbola te-hanokatra azy ianao dia asehoy mazava tsara izany.

matetika ipBlocks и podSelectors dia misaraka, satria tsy ampiasaina ny adiresy IP anatiny an'ny pods ipBlocks. Amin'ny fanondroana IP pods anatiny, dia avelanao hifandray amin'ny pods miaraka amin'ireo adiresy ireo. Amin'ny fampiharana, tsy ho fantatrao izay adiresy IP hampiasaina, ka izany no tsy tokony hampiasaina hisafidianana pods.

Ho ohatra mifanohitra amin'izany, ity politika manaraka ity dia ahitana ny IP rehetra ary noho izany dia mamela ny fidirana amin'ny pod hafa rehetra:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Tsy afaka manokatra fidirana afa-tsy amin'ny IP ivelany ianao, ankoatry ny adiresy IP anatiny an'ny pods. Ohatra, raha 10.16.0.0/14 ny subnet an'ny pod anao:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.16.0.0/14

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Ports sy protocols

Amin'ny ankapobeny, ny pods dia mihaino seranana iray. Midika izany fa tsy azonao atao ny mamaritra ny laharan'ny seranan-tsambo amin'ny politika ary mamela ny zava-drehetra ho default. Na izany aza, soso-kevitra ny hanao politika ho teritery araka izay azo atao, ka amin'ny toe-javatra sasany dia mbola azonao atao ny mamaritra ny seranana:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
      - port: 443      # <<<
        protocol: TCP  # <<<
      - port: 80       # <<<
        protocol: TCP  # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Mariho fa ny selector ports mihatra amin'ny singa rehetra ao amin'ny sakana to na from, izay misy. Mba hamaritana seranana samihafa ho an'ny andiana singa samihafa, zarao ingress na egress amin'ny fizarana maromaro miaraka amin'ny to na from ary isaky ny misoratra anarana ny seranan-tsambonao:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    ports:             # <<<
     - port: 443       # <<<
       protocol: TCP   # <<<
  - from:
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
     - port: 80        # <<<
       protocol: TCP   # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Fampidirana ny politikan'ny tambajotra Kubernetes ho an'ny matihanina amin'ny fiarovana

Fampandehanana seranan-tsambo default:

  • Raha esorinao tanteraka ny famaritana ny seranan-tsambo (ports), midika izany ny protocole rehetra sy ny seranana rehetra;
  • Raha esorinao ny famaritana protocol (protocol), midika izany hoe TCP;
  • Raha esorinao ny famaritana ny seranan-tsambo (port), midika izany ny seranan-tsambo rehetra.

Fomba fanao tsara indrindra: Aza miantehitra amin'ny soatoavina mahazatra, farito mazava izay ilainao.

Mariho fa tsy maintsy mampiasa seranan-tsambo pod ianao, fa tsy seranan-tsambo serivisy (miresaka bebe kokoa momba izany ao amin'ny paragrafy manaraka).

Voafaritra ho an'ny pods na serivisy ve ny politika?

Amin'ny ankapobeny, ny pods ao amin'ny Kubernetes dia mifandray amin'ny alàlan'ny serivisy iray - mpandrindra entana virtoaly izay mamindra ny fifamoivoizana mankany amin'ny pods izay mampihatra ny serivisy. Mety hieritreritra ianao fa mifehy ny fidirana amin'ny serivisy ny politikan'ny tambajotra, saingy tsy izany no izy. Ny politikan'ny tambajotra Kubernetes dia miasa amin'ny seranana pod, fa tsy seranan-tsambo.

Ohatra, raha mihaino ny seranan-tsambo 80 ny serivisy iray, fa mamindra ny fifamoivoizana mankany amin'ny seranan-tsambo 8080 amin'ny pods-ny, dia tsy maintsy voafaritra ao amin'ny politikan'ny tambajotra ny 8080 marina.

Ny rafitra toy izany dia tokony hoheverina ho ambany indrindra: raha miova ny rafitra anatiny amin'ny serivisy (ny seranan-tsambo izay mihaino ny pods), dia tsy maintsy havaozina ny politikan'ny tambajotra.

Fomba ara-javakanto vaovao mampiasa Service Mesh (ohatra, jereo ny momba an'i Istio etsy ambany - eo ho eo transl.) mamela anao hiatrika io olana io.

Ilaina ve ny misoratra anarana amin'ny Ingress sy Egress?

Ny valiny fohy dia eny, mba hahafahan'ny pod A mifandray amin'ny pod B, dia tsy maintsy avela hamorona fifandraisana mivoaka (ho izany dia mila manamboatra politika fivoahana ianao), ary ny pod B dia tsy maintsy manaiky ny fifandraisana miditra ( noho izany, araka izany, dia mila politika fidirana). politika).

Na izany aza, amin'ny fampiharana, azonao atao ny miantehitra amin'ny politikan'ny default mba hamela ny fifandraisana amin'ny lalana iray na roa.

Raha misy pod-loharano hofidian'ny iray na maromaro fivoahana-Ry mpanao politika, ny fameperana apetraka aminy dia hofaritana amin'ny fisaraham-panambadiana. Amin'ity tranga ity dia mila mamela mazava ny fifandraisana amin'ny pod ianao -amin'ny adiresy. Raha tsy voafantina amin'ny politika iray ny pod iray, dia avela ho default ny fifamoivoizana mivoaka (mivoaka).

Toy izany koa, ny anjaran'ny podadiresy, nofantenan'ny iray na maromaro ingress- ny mpanao politika, dia ho tapa-kevitra amin'ny fisaraham-panambadiana. Amin'ity tranga ity, tsy maintsy avelanao mazava tsara handray fifamoivoizana avy amin'ny pod loharano. Raha tsy voafantina amin'ny politika iray ny pod iray, dia avela amin'ny alàlan'ny default ny fifamoivoizana miditra ao aminy.

Jereo Stateful na Stateless eto ambany.

hazo

Ny politikan'ny tambajotra Kubernetes dia tsy afaka manoratra ny fifamoivoizana. Izany dia manasarotra ny famaritana raha toa ka mandeha araka ny tokony ho izy ny politika iray ary manasarotra be ny fanadihadiana momba ny fiarovana.

Fanaraha-maso ny fifamoivoizana mankany amin'ny serivisy ivelany

Ny politikan'ny tambajotra Kubernetes dia tsy mamela anao hamaritra anarana domaine feno (DNS) amin'ny fizarana fivoahana. Izany zava-misy izany dia miteraka fahasahiranana lehibe rehefa miezaka mametra ny fifamoivoizana amin'ny toerana ivelany tsy manana adiresy IP raikitra (toy ny aws.com).

Fanamarinana politika

Ny firewall dia hampitandrina anao na mandà ny hanaiky ny politika diso. Manao fanamarinana ihany koa i Kubernetes. Rehefa mametraka politikan'ny tambajotra amin'ny alàlan'ny kubectl, dia mety hanambara ny Kubernetes fa diso izany ary mandà ny hanaiky izany. Amin'ny tranga hafa, handray ny politika i Kubernetes ary hameno azy amin'ny antsipiriany tsy hita. Azo jerena amin'ny alalan'ny baiko izy ireo:

kubernetes get networkpolicy <policy-name> -o yaml

Ataovy ao an-tsaina fa ny rafitra fanamarinana Kubernetes dia tsy mety diso ary mety tsy hahita karazana fahadisoana sasany.

famonoana

Tsy mampihatra ny politikan'ny tambajotra ny Kubernetes, fa vavahadin'ny API fotsiny izay manolotra ny vesatry ny fanaraha-maso amin'ny rafitra fototra antsoina hoe Container Networking Interface (CNI). Ny fametrahana politika amin'ny kluster Kubernetes nefa tsy manendry ny CNI mifanaraka amin'izany dia mitovy amin'ny famoronana politika amin'ny mpizara fitantanana firewall nefa tsy mametraka azy ireo amin'ny firewall. Anjaranao ny miantoka fa manana CNI mendrika ianao na, raha ny sehatra Kubernetes, apetraka amin'ny rahona. (azonao jerena ny lisitry ny mpamatsy eto — eo ho eo. trans.), avelao ny politikan'ny tambajotra izay hametraka CNI ho anao.

Mariho fa tsy hampitandrina anao i Kubernetes raha mametraka politikan'ny tambajotra tsy misy CNI mpanampy sahaza anao.

Fanjakana sa tsy misy fanjakana?

Ny CNI Kubernetes rehetra hitako dia ara-panjakana (ohatra, mampiasa Linux conntrack i Calico). Izany dia ahafahan'ny pod mahazo valiny amin'ny fifandraisana TCP natombony nefa tsy mila mametraka azy indray. Na izany aza, tsy fantatro ny fenitra Kubernetes izay miantoka ny maha-panjakana.

Advanced Security Policy Management

Ireto misy fomba sasany hanatsarana ny fampiharana ny politikan'ny fiarovana amin'ny Kubernetes:

  1. Ny lamina maritrano Service Mesh dia mampiasa kaontenera sidecar mba hanomezana telemetry amin'ny antsipiriany sy fanaraha-maso ny fifamoivoizana amin'ny ambaratonga serivisy. Ohatra azontsika raisina Istio.
  2. Ny sasany amin'ireo mpivarotra CNI dia nanitatra ny fitaovany mba hihoatra ny politikan'ny tambajotra Kubernetes.
  3. Tufin Orca Manome fahitana sy automatique ny politikan'ny tambajotra Kubernetes.

Ny fonosana Tufin Orca dia mitantana ny politikan'ny tambajotra Kubernetes (ary loharanon'ny pikantsary etsy ambony).

fanazavana fanampiny

famaranana

Ny politikan'ny tambajotra Kubernetes dia manolotra fitaovana tsara ho an'ny fizarazarana cluster, saingy tsy intuitive izy ireo ary manana santionany maro. Noho io fahasarotana io dia mino aho fa maro ny politikan'ny kluster efa misy no mikorontana. Ny vahaolana mety amin'ity olana ity dia ahitana ny famaritana ny politika automatique na ny fampiasana fitaovana fizarana hafa.

Manantena aho fa ity torolalana ity dia hanampy amin'ny famahana ny fanontaniana sasany sy hamaha ny olana mety hitranga aminao.

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment