Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Thoir an aire. eadar-theangachadh.: Tha còrr air 20 bliadhna de eòlas aig ùghdar an artaigil, Reuven Harrison, ann an leasachadh bathar-bog, agus an-diugh tha an CTO agus co-stèidheadair Tufin, companaidh a chruthaicheas fuasglaidhean riaghlaidh poileasaidh tèarainteachd. Fhad ‘s a tha e a’ faicinn poileasaidhean lìonra Kubernetes mar inneal gu math cumhachdach airson sgaradh lìonra ann am brabhsair, tha e cuideachd den bheachd nach eil iad cho furasta an cleachdadh ann an cleachdadh. Tha an stuth seo (gu math voluminous) ag amas air mothachadh eòlaichean mun chùis seo a leasachadh agus an cuideachadh gus na rèiteachaidhean riatanach a chruthachadh.

An-diugh, tha mòran chompanaidhean a 'sìor fhàs a' taghadh Kubernetes airson na tagraidhean aca a ruith. Tha ùidh anns a’ bhathar-bog seo cho àrd is gu bheil cuid a’ gairm Kubernetes “an siostam obrachaidh ùr airson an ionad dàta.” Mean air mhean, tha Kubernetes (no k8s) a’ tòiseachadh air fhaicinn mar phàirt dheatamach den ghnìomhachas, a dh’ fheumas pròiseasan gnìomhachais aibidh a chuir air dòigh, a’ toirt a-steach tèarainteachd lìonra.

Do phroifeasantaich tèarainteachd a tha fo imcheist a bhith ag obair le Kubernetes, is dòcha gur e am fìor fhoillseachadh am poileasaidh bunaiteach aig an àrd-ùrlar: leig leis a h-uile càil.

Cuidichidh an iùl seo thu le bhith a’ tuigsinn structar taobh a-staigh phoileasaidhean lìonra; tuigsinn mar a tha iad eadar-dhealaichte bho na riaghailtean airson ballachan teine ​​​​cunbhalach. Còmhdaichidh e cuideachd cuid de dhuilgheadasan agus bheir e seachad molaidhean gus cuideachadh le bhith a’ dìon thagraidhean air Kubernetes.

Poileasaidhean lìonra Kubernetes

Leigidh uidheamachd poileasaidh lìonra Kubernetes leat eadar-obrachadh thagraidhean a tha air an cleachdadh air an àrd-ùrlar aig ìre an lìonraidh (an treas fear ann am modal OSI) a riaghladh. Tha dìth cuid de na feartan adhartach aig ballachan teine ​​​​an latha an-diugh ann am poileasaidhean lìonra, leithid cur an gnìomh OSI Layer 7 agus lorg bagairtean, ach tha iad a’ toirt seachad ìre bunaiteach de thèarainteachd lìonra a tha na dheagh thoiseach tòiseachaidh.

Bidh poileasaidhean lìonra a 'cumail smachd air conaltradh eadar pods

Tha eallach obrach ann an Kubernetes air an sgaoileadh thairis air pods, anns a bheil aon no barrachd shoithichean air an cleachdadh còmhla. Bidh Kubernetes a’ sònrachadh gach pod seòladh IP a tha ruigsinneach bho pods eile. Bidh poileasaidhean lìonra Kubernetes a’ suidheachadh chòraichean-slighe airson buidhnean de pods san aon dòigh ’s a bhios buidhnean tèarainteachd san sgòth air an cleachdadh gus smachd a chumail air ruigsinneachd air suidheachaidhean inneal brìgheil.

A 'mìneachadh Poileasaidhean Lìonra

Coltach ri goireasan Kubernetes eile, tha poileasaidhean lìonra air an sònrachadh ann an YAML. Anns an eisimpleir gu h-ìosal, an tagradh balance ruigsinneachd gu 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

(Thoir an aire. eadar-theangachadh.: chaidh an dealbh-sgrìn seo, mar a h-uile gin eile den aon seòrsa, a chruthachadh gun a bhith a’ cleachdadh innealan dùthchasach Kubernetes, ach a’ cleachdadh an inneal Tufin Orca, a chaidh a leasachadh le companaidh ùghdar an artaigil thùsail agus air a bheil iomradh aig deireadh an stuth.)

Gus am poileasaidh lìonra agad fhèin a mhìneachadh, bidh feum agad air eòlas bunaiteach air YAML. Tha an cànan seo stèidhichte air indentation (sònraichte le beàrnan seach tabaichean). Buinidh eileamaid fhollaiseach don eileamaid cheangailte as fhaisge os a chionn. Bidh eileamaid liosta ùr a’ tòiseachadh le tàthan, tha cruth aig gach eileamaid eile iuchrach-luach.

An dèidh cunntas a thoirt air a’ phoileasaidh ann an YAML, cleachd cubectla chruthachadh anns a' chòmhlan :

kubectl create -f policy.yaml

Sònrachadh Poileasaidh Lìonra

Tha ceithir eileamaidean ann an sònrachadh poileasaidh lìonra Kubernetes:

  1. podSelector: a 'mìneachadh nam pods air a bheil am poileasaidh seo (targaidean) a' toirt buaidh - a dhìth;
  2. policyTypes: a’ comharrachadh dè an seòrsa phoileasaidhean a tha air an gabhail a-steach ann an seo: dol a-steach agus/no dol a-mach - roghainneil, ach tha mi a’ moladh a shònrachadh gu soilleir anns a h-uile cùis;
  3. ingress: mìneachadh ceadaichte a ’tighinn a-steach trafaic gu pods targaid - roghainneil;
  4. egress: mìneachadh ceadaichte a-mach tha trafaic bho pods targaid roghainneil.

Eisimpleir air a thoirt bho làrach-lìn Kubernetes (chuir mi na àite role air app), a’ sealltainn mar a tha na ceithir eileamaidean air an cleachdadh:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd
Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Thoir an aire nach fheum na ceithir eileamaidean a bhith air an toirt a-steach. Tha e dìreach riatanach podSelector, faodar paramadairean eile a chleachdadh mar a thogras tu.

Ma dh'fhàgas tu policyTypes, bidh am poileasaidh air a mhìneachadh mar a leanas:

  • Gu gnàthach, thathas a’ gabhail ris gu bheil e a’ mìneachadh an taobh ingress. Mura h-eil am poileasaidh ag innse seo gu soilleir, gabhaidh an siostam ris gu bheil casg air a h-uile trafaic.
  • Bidh an giùlan air an taobh a-muigh air a dhearbhadh le làthaireachd no neo-làthaireachd am paramadair slighe a-mach co-fhreagarrach.

Gus mearachdan a sheachnadh tha mi a’ moladh an-còmhnaidh ga dhèanamh soilleir policyTypes.

A rèir an loidsig gu h-àrd, ma tha na crìochan ingress agus / no egress air a fàgail air falbh, bidh am poileasaidh a' diùltadh trafaig gu lèir (faic "Stripping Rule" gu h-ìosal).

Tha am poileasaidh bunaiteach Ceadaich

Mura h-eil poileasaidhean air am mìneachadh, leigidh Kubernetes leis a h-uile trafaic gu bunaiteach. Faodaidh a h-uile pod fiosrachadh iomlaid gu saor eatorra fhèin. Is dòcha gu bheil seo a’ coimhead mì-thuigseach bho shealladh tèarainteachd, ach cuimhnich gun deach Kubernetes a dhealbhadh an toiseach le luchd-leasachaidh gus eadar-obrachalachd tagraidh a chomasachadh. Chaidh poileasaidhean lìonraidh a chur ris nas fhaide air adhart.

Àiteachan ainmean

Is e àiteachan ainmean inneal co-obrachaidh Kubernetes. Tha iad air an dealbhadh gus àrainneachdan loidsigeach a sgaradh bho chèile, fhad ‘s a tha conaltradh eadar àiteachan ceadaichte gu bunaiteach.

Coltach ris a’ mhòr-chuid de cho-phàirtean Kubernetes, tha poileasaidhean lìonra beò ann an àite ainm sònraichte. Anns a 'bhloc metadata faodaidh tu sònrachadh dè an t-àite dham buin am poileasaidh:

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

Mura h-eil an t-ainm-fànais air a shònrachadh gu soilleir anns a' mheata-dàta, cleachdaidh an siostam an t-ainm-fànais a chaidh a shònrachadh ann an kubectl (gu bunaiteach namespace=default):

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

Tha mi a ’moladh sònraich àite-ainm gu soilleir, mura h-eil thu a’ sgrìobhadh poileasaidh a tha ag amas air grunn ainmean-àite aig an aon àm.

Основной eileamaid podSelector anns a’ phoileasaidh taghaidh e pods bhon rum-ainm dham buin am poileasaidh (tha e air a dhiùltadh cothrom air pods bho àite-ainm eile).

San aon dòigh, podSelectors ann am blocaichean a-steach agus a-mach chan urrainn dhaibh ach pods a thaghadh bhon àite-ainm aca fhèin, mura h-eil thu gu dearbh gan cur còmhla riutha namespaceSelector (thèid seo a dheasbad anns an earrainn “Filter by namesspaces and pods”).

Riaghailtean Ainmeachaidh Poileasaidh

Tha ainmean poileasaidh gun samhail anns an aon àite-ainm. Chan fhaod dà phoileasaidh leis an aon ainm a bhith san aon àite, ach faodaidh poileasaidhean leis an aon ainm a bhith ann an diofar àiteachan. Tha seo feumail nuair a tha thu airson an aon phoileasaidh ath-chleachdadh thar iomadh àite.

Is toil leam gu sònraichte aon de na dòighean ainmeachaidh. Tha e a’ toirt a-steach a bhith a’ cothlamadh an ainm spacespace leis na pods targaid. Mar eisimpleir:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Labels

Faodaidh tu bileagan àbhaisteach a cheangal ri nithean Kubernetes, leithid pods agus ainmean-àite. suaicheantasan (bileagan - tagaichean) co-ionann ri tagaichean san sgòth. Bidh poileasaidhean lìonra Kubernetes a 'cleachdadh bileagan airson taghadh podsris a bheil iad a’ buntainn:

podSelector:
  matchLabels:
    role: db

… or àiteachan ainmeanris a bheil iad a’ buntainn. Bidh an eisimpleir seo a’ taghadh a h-uile pod ann an ainmean-àite leis na bileagan co-fhreagarrach:

namespaceSelector:
  matchLabels:
    project: myproject

Aon rabhadh: nuair a bhios tu a 'cleachdadh namespaceSelector dèan cinnteach gu bheil an leubail cheart anns na h-àiteachan-ainm a thaghas tu. Thoir an aire gu bheil àiteachan-ainm stèidhichte mar default и kube-system, gu gnàthach chan eil bileagan ann.

Faodaidh tu leubail a chur ri àite mar seo:

kubectl label namespace default namespace=default

Aig an aon àm, namespace anns an earrann metadata bu chòir iomradh a thoirt air an fhìor ainm fànais, chan e an leubail:

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

Stòr agus ceann-uidhe

Tha poileasaidhean balla-teine ​​​​a’ toirt a-steach riaghailtean le stòran agus cinn-uidhe. Tha poileasaidhean lìonra Kubernetes air am mìneachadh airson targaid - seata de pods ris a bheil iad a’ buntainn - agus an uairsin suidhich riaghailtean airson trafaic a-steach agus / no a-mach. Anns an eisimpleir againn, is e targaid a’ phoileasaidh a h-uile pod san ainm-àite default le suaicheantas le iuchair app agus brìgh 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd
Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Fo-roinn ingress anns a 'phoileasaidh seo, a' fosgladh trafaig a 'tighinn a-steach gu na pods targaid. Ann am faclan eile, is e ingress an stòr agus is e targaid an ceann-uidhe co-fhreagarrach. Mar an ceudna, is e slighe a-mach an ceann-uidhe agus is e an targaid a thùs.

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Tha seo co-ionann ri dà riaghailt balla-teine: Ingress → Target; Amas → A-mach.

Egress agus DNS (cudromach!)

Le bhith a’ cuingealachadh trafaic a-mach, Thoir aire shònraichte do DNS - Bidh Kubernetes a’ cleachdadh na seirbheis seo gus seirbheisean a mhapadh gu seòlaidhean IP. Mar eisimpleir, chan obraich am poileasaidh a leanas leis nach do leig thu leis an tagradh balance ruigsinneachd 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Faodaidh tu a chàradh le bhith a’ fosgladh ruigsinneachd don t-seirbheis 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

An eileamaid mu dheireadh to falamh, agus mar sin tha e a’ taghadh gu neo-dhìreach a h-uile pod anns gach àite ainm, a' ceadachadh balance cuir ceistean DNS chun t-seirbheis iomchaidh Kubernetes (mar as trice a’ ruith san àite kube-system).

Tha an dòigh-obrach seo ag obair, ge-tà ro cheadach agus neo-chinnteach, oir tha e a 'leigeil le ceistean DNS a bhith air an stiùireadh taobh a-muigh a' bhraisle.

Faodaidh tu a leasachadh ann an trì ceumannan leantainneach.

1. Ceadaich DNS ceistean a-mhàin taobh a-staigh cruinneachadh le bhith a’ cur 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

2. Ceadaich DNS ceistean taobh a-staigh namespace a-mhàin kube-system.

Gus seo a dhèanamh feumaidh tu leubail a chur ris an àrainn-ainm kube-system: kubectl label namespace kube-system namespace=kube-system - agus sgrìobh e sìos ann an cleachdadh poileasaidh 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

3. Faodaidh daoine paranoid a dhol eadhon nas fhaide agus cuingealachadh DNS ceistean gu seirbheis DNS sònraichte a-steach kube-system. Innsidh an earrann “Filter by namespaces AND pods” dhut mar a choileanas tu seo.

Is e roghainn eile DNS fhuasgladh aig ìre namespace. Anns a 'chùis seo, cha bhith feum air fhosgladh airson gach seirbheis:

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

Falamh podSelector a’ taghadh a h-uile pod san namespace.

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

A 'chiad gheama agus òrdugh riaghailt

Ann am ballachan teine ​​​​àbhaisteach, tha an gnìomh (Ceadaich no diùltadh) air pacaid air a dhearbhadh leis a 'chiad riaghailt a tha e a' coileanadh. Ann an Kubernetes, chan eil òrdugh phoileasaidhean gu diofar.

Gu gnàthach, nuair nach eil poileasaidhean air an suidheachadh, tha conaltradh eadar pods ceadaichte agus faodaidh iad fiosrachadh iomlaid gu saor. Cho luath ‘s a thòisicheas tu a’ cur ri chèile phoileasaidhean, bidh gach pod air an tug co-dhiù aon dhiubh buaidh air a bhith aonaranach a rèir sgaradh (loidsigeach OR) nam poileasaidhean uile a thagh e. Tha pods nach eil fo bhuaidh poileasaidh sam bith fhathast fosgailte.

Faodaidh tu an giùlan seo atharrachadh le bhith a 'cleachdadh riaghailt stripping.

Riaghailt strì (“Aicheadh”)

Mar as trice bidh poileasaidhean balla-teine ​​​​a’ diùltadh trafaic sam bith nach eil ceadaichte gu sònraichte.

Chan eil gnìomh diùltadh ann an Kubernetes, ge-tà, faodar an aon bhuaidh a choileanadh le poileasaidh cunbhalach (ceadachail) le bhith a’ taghadh buidheann falamh de pods stòr (inntrigeadh):

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Bidh am poileasaidh seo a’ taghadh a h-uile pod san ainm-àite agus a’ fàgail slighe a-steach neo-mhìnichte, a’ diùltadh trafaic a thig a-steach.

San aon dòigh, faodaidh tu trafaic a-mach a chuingealachadh bho àite ainm:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Thoir fa-near sin bidh prìomhachas aig poileasaidhean sam bith a bharrachd a leigeas le trafaic pods san ainm-àite a bhith air thoiseach air an riaghailt seo (coltach ri riaghailt ceadachaidh a chur ris mus tèid riaghailt diùltadh ann an rèiteachadh balla-teine).

Ceadaich a h-uile càil (Any-Any-Any-Allow)

Gus poileasaidh Ceadaich Uile a chruthachadh, feumaidh tu cur ris a’ phoileasaidh diùltadh gu h-àrd le eileamaid falamh ingress:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Tha e a 'toirt cothrom faighinn a-steach bho a h-uile pod anns a h-uile h-ainm (agus a h-uile IP) gu pod sam bith san ainm-àite default. Tha an giùlan seo air a chomasachadh gu bunaiteach, agus mar sin mar as trice chan fheum e a bhith air a mhìneachadh tuilleadh. Ach, uaireannan is dòcha gum feum thu ceadan sònraichte a chuir dheth airson ùine gus an duilgheadas a dhearbhadh.

Faodar an riaghailt a chaolachadh gus leigeil le ruigsinneachd a-mhàin seata sònraichte de phònaichean (app:balance) anns an ainm-àite default:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Tha am poileasaidh a leanas a’ toirt cothrom do thrafaig a-steach is a-mach, a’ gabhail a-steach cothrom air IP sam bith taobh a-muigh a’ bhuidheann:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd
Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

A' Co-chur Ioma Poileasaidhean

Tha poileasaidhean air an cur còmhla a’ cleachdadh OR loidsigeach aig trì ìrean; Tha ceadan gach pod air an suidheachadh a rèir dealachadh a h-uile poileasaidh a bheir buaidh air:

1. Anns na raointean from и to Faodar trì seòrsaichean eileamaidean a mhìneachadh (tha iad uile air an cur còmhla a’ cleachdadh OR):

  • namespaceSelector - tagh an t-ainm-àite gu lèir;
  • podSelector - tagh pods;
  • ipBlock - a 'taghadh subnet.

A bharrachd air an sin, tha an àireamh de eileamaidean (eadhon feadhainn co-ionann) ann am fo-roinnean from/to gun a bhith cuingealaichte. Thèid iad uile a chur còmhla le loidsigeach 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

2. Taobh a-staigh an earrann poileasaidh ingress faodaidh mòran eileamaidean a bhith ann from (còmhla ri loidsigeach OR). Mar an ceudna, earrann egress faodaidh grunn eileamaidean a bhith ann to (cuideachd air a chur còmhla le dì-cheangail):

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

3. Tha diofar phoileasaidhean cuideachd air an cur còmhla ri OR loidsigeach

Ach nuair a thèid an cur còmhla, tha aon chuingealachadh air dè chomharraich Chris Cooney: Chan urrainn dha Kubernetes ach poileasaidhean a chur còmhla le diofar policyTypes (Ingress no Egress). Bidh poileasaidhean a tha a’ mìneachadh dol a-steach (no dol a-mach) a’ sgrìobhadh thairis air a chèile.

Dàimh eadar ainmean-àite

Gu gnàthach, tha roinneadh fiosrachaidh eadar ainmean-àite ceadaichte. Faodar seo atharrachadh le bhith a’ cleachdadh poileasaidh diùltadh a chuireas casg air trafaic a’ dol a-mach agus/no a’ tighinn a-steach don raon-ainm (faic “Stripping Rule”) gu h-àrd).

Aon uair ‘s gu bheil thu air casg a chuir air ruigsinneachd gu àite ainm (faic an“ Riaghailt Stripping ”gu h-àrd), faodaidh tu eisgeachdan a dhèanamh don phoileasaidh àicheadh ​​​​le bhith a’ ceadachadh ceanglaichean bho àite ainm sònraichte a ’cleachdadh 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Mar thoradh air an sin, tha a h-uile pod san ainm-àite default bidh cothrom aige air pods postgres ann an ainm-àite database. Ach dè ma tha thu airson ruigsinneachd fhosgladh postgres dìreach pods sònraichte san ainm-àite default?

Criathraich a rèir àiteachan ainmean agus pods

Leigidh dreach Kubernetes 1.11 agus nas àirde dhut gnìomhaichean a chur còmhla namespaceSelector и podSelector cleachdadh loidsigeach AND.Tha e a’ coimhead mar seo:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Carson a tha seo air a mhìneachadh mar AND an àite an OR àbhaisteach?

thoir fa-near sin podSelector chan eil e a’ tòiseachadh le tàthan. Ann an YAML tha seo a’ ciallachadh sin podSelector agus 'na sheasamh fa chomhair namespaceSelector thoir iomradh air an aon eileamaid liosta. Mar sin, tha iad air an cur còmhla ri loidsigeach AND.

A' cur tàthan ris roimhe podSelector mar thoradh air an sin nochdaidh eileamaid liosta ùr, a thèid a chur còmhla ris an fhear roimhe namespaceSelector cleachdadh loidsigeach OR.

Gus pods a thaghadh le leubail sònraichte anns gach ainm, cuir a-steach bàn 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Bidh ioma bileagan ag obair còmhla ri I

Tha riaghailtean airson balla-teine ​​​​le iomadh rud (luchd-aoigheachd, lìonraidhean, buidhnean) air an cur còmhla a 'cleachdadh OR loidsigeach. Obraichidh an riaghailt a leanas ma tha stòr a’ phacaid a’ maidseadh Host_1 NO Host_2:

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

Air an làimh eile, ann an Kubernetes tha na diofar bhileagan ann podSelector no namespaceSelector air an cur còmhla ri AND loidsigeach Mar eisimpleir, taghaidh an riaghailt a leanas pods air a bheil an dà leubail, role=db И version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

Tha an aon reusanachadh a’ buntainn ris a h-uile seòrsa gnìomhaiche: luchd-taghaidh targaid poileasaidh, luchd-taghaidh pod, agus luchd-taghaidh ainmean-àite.

Subnets agus seòlaidhean IP (IPBlocks)

Bidh ballachan teine ​​​​a 'cleachdadh VLANs, seòlaidhean IP, agus subnets gus lìonra a sgaradh.

Ann an Kubernetes, thèid seòlaidhean IP a shònrachadh gu pods gu fèin-ghluasadach agus faodaidh iad atharrachadh gu tric, agus mar sin bidh bileagan air an cleachdadh gus pods agus àiteachan-ainm a thaghadh ann am poileasaidhean lìonra.

Fo-lìonraidhean (ipBlocks) air an cleachdadh nuair a thathar a’ riaghladh cheanglaichean a-steach (a-steach) no a-mach (a-mach) taobh a-muigh (Tuath-Deas). Mar eisimpleir, tha am poileasaidh seo a’ fosgladh don h-uile pod bhon ainm-àite default cothrom air seirbheis 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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Tha an roghnaiche pod falamh san eisimpleir seo a’ ciallachadh “tagh a h-uile pod san ainm-àite.”

Chan eil am poileasaidh seo a’ ceadachadh ach slighe gu 8.8.8.8; tha ruigsinneachd air IP sam bith eile air a thoirmeasg. Mar sin, gu dearbh, tha thu air casg a chuir air ruigsinneachd air seirbheis Kubernetes DNS a-staigh. Ma tha thu fhathast airson fhosgladh, comharraich seo gu soilleir.

Mar as trice ipBlocks и podSelectors tha iad neo-eisimeileach dha chèile, leis nach eilear a’ cleachdadh seòlaidhean IP taobh a-staigh pods ipBlocks. Le bhith a’ comharrachadh pods IP a-staigh, leigidh tu ceanglaichean gu / bho pods leis na seòlaidhean sin. Ann an cleachdadh, cha bhi fios agad dè an seòladh IP a chleachdas tu, agus is e sin as coireach nach bu chòir an cleachdadh airson pods a thaghadh.

Mar fhrith-eisimpleir, tha am poileasaidh a leanas a’ toirt a-steach a h-uile IP agus mar sin a’ toirt cothrom air a h-uile pod eile:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Chan urrainn dhut ach ruigsinneachd fhosgladh gu IPan taobh a-muigh, ach a-mhàin seòlaidhean IP taobh a-staigh pods. Mar eisimpleir, ma tha subnet do pod 10.16.0.0/14:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Puirt agus protocols

Mar as trice bidh pods ag èisteachd ri aon phort. Tha seo a’ ciallachadh nach urrainn dhut dìreach àireamhan puirt a shònrachadh ann am poileasaidhean agus a h-uile càil fhàgail mar an àbhaist. Ach, thathas a’ moladh poileasaidhean a dhèanamh cho cuibhrichte ‘s a ghabhas, agus mar sin ann an cuid de chùisean faodaidh tu puirt a shònrachadh fhathast:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Thoir an aire gu bheil an tagraiche ports a’ buntainn ris a h-uile eileamaid sa bhloc to no from, anns a bheil. Gus diofar phuirt a shònrachadh airson seataichean eadar-dhealaichte de eileamaidean, sgoltadh ingress no egress ann an grunn fo-roinnean le to no from agus anns gach clàr do phuirt:

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

Ro-ràdh mu phoileasaidhean lìonra Kubernetes airson Proifeasantaich Tèarainteachd

Obrachadh port bunaiteach:

  • Ma dh’ fhàgas tu am mìneachadh port gu tur (ports), tha seo a 'ciallachadh a h-uile protocol agus a h-uile port;
  • Ma dh’ fhàgas tu am mìneachadh protocol (protocol), tha seo a 'ciallachadh TCP;
  • Ma dh’ fhàgas tu am mìneachadh port (port), tha seo a’ ciallachadh a h-uile port.

Cleachdadh as fheàrr: Na bi an urra ri luachan bunaiteach, sònraich na tha a dhìth ort gu soilleir.

Thoir an aire gum feum thu puirt pod a chleachdadh, chan e puirt seirbheis (barrachd air seo san ath pharagraf).

A bheil poileasaidhean air am mìneachadh airson pods no seirbheisean?

Mar as trice, bidh pods ann an Kubernetes a’ faighinn cothrom air a chèile tro sheirbheis - cothromachadh luchdan brìgheil a bhios ag ath-stiùireadh trafaic gu na pods a chuireas an t-seirbheis an gnìomh. Is dòcha gu bheil thu a’ smaoineachadh gu bheil poileasaidhean lìonraidh a’ cumail smachd air ruigsinneachd air seirbheisean, ach chan eil seo fìor. Bidh poileasaidhean lìonra Kubernetes ag obair air puirt pod, chan e puirt seirbheis.

Mar eisimpleir, ma dh’ èisteas seirbheis ri port 80, ach ma bheir e ath-stiùireadh air trafaic gu port 8080 de na pods aige, feumaidh tu 8080 a shònrachadh gu dìreach ann am poileasaidh an lìonraidh.

Bu chòir a bhith den bheachd gu bheil uidheamachd mar seo suboptimal: ma dh’ atharraicheas structar a-staigh na seirbheis (na puirt aig a bheil na pods ag èisteachd), feumar poileasaidhean lìonra ùrachadh.

Dòigh ailtireil ùr a’ cleachdadh Service Mesh (mar eisimpleir, faic mu Istio gu h-ìosal - approx. transl.) a 'toirt cothrom dhut dèiligeadh ris an duilgheadas seo.

A bheil e riatanach an dà chuid Ingress agus Egress a chlàradh?

Is e am freagairt ghoirid tha, gus am bi pod A a’ conaltradh ri pod B, feumaidh cead a bhith aige ceangal a-mach a chruthachadh (airson seo feumaidh tu poileasaidh slighe a-mach a rèiteachadh), agus feumaidh pod B a bhith comasach air gabhail ri ceangal a tha a’ tighinn a-steach ( airson seo, a rèir sin, feumaidh tu poileasaidh ingress).

Ach, ann an cleachdadh, faodaidh tu a bhith an urra ris a’ phoileasaidh bunaiteach gus ceanglaichean a cheadachadh ann an aon taobh no an dà thaobh.

Ma tha cuid pod-stòr thèid a thaghadh le aon no barrachd a-mach- luchd-poilitigs, thèid na cuingeadan a chuirear air a dhearbhadh leis an dealachadh aca. Anns a 'chùis seo, feumaidh tu ceangal a cheadachadh gu soilleir ris a' pod -chun an t-seoladair. Mura tèid pod a thaghadh le poileasaidh sam bith, tha an trafaic a-mach (a-mach) ceadaichte gu bunaiteach.

Mar an ceudna, tha an dàn don podneach-seòlaidh, air a thaghadh le aon no barrachd tighinn a-steach-poileataigs, air a dhearbhadh leis an dealachadh aca. Anns a 'chùis seo, feumaidh tu cead a thoirt dha trafaig fhaighinn bhon stòr pod. Mura tèid pod a thaghadh le poileasaidh sam bith, tha a h-uile trafaic a-steach air a cheadachadh gu bunaiteach.

Faic Stàiteil no Neo-stàite gu h-ìosal.

Logaichean

Chan urrainn do phoileasaidhean lìonra Kubernetes trafaic a chlàradh. Tha seo ga dhèanamh duilich faighinn a-mach a bheil poileasaidh ag obair mar a bha dùil agus a’ dèanamh mion-sgrùdadh tèarainteachd gu mòr.

Smachd air trafaic gu seirbheisean taobh a-muigh

Cha leig poileasaidhean lìonra Kubernetes leat ainm àrainn làn-theisteanas (DNS) a shònrachadh ann an earrannan slighe a-mach. Tha an fhìrinn seo a’ leantainn gu mì-ghoireas mòr nuair a thathar a’ feuchainn ri trafaic a chuingealachadh gu cinn-uidhe taobh a-muigh aig nach eil seòladh IP stèidhichte (leithid aws.com).

Sgrùdadh Poileasaidh

Bheir ballachan-teine ​​rabhadh dhut no eadhon diùltadh gabhail ris a’ phoileasaidh ceàrr. Bidh Kubernetes cuideachd a’ dèanamh beagan dearbhaidh. Nuair a bhios iad a’ suidheachadh poileasaidh lìonra tro kubectl, faodaidh Kubernetes innse gu bheil e ceàrr agus diùltadh gabhail ris. Ann an cùisean eile, gabhaidh Kubernetes am poileasaidh agus lìonaidh e e leis an fhiosrachadh a tha a dhìth. Chithear iad a’ cleachdadh an àithne:

kubernetes get networkpolicy <policy-name> -o yaml

Cumaibh cuimhne nach eil siostam dearbhaidh Kubernetes do-chreidsinneach agus is dòcha gu bheil e ag ionndrainn cuid de mhearachdan.

Bàs

Chan eil Kubernetes a’ cur an gnìomh poileasaidhean lìonraidh fhèin, ach chan eil ann ach geata API a bhios a’ tiomnadh uallach smachd gu siostam bunaiteach ris an canar an Container Networking Interface (CNI). Tha suidheachadh phoileasaidhean air cruinneachadh Kubernetes gun a bhith a’ sònrachadh an CNI iomchaidh an aon rud ri bhith a’ cruthachadh phoileasaidhean air frithealaiche riaghlaidh balla-teine ​​gun a bhith gan stàladh air ballachan teine. Tha e an urra riut dèanamh cinnteach gu bheil CNI iomchaidh agad no, a thaobh àrd-ùrlaran Kubernetes, air aoigheachd san sgòth (Chì thu liosta nan solaraichean an seo — mu thuairmeas. trans.), cuir an comas poileasaidhean lìonraidh a shuidhicheas CNI dhut.

Thoir an aire nach toir Kubernetes rabhadh dhut ma shuidhicheas tu poileasaidh lìonra às aonais an neach-cuideachaidh iomchaidh CNI.

Stàite neo gun stàit?

Tha a h-uile Kubernetes CNI a choinnich mi stàiteil (mar eisimpleir, bidh Calico a’ cleachdadh Linux conntrack). Leigidh seo leis a’ pod freagairtean fhaighinn air a’ cheangal TCP a thòisich e gun a bhith aige ri ath-stèidheachadh. Ach, chan eil mi mothachail air inbhe Kubernetes a bheireadh gealltanas stàiteil.

Riaghladh Poileasaidh Tèarainteachd Adhartach

Seo cuid de dhòighean air cur an gnìomh poileasaidh tèarainteachd ann an Kubernetes a leasachadh:

  1. Bidh pàtran ailtireachd Mesh Seirbheis a’ cleachdadh soithichean taobh-chàraichean gus telemetry mionaideach agus smachd trafaic a thoirt seachad aig ìre seirbheis. Mar eisimpleir faodaidh sinn a ghabhail Istio.
  2. Tha cuid de luchd-reic CNI air na h-innealan aca a leudachadh gus a dhol nas fhaide na poileasaidhean lìonra Kubernetes.
  3. Tufin Orca A ’toirt seachad faicsinneachd agus fèin-ghluasad air poileasaidhean lìonra Kubernetes.

Bidh pasgan Tufin Orca a’ riaghladh poileasaidhean lìonra Kubernetes (agus is e sin stòr nan dealbhan-sgrìn gu h-àrd).

fiosrachadh a bharrachd

co-dhùnadh

Tha poileasaidhean lìonra Kubernetes a’ tabhann seata math de dh’ innealan airson cruinneachaidhean a sgaradh, ach chan eil iad intuitive agus tha mòran subtleties aca. Mar thoradh air an iom-fhillteachd seo, tha mi a’ creidsinn gu bheil mòran de phoileasaidhean brabhsair a th’ ann mar-thà nam buggy. Tha fuasglaidhean comasach don duilgheadas seo a’ toirt a-steach fèin-ghluasad mhìneachaidhean poileasaidh no cleachdadh innealan sgaraidh eile.

Tha mi an dòchas gun cuidich an iùl seo cuid de cheistean a shoilleireachadh agus fuasgladh fhaighinn air cùisean a dh’ fhaodadh tu a thighinn tarsainn.

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann