{"id":32641,"date":"2019-10-31T21:48:11","date_gmt":"2019-10-31T18:48:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti\/"},"modified":"2019-10-31T21:48:11","modified_gmt":"2019-10-31T18:48:11","slug":"vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti","title":{"rendered":"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/6972a1e1385463b1fcc723c09036a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i><b>Obs. \u00f6vers.<\/b>: Artikelns f\u00f6rfattare \u2014 Reuven Harrison \u2014 har \u00f6ver 20 \u00e5rs erfarenhet inom mjukvaruutveckling och \u00e4r f\u00f6r n\u00e4rvarande teknisk direkt\u00f6r samt medgrundare av f\u00f6retaget Tufin, som skapar l\u00f6sningar f\u00f6r hantering av s\u00e4kerhetspolicyer. N\u00e4r han ser p\u00e5 Kubernetes n\u00e4tverkspolicyer som ett kraftfullt verktyg f\u00f6r n\u00e4tverkssegmentering inom kluster, anser han samtidigt att de inte \u00e4r s\u00e5 l\u00e4tta att till\u00e4mpa i praktiken. Denna material (relativt omfattande) syftar till att \u00f6ka medvetenheten bland specialister om detta \u00e4mne och hj\u00e4lpa dem att skapa n\u00f6dv\u00e4ndiga konfigurationer.<\/i><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Idag v\u00e4ljer allt fler f\u00f6retag Kubernetes f\u00f6r att k\u00f6ra sina applikationer. Intresset f\u00f6r denna programvara \u00e4r s\u00e5 h\u00f6gt att vissa kallar Kubernetes f\u00f6r \"det nya operativsystemet f\u00f6r datacenter\". Gradvis b\u00f6rjar Kubernetes (eller k8s) uppfattas som en kritiskt viktig del av verksamheten, vilket kr\u00e4ver organisation av mogna aff\u00e4rsprocesser, inklusive s\u00e4kerst\u00e4llande av n\u00e4tverkss\u00e4kerhet.<\/p>\n<p>F\u00f6r s\u00e4kerhetsspecialister som har blivit f\u00f6rvirrade av att arbeta med Kubernetes kan plattformens standardpolicy vara en riktig \u00f6gon\u00f6ppnare: att till\u00e5ta allt.<\/p>\n<p>Denna handbok hj\u00e4lper till att f\u00f6rst\u00e5 hur n\u00e4tverkspolicyer fungerar; att inse hur de skiljer sig fr\u00e5n regler f\u00f6r vanliga brandv\u00e4ggar. Det kommer ocks\u00e5 att diskuteras n\u00e5gra fallgropar och ges rekommendationer som kan hj\u00e4lpa till att skydda applikationer i Kubernetes.<\/p>\n<h2>Kubernetes n\u00e4tverkspolicyer<\/h2>\n<p>\nN\u00e4tverkspolicymekanismen i Kubernetes till\u00e5ter hantering av interaktionen mellan de applikationer som k\u00f6rs p\u00e5 plattformen p\u00e5 n\u00e4tverksniv\u00e5 (det tredje i OSI-modellen). N\u00e4tverkspolicyer saknar vissa avancerade funktioner hos moderna brandv\u00e4ggar, som kontroll p\u00e5 7:e niv\u00e5n i OSI och hotdetektion, men de erbjuder en grundl\u00e4ggande niv\u00e5 av n\u00e4tverkss\u00e4kerhet som \u00e4r en bra utg\u00e5ngspunkt.<\/p>\n<h2>N\u00e4tverkspolicyer kontrollerar kommunikationen mellan poddar.<\/h2>\n<p>\nArbetsbelastningar i Kubernetes distribueras \u00f6ver poddar, som best\u00e5r av en eller flera containrar som k\u00f6rs tillsammans. Kubernetes tilldelar varje pod en IP-adress som \u00e4r tillg\u00e4nglig fr\u00e5n andra poddar. Kubernetes n\u00e4tverkspolicyer definierar \u00e5tkomst r\u00e4ttigheter f\u00f6r grupper av poddar p\u00e5 samma s\u00e4tt som s\u00e4kerhetsgrupper i molnet anv\u00e4nds f\u00f6r att hantera \u00e5tkomst till virtuella maskiner.<\/p>\n<h2>Definition av n\u00e4tverkspolicys<\/h2>\n<p>\nPrecis som andra resurser i Kubernetes definieras n\u00e4tverkspolicys p\u00e5 YAML-spr\u00e5ket. I f\u00f6ljande exempel f\u00e5r applikationen <code>balance<\/code> \u00e5tkomst till <code>postgres<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: postgres\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: balance\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/ff5857af2641e62558b035bab9c413dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>(<b>Obs. \u00f6vers.<\/b>: denna sk\u00e4rmdump, liksom alla f\u00f6ljande liknande, skapades inte med native Kubernetes-verktyg utan med hj\u00e4lp av verktyget Tufin Orca, vars utveckling st\u00f6ds av f\u00f6rfattaren till den ursprungliga artikeln och som n\u00e4mns i slutet av materialet.<\/i><\/p>\n<p>F\u00f6r att definiera en egen n\u00e4tverkspolicy kr\u00e4vs grundl\u00e4ggande kunskaper i YAML. Detta spr\u00e5k baseras p\u00e5 indrag (definierade med mellanslag och inte tabb). Ett element med indrag tillh\u00f6r det n\u00e4rmaste elementet med indrag ovanf\u00f6r det. Nya listobjekt b\u00f6rjar med ett bindestreck, alla andra element har formatet <i>nyckel-v\u00e4rde<\/i>.<\/p>\n<p>N\u00e4r policyn har definierats i YAML, anv\u00e4nd <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/reference\/kubectl\/kubectl\/\">kubectl<\/a><\/noindex>, f\u00f6r att skapa den i klustret:<\/p>\n<pre><code class=\"bash\">kubectl create -f policy.yaml<\/code><\/pre>\n<p><\/p>\n<h2>Specifikation av n\u00e4tverkspolicy<\/h2>\n<p>\nSpecifikationen av n\u00e4tverkspolicyn i Kubernetes inneh\u00e5ller fyra element:<\/p>\n<ol>\n<li> <code>podSelector<\/code>: definierar de poddar som p\u00e5verkas av denna policy (m\u00e5l) \u2014 obligatoriskt;<\/li>\n<li> <code>policyTypes<\/code>: anger vilka typer av policys som ing\u00e5r: ingress och\/eller egress - valfritt, men jag rekommenderar att det uttryckligen anges i alla fall;<\/li>\n<li> <code>ingress<\/code>: definierar till\u00e5ten <b>ing\u00e5ende<\/b> trafik till m\u00e5l-poddar \u2014 valfritt;<\/li>\n<li> <code>egress<\/code>: definierar till\u00e5ten <b>utg\u00e5ende<\/b> trafik fr\u00e5n m\u00e5l-poddar \u2014 valfritt.<\/li>\n<\/ol>\n<p>\nExemplet som \u00e4r l\u00e5nat fr\u00e5n Kubernetes webbplats (jag har ersatt <code>role<\/code> till <code>app<\/code>), visar hur alla fyra element anv\u00e4nds:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: test-network-policy\n  namespace: default\nspec:\n  podSelector:    # &lt;&lt;&lt;\n    matchLabels:\n      app: db\n  policyTypes:    # &lt;&lt;&lt;\n  - Ingress\n  - Egress\n  ingress:        # &lt;&lt;&lt;\n  - from:\n    - ipBlock:\n        cidr: 172.17.0.0\/16\n        except:\n        - 172.17.1.0\/24\n    - namespaceSelector:\n        matchLabels:\n          project: myproject\n    - podSelector:\n        matchLabels:\n          role: frontend\n    ports:\n    - protocol: TCP\n      port: 6379\n  egress:         # &lt;&lt;&lt;\n  - to:\n    - ipBlock:\n        cidr: 10.0.0.0\/24\n    ports:\n    - protocol: TCP\n      port: 5978<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/f01e748410564756d6272095093e52e2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/997282073ee6b5c4d6b7af45cdc11295.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObservera att det inte \u00e4r n\u00f6dv\u00e4ndigt att inkludera alla fyra elementen. Endast <code>podSelector<\/code>, de andra parametrarna kan anv\u00e4ndas efter behov.<\/p>\n<p>Om man utel\u00e4mnar <code>policyTypes<\/code>, kommer policyn att tolkas som f\u00f6ljer:<\/p>\n<ul>\n<li> Som standard antas den definiera ingress-sidan. Om det inte finns n\u00e5gra tydliga anvisningar om detta i policyn, kommer systemet att anta att all trafik \u00e4r f\u00f6rbjuden.<\/li>\n<li> Beteendet p\u00e5 egress-sidan kommer att best\u00e4mmas av n\u00e4rvaron eller fr\u00e5nvaron av den motsvarande egress-parametern.<\/li>\n<\/ul>\n<p>\nF\u00f6r att undvika fel rekommenderar jag <b>att alltid tydligt ange <code>policyTypes<\/code><\/b>.<\/p>\n<p>Enligt ovanst\u00e5ende logik, om parametrarna <code>ingress<\/code> och\/eller <code>egress<\/code> utel\u00e4mnas, kommer policyn att f\u00f6rbjuda all trafik (se \"Rensningsregel\" nedan).<\/p>\n<h2>Standardpolicyn \u00e4r att till\u00e5ta<\/h2>\n<p>\nOm inga policyer \u00e4r definierade, till\u00e5ter Kubernetes som standard all trafik. Alla poddar kan fritt utbyta information med varandra. Ur ett s\u00e4kerhetsperspektiv kan detta verka ologiskt, men kom ih\u00e5g att Kubernetes ursprungligen skapades av utvecklarna f\u00f6r att m\u00f6jligg\u00f6ra applikationsinteraktion. N\u00e4tverkspolicyer tillkom senare.<\/p>\n<h2>Namnomr\u00e5den<\/h2>\n<p>\nNamnomr\u00e5den (Namespaces) \u00e4r en mekanism f\u00f6r samarbete i Kubernetes. De \u00e4r avsedda att isolera logiska milj\u00f6er fr\u00e5n varandra, medan datadelning mellan namnomr\u00e5den som standard \u00e4r till\u00e5ten.<\/p>\n<p>Precis som de flesta komponenter i Kubernetes, finns n\u00e4tverkspolicys inom ett specifikt namnomr\u00e5de. I blocket <code>metadata<\/code> kan man ange vilken specifik namnomr\u00e5de som policyn tillh\u00f6r:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: test-network-policy\n  namespace: my-namespace  # &lt;&lt;&lt;\nspec:\n...<\/code><\/pre>\n<p>\nOm namnomr\u00e5det i metadata inte \u00e4r tydligt angivet, kommer systemet att anv\u00e4nda det namnomr\u00e5de som anges i kubectl (som standard <code>namespace=default<\/code>):<\/p>\n<pre><code class=\"bash\">kubectl apply -n my-namespace -f namespace.yaml<\/code><\/pre>\n<p>\nJag rekommenderar <b>att tydligt ange namnomr\u00e5det<\/b>, om du inte skriver en policy avsedd f\u00f6r flera namnrymder.<\/p>\n<p><b>Huvud<\/b> element <code>podSelector<\/code> i policyn kommer att v\u00e4lja poddar fr\u00e5n det namnrymd som policyn tillh\u00f6r (den har inte \u00e5tkomst till poddar fr\u00e5n andra namnrymder).<\/p>\n<p>Detsamma g\u00e4ller podSelectorer <b>i ingress- och egressblock<\/b> v\u00e4lja poddar endast fr\u00e5n sin egen namnrymd, om du inte sammanfogar dem via <code>namespaceSelector<\/code> (om detta kommer vi att diskutera i avsnittet \"Filtrera efter namnrymder och poddar\").<\/p>\n<h2>Namngivningsregler f\u00f6r policys<\/h2>\n<p>\nPolicynamn m\u00e5ste vara unika inom en namnrymd. Tv\u00e5 policys med samma namn kan inte existera i en och samma namnrymd, men det kan finnas policys med samma namn i olika namnrymder. Detta \u00e4r praktiskt n\u00e4r du vill \u00e5teranv\u00e4nda samma policy i flera namnrymder.<\/p>\n<p>Jag gillar s\u00e4rskilt ett av s\u00e4tten att namnge. Det g\u00e5r ut p\u00e5 att kombinera namnrymden med de m\u00e5lade poddarna. Till exempel:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres  # &lt;&lt;&lt;\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: postgres\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: admin\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/18318c320d6e37eeb01c51f251550639.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Etiketter<\/h2>\n<p>\nAnpassade etiketter kan f\u00e4stas vid Kubernetes-objekt, s\u00e5som poddar och namnrymder. Etiketter (<i>labels<\/i> \u2014 taggar) \u00e4r ekvivalent med taggar i molnet. Kubernetes n\u00e4tverkspolicys anv\u00e4nder etiketter f\u00f6r att v\u00e4lja <b>poddar<\/b>, som de till\u00e4mpas p\u00e5:<\/p>\n<pre><code class=\"plaintext\">podSelector:\n  matchLabels:\n    role: db<\/code><\/pre>\n<p>\n\u2026 eller <b>namnrymder<\/b>, som de till\u00e4mpas p\u00e5. I detta exempel v\u00e4ljs alla poddar i namnrymder med motsvarande etiketter:<\/p>\n<pre><code class=\"plaintext\">namespaceSelector:\n  matchLabels:\n    project: myproject<\/code><\/pre>\n<p>\nEtt f\u00f6rbeh\u00e5ll: n\u00e4r du anv\u00e4nder <code>namespaceSelector<\/code> <b>se till att de valda namnrymderna inneh\u00e5ller den n\u00f6dv\u00e4ndiga etiketten.<\/b>T\u00e4nk p\u00e5 att inbyggda namnrymder, s\u00e5som <code>default<\/code> och <code>kube-system<\/code>, som standard inte inneh\u00e5ller n\u00e5gra etiketter.<\/p>\n<p>Du kan l\u00e4gga till en etikett till en namnrymd p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<pre><code class=\"bash\">kubectl label namespace default namespace=default<\/code><\/pre>\n<p>\nH\u00e4r b\u00f6r namnet i avsnittet <code>metadata<\/code> referera till det faktiska namnet p\u00e5 namnrymden och inte till etiketten:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: test-network-policy\n  namespace: default   # &lt;&lt;&lt;\nspec:\n...<\/code><\/pre>\n<p><\/p>\n<h2>K\u00e4lla och mottagare<\/h2>\n<p>\nPolicyer f\u00f6r brandv\u00e4ggar best\u00e5r av regler med k\u00e4llor och destinationer. Kubernetes n\u00e4tverkspolicyer definieras f\u00f6r m\u00e5let \u2014 en upps\u00e4ttning av poddar som de till\u00e4mpas p\u00e5, och uppr\u00e4ttar sedan regler f\u00f6r inkommande (ingress) och\/eller utg\u00e5ende (egress) trafik. I v\u00e5rt exempel kommer m\u00e5let f\u00f6r policyn att vara alla poddar i namnrymden <code>default<\/code> med etiketten med nyckeln <code>app<\/code> och v\u00e4rdet <code>db<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: test-network-policy\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: db   # &lt;&lt;&lt;\n  policyTypes:\n  - Ingress\n  - Egress\n  ingress:\n  - from:\n    - ipBlock:\n        cidr: 172.17.0.0\/16\n        except:\n        - 172.17.1.0\/24\n    - namespaceSelector:\n        matchLabels:\n          project: myproject\n    - podSelector:\n        matchLabels:\n          role: frontend\n    ports:\n    - protocol: TCP\n      port: 6379\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 10.0.0.0\/24\n    ports:\n    - protocol: TCP\n      port: 5978<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/5fcb3f78e26ae1ed5635541ad69ef69f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/c753f559ecc3ba54f8b55e29851428c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnderavdelning <code>ingress<\/code> i denna policy \u00f6ppnar den inkommande trafiken till de m\u00e5l-poddarna. Med andra ord, ingress fungerar som k\u00e4lla och m\u00e5let \u00e4r den motsvarande destinationen. P\u00e5 liknande s\u00e4tt \u00e4r egress destinationen och m\u00e5let \u00e4r dess k\u00e4lla.<\/p>\n<p><img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/a0d865de57a7620849074424770832cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Detta motsvarar tv\u00e5 regler f\u00f6r brandv\u00e4ggen: Ingress \u2192 M\u00e5l; M\u00e5l \u2192 Egress.<\/i><\/p>\n<h2>Egress och DNS (viktigt!)<\/h2>\n<p>\nGenom att begr\u00e4nsa utg\u00e5ende trafik, <b>vara s\u00e4rskilt uppm\u00e4rksam p\u00e5 DNS<\/b> \u2014 Kubernetes anv\u00e4nder denna tj\u00e4nst f\u00f6r att \u00f6vers\u00e4tta tj\u00e4nster till IP-adresser. Till exempel kommer f\u00f6ljande policy inte att fungera eftersom du inte har till\u00e5tit applikationen <code>balance<\/code> att n\u00e5 DNS:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.balance\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: balance\n  egress:\n  - to:\n    - podSelector:\n        matchLabels:\n          app: postgres\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/5857a44cc5e06de708f0d3b5b0f49628.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu kan \u00e5tg\u00e4rda detta genom att \u00f6ppna \u00e5tkomst till DNS-tj\u00e4nsten:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.balance\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: balance\n  egress:\n  - to:\n    - podSelector:\n        matchLabels:\n          app: postgres\n  - to:               # &lt;&lt;&lt;\n    ports:            # &lt;&lt;&lt;\n    - protocol: UDP   # &lt;&lt;&lt;\n      port: 53        # &lt;&lt;&lt;\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/a396bb2ae94fca94c3b62aef2cb07552.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen sista komponenten <code>till<\/code> \u2014 \u00e4r tom, och d\u00e4rf\u00f6r v\u00e4ljer den indirekt <b>alla poddar i alla namnrymder<\/b>, vilket till\u00e5ter <code>balance<\/code> att skicka DNS-f\u00f6rfr\u00e5gningar till den motsvarande Kubernetes-tj\u00e4nsten (den k\u00f6r vanligtvis i namnomr\u00e5det <code>kube-system<\/code>).<\/p>\n<p>Denna metod fungerar, men den <b>\u00e4r \u00f6verdrivet till\u00e5tande och os\u00e4ker<\/b>, eftersom den till\u00e5ter DNS-f\u00f6rfr\u00e5gningar att g\u00e5 utanf\u00f6r klustret.<\/p>\n<p>Den kan f\u00f6rb\u00e4ttras med tre steg.<\/p>\n<p>1. Till\u00e5t endast DNS-f\u00f6rfr\u00e5gningar <b>inuti<\/b> till klustret genom att l\u00e4gga till <code>namespaceSelector<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.balance\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: balance\n  egress:\n  - to:\n    - podSelector:\n        matchLabels:\n          app: postgres\n  - to:\n    - namespaceSelector: {} # &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;\n    ports:\n    - protocol: UDP\n      port: 53\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/5920a043229676e0780d691d302c5ade.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2. Till\u00e5t DNS-f\u00f6rfr\u00e5gningar endast inom namnomr\u00e5det <code>kube-system<\/code>.<\/p>\n<p>F\u00f6r detta m\u00e5ste du l\u00e4gga till en etikett i namnomr\u00e5det <code>kube-system<\/code>: <code>kubectl label namespace kube-system namespace=kube-system<\/code> \u2014 och ange det i policyn med hj\u00e4lp av <code>namespaceSelector<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.balance\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: balance\n  egress:\n  - to:\n    - podSelector:\n        matchLabels:\n          app: postgres\n  - to:\n    - namespaceSelector:         # &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;\n        matchLabels:             # &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;\n          namespace: kube-system # &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;\n    ports:\n    - protocol: UDP\n      port: 53\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/2a1dd0975c58e6d277baffc7c3ac6e48.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n3. Paranoika kan g\u00e5 \u00e4nnu l\u00e4ngre och begr\u00e4nsa DNS-f\u00f6rfr\u00e5gningar till en viss DNS-tj\u00e4nst i <code>kube-system<\/code>. I avsnittet \"Filtrera efter namnrymder och poddar\" kommer vi att diskutera hur detta kan uppn\u00e5s.<\/p>\n<p>Ett annat alternativ \u00e4r att till\u00e5ta DNS p\u00e5 namnomr\u00e5desniv\u00e5. I s\u00e5 fall beh\u00f6ver det inte \u00f6ppnas f\u00f6r varje tj\u00e4nst:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.dns\n  namespace: default\nspec:\n  podSelector: {} # &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;\n  egress:\n  - to:\n    - namespaceSelector: {}\n    ports:\n    - protocol: UDP\n      port: 53\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\nTomt <code>podSelector<\/code> v\u00e4ljer alla poddar i namnomr\u00e5det.<\/p>\n<p><img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/5d6b627b69da980477b3910fbf4de6c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>F\u00f6rsta matchning och ordning av regler<\/h2>\n<p>\nI vanliga brandv\u00e4ggar best\u00e4ms \u00e5tg\u00e4rden (\"Till\u00e5t\" eller \"F\u00f6rbjud\") p\u00e5 en paket av den f\u00f6rsta regeln som den uppfyller. <b>I Kubernetes har ordningen av policys ingen betydelse.<\/b><\/p>\n<p>Som standard, n\u00e4r policyer inte \u00e4r angivna, \u00e4r kommunikationen mellan poddar till\u00e5ten och de kan fritt utbyta information. N\u00e4r du b\u00f6rjar formulera policyer, blir varje pod som p\u00e5verkas av n\u00e5gon av dem isolerad enligt disjunktion (logiskt ELLER) av alla policyer som valde den. Poddar som inte p\u00e5verkas av n\u00e5gon policy f\u00f6rblir \u00f6ppna.<\/p>\n<p>S\u00e5dant beteende kan \u00e4ndras med hj\u00e4lp av en rensningsregel.<\/p>\n<h2>Rensningsregel (\"F\u00f6rbjud\")<\/h2>\n<p>\nBrandv\u00e4ggspolicies f\u00f6rbjuder vanligtvis all trafik som inte uttryckligen till\u00e5ts.<\/p>\n<p><b>I Kubernetes finns ingen \u00e5tg\u00e4rd \"f\u00f6rbjud\" (deny)<\/b>, men en liknande effekt kan uppn\u00e5s med en vanlig (till\u00e5tande) policy genom att v\u00e4lja en tom grupp av k\u00e4llpoddar (ingress):<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: deny-all\n  namespace: default\nspec:\n  podSelector: {}\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/8b3ced50ec5a1de70940d53f467966fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDenna policy v\u00e4ljer alla poddar i namnutrymmet och l\u00e4mnar ingress odefinierad, vilket blockerar all inkommande trafik.<\/p>\n<p>P\u00e5 liknande s\u00e4tt kan all utg\u00e5ende trafik fr\u00e5n namnomr\u00e5det begr\u00e4nsas:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: deny-all-egress\n  namespace: default\nspec:\n  podSelector: {}\n  policyTypes:\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/be22e11efef0098f2665331c09d748f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObservera att <b>alla ytterligare policies som till\u00e5ter trafik till poddar i namnutrymmet kommer att ha prioritet \u00f6ver denna regel<\/b> (p\u00e5 samma s\u00e4tt som att l\u00e4gga till en till\u00e5tande regel f\u00f6re en f\u00f6rbud i brandv\u00e4ggskonfigurationen).<\/p>\n<h2>Till\u00e5t allt (Any-Any-Any-Allow)<\/h2>\n<p>\nF\u00f6r att skapa en \"Till\u00e5t allt\"-policy m\u00e5ste den ovan n\u00e4mnda f\u00f6rbudspolicyn kompletteras med en tom post <code>ingress<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: allow-all\n  namespace: default\nspec:\n  podSelector: {}\n  ingress: # &lt;&lt;&lt;\n  - {}     # &lt;&lt;&lt;\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/7322351493211388fe772b8dc270108d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen \u00f6ppnar \u00e5tkomst fr\u00e5n <b>alla poddar i alla namnutrymmen (och alla IP-adresser) till vilken podd som helst i namnutrymmet <code>default<\/code><\/b>. Detta beteende \u00e4r aktiverat som standard, s\u00e5 normalt beh\u00f6ver det inte definieras ytterligare. Men ibland kan det vara n\u00f6dv\u00e4ndigt att tempor\u00e4rt st\u00e4nga av vissa specifika tillst\u00e5nd f\u00f6r fels\u00f6kning.<\/p>\n<p>Regeln kan sn\u00e4vas in och till\u00e5ta \u00e5tkomst endast till <b>en specifik upps\u00e4ttning poddar<\/b> (<code>app:balance<\/code>) i namnomr\u00e5det <code>default<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: allow-all-to-balance\n  namespace: default\nspec:\n  podSelector:\n    matchLabels:\n      app: balance\n  ingress: \n  - {}\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/d8c9cb85003f489acec815d1c2b53497.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6ljande policy till\u00e5ter all inkommande (ingress) och utg\u00e5ende (egress) trafik, inklusive \u00e5tkomst till vilken IP som helst utanf\u00f6r klustret:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: allow-all\nspec:\n  podSelector: {}\n  ingress:\n  - {}\n  egress:\n  - {}\n  policyTypes:\n  - Ingress\n  - Egress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/2477f18d3d228f80bc5169d9ec3be2fc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/3502b892713cdac8850e812b2eff3ea3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kombinera flera policies<\/h2>\n<p>\nPolicies kombineras med hj\u00e4lp av logiskt ELLER p\u00e5 tre niv\u00e5er; till\u00e5telsen f\u00f6r varje podd fastst\u00e4lls enligt disjunktionen av alla policies som p\u00e5verkar den:<\/p>\n<p>1. I f\u00e4lten <code>fr\u00e5n<\/code> och <code>till<\/code> kan tre olika typer av element definieras (alla kombineras med hj\u00e4lp av ELLER):<\/p>\n<ul>\n<li> <code>namespaceSelector<\/code> \u2014 v\u00e4ljer namnomr\u00e5det helt;<\/li>\n<li> <code>podSelector<\/code> \u2014 v\u00e4ljer poddar;<\/li>\n<li> <code>ipBlock<\/code> \u2014 v\u00e4ljer subn\u00e4t.<\/li>\n<\/ul>\n<p>\nAntalet element (\u00e4ven om de \u00e4r identiska) i underavsnitten <code>fr\u00e5n<\/code>\/<code>till<\/code> \u00e4r inte begr\u00e4nsat. Alla kommer att kombineras med logiskt ELLER.<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres\n  namespace: default\nspec:\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: indexer\n    - podSelector:\n        matchLabels:\n          app: admin\n  podSelector:\n    matchLabels:\n      app: postgres\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/717e745720f39260a8508fb2b2bb6f65.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2. Inuti policyn kan det finnas flera element <code>ingress<\/code> som kombineras med logiskt ELLER. P\u00e5 samma s\u00e4tt kan avsnittet <code>fr\u00e5n<\/code> inneh\u00e5lla flera element <code>egress<\/code> (som ocks\u00e5 kombineras med disjunktion): <code>till<\/code> apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres\n  namespace: default\nspec:\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: indexer\n  - from:\n    - podSelector:\n        matchLabels:\n          app: admin\n  podSelector:\n    matchLabels:\n      app: postgres\n  policyTypes:\n  - Ingress<\/p>\n<pre><code class=\"plaintext\">3. Olika policies kombineras ocks\u00e5 med logiskt ELLER<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/b579e1f4b97acd92fb38cd6703aa1983.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMen vid deras kombination finns en begr\u00e4nsning som<\/p>\n<p>Chris Cooney <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/sainsburys-engineering\/considerations-with-k8s-networkpolicy-cee7eacf5469\">att<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@chriscooney\">: Kubernetes kan endast kombinera policies med olika<\/a><\/noindex>Egress <code>policyTypes<\/code> (<code>Ingress<\/code> eller <code>). Policies som definierar ingress (eller egress) skrivs \u00f6ver.<\/code>Kommunikation mellan namnrymder<\/p>\n<h2>Som standard \u00e4r informationsutbyte mellan namnrymder till\u00e5tet. Detta kan \u00e4ndras med en restriktiv policy som begr\u00e4nsar utg\u00e5ende och\/eller inkommande trafik till namnrymden (se \"Rensningsregel\" ovan).<\/h2>\n<p>\nGenom att blockera \u00e5tkomst till namnrymden (se \"Rensningsregel\" ovan) kan du g\u00f6ra undantag i den restriktiva policyn genom att till\u00e5ta anslutningar fr\u00e5n en viss namnrymd med hj\u00e4lp av<\/p>\n<p>apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: database.postgres\n  namespace: database\nspec:\n  podSelector:\n    matchLabels:\n      app: postgres\n  ingress:\n  - from:\n    - namespaceSelector: # &lt;&lt;&lt;\n        matchLabels:\n          namespace: default\n  policyTypes:\n  - Ingress <code>namespaceSelector<\/code>:<\/p>\n<pre><code class=\"plaintext\">Som ett resultat kommer alla pods i namnrymden<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/5a3d2baed1ff9b813ef0651fe500ad8a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\natt f\u00e5 \u00e5tkomst till pods <code>default<\/code> kommer att f\u00e5 tillg\u00e5ng till poddar <code>postgres<\/code> i namnrymden <code>database<\/code>bara specifika pods i namnrymden <code>postgres<\/code> endast specifika poddar i namnutrymmet <code>default<\/code>?<\/p>\n<h2>Filtrering efter namnutrymmen och poddar<\/h2>\n<p>\nmed hj\u00e4lp av logiskt OCH. Det ser ut s\u00e5 h\u00e4r: <code>namespaceSelector<\/code> och <code>podSelector<\/code> apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: database.postgres\n  namespace: database\nspec:\n  podSelector:\n    matchLabels:\n      app: postgres\n  ingress:\n  - from:\n    - namespaceSelector:\n        matchLabels:\n          namespace: default\n      podSelector: # &lt;&lt;&lt;\n        matchLabels:\n          app: admin\n  policyTypes:\n  - Ingress<\/p>\n<pre><code class=\"plaintext\">Varf\u00f6r tolkas detta som OCH ist\u00e4llet f\u00f6r det vanliga ELLER?<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/e933e449d9f9c10505e45930d1477b2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nb\u00f6rjar inte med ett bindestreck. I YAML inneb\u00e4r detta att<\/p>\n<p>Observera att <code>podSelector<\/code> och det som f\u00f6reg\u00e5r det <code>podSelector<\/code> h\u00f6r ihop med samma listaelement. D\u00e4rf\u00f6r kombineras de med logiskt OCH. <code>namespaceSelector<\/code> Att l\u00e4gga till ett bindestreck f\u00f6re<\/p>\n<p>Att l\u00e4gga till ett bindestreck framf\u00f6r <code>podSelector<\/code> kommer att skapa ett nytt element i listan som kommer att kombineras med det f\u00f6reg\u00e5ende <code>namespaceSelector<\/code> med hj\u00e4lp av logiskt ELLER.<\/p>\n<p>F\u00f6r att v\u00e4lja poddar med en specifik etikett <b>i alla namnomr\u00e5den<\/b>, skriv en tom <code>namespaceSelector<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: database.postgres\n  namespace: database\nspec:\n  podSelector:\n    matchLabels:\n      app: postgres\n  ingress:\n  - from:\n    - namespaceSelector: {}\n      podSelector:\n        matchLabels:\n          app: admin\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/e79e4a8067fa254f85fa8be105c3ad34.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Flera etiketter kombineras med OCH<\/h2>\n<p>\nReglerna f\u00f6r brandv\u00e4ggen med flera objekt (v\u00e4rdar, n\u00e4tverk, grupper) kombineras med hj\u00e4lp av logiskt ELLER. F\u00f6ljande regel tr\u00e4der i kraft om paketets k\u00e4lla st\u00e4mmer med <code>Host_1<\/code> ELLER <code>Host_2<\/code>:<\/p>\n<pre><code class=\"plaintext\">| K\u00e4lla | Destination | Tj\u00e4nst | \u00c5tg\u00e4rd |\n| ----------------------------------------|\n| Host_1 | Subnet_A    | HTTPS   | Till\u00e5t  |\n| Host_2 |             |         |        |\n| ----------------------------------------|<\/code><\/pre>\n<p>\n\u00c5 andra sidan, i Kubernetes kombineras olika etiketter med <code>podSelector<\/code> eller <code>namespaceSelector<\/code> med logiskt OCH. Till exempel kommer f\u00f6ljande regel att v\u00e4lja poddar som har b\u00e5da etiketterna, <code>role=db<\/code> Och <code>version=v2<\/code>:<\/p>\n<pre><code class=\"plaintext\">podSelector:\n  matchLabels:\n    role: db\n    version: v2<\/code><\/pre>\n<p>\nSamma logik till\u00e4mpas p\u00e5 alla typer av operat\u00f6rer: policy m\u00e5ldefinierare, poddselektorer och namnutrymmesselektorer.<\/p>\n<h2>N\u00e4tverk och IP-adresser (IPBlocks)<\/h2>\n<p>\nF\u00f6r att segmentera n\u00e4tverket anv\u00e4nder brandv\u00e4ggar VLAN, IP-adresser och n\u00e4tverk.<\/p>\n<p>I Kubernetes tilldelas IP-adresser automatiskt till poddar och kan ofta f\u00f6r\u00e4ndras, d\u00e4rf\u00f6r anv\u00e4nds etiketter f\u00f6r att v\u00e4lja poddar och namnutrymmen i n\u00e4tverkspolicys.<\/p>\n<p>N\u00e4tverk (<code>ipBlocks<\/code>) anv\u00e4nds vid hantering av inkommande (ingress) eller utg\u00e5ende (egress) externa (North-South) anslutningar. Till exempel \u00f6ppnar denna policy f\u00f6r alla poddar fr\u00e5n namnutrymmet <code>default<\/code> \u00e5tkomst till Googles DNS-tj\u00e4nst:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: egress-dns\n  namespace: default\nspec:\n  podSelector: {}\n  policyTypes:\n  - Egress\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 8.8.8.8\/32\n    ports:\n    - protocol: UDP\n      port: 53<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/42e1194e28331e667a094f19c88e0934.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn tom poddselektor i detta exempel betyder 'v\u00e4lja alla poddar i namnutrymmet'.<\/p>\n<p>Denna policy \u00f6ppnar \u00e5tkomst endast till 8.8.8.8; \u00e5tkomst till n\u00e5gon annan IP \u00e4r f\u00f6rbjuden. S\u00e5ledes har du i praktiken blockerat \u00e5tkomsten till den interna DNS-tj\u00e4nsten i Kubernetes. Om du \u00e4nd\u00e5 vill \u00f6ppna det, ange det uttryckligen.<\/p>\n<p>Vanligtvis <code>ipBlocks<\/code> och <code>podSelectors<\/code> \u00e4r \u00f6msesidigt uteslutande, eftersom interna IP-adresser f\u00f6r poddar inte anv\u00e4nds i <code>ipBlocks<\/code>. Genom att ange <b>intern IP-adresser f\u00f6r poddar<\/b>, kommer du faktiskt att till\u00e5ta anslutningar till\/fr\u00e5n poddar med dessa adresser. I praktiken vet du inte vilken IP-adress som ska anv\u00e4ndas, vilket \u00e4r anledningen till att de inte b\u00f6r anv\u00e4ndas f\u00f6r att v\u00e4lja poddar.<\/p>\n<p>Som motexempel inkluderar f\u00f6ljande policy alla IP-adresser och till\u00e5ter d\u00e4rf\u00f6r tillg\u00e5ng till alla andra poddar:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: egress-any\n  namespace: default\nspec:\n  podSelector: {}\n  policyTypes:\n  - Egress\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 0.0.0.0\/0<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/d99dfdead1c96b071b1643cb5c572878.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu kan \u00f6ppna tillg\u00e5ng endast f\u00f6r externa IP-adresser, utesluta interna IP-adresser f\u00f6r poddar. Till exempel, om din podds subn\u00e4t \u00e4r 10.16.0.0\/14:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: egress-any\n  namespace: default\nspec:\n  podSelector: {}\n  policyTypes:\n  - Egress\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 0.0.0.0\/0\n        except:\n        - 10.16.0.0\/14<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/b157cfe0f1cd4677cf0defd9fdfa8a13.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Porter och protokoll<\/h2>\n<p>\nVanligtvis lyssnar poddar p\u00e5 en port. Detta inneb\u00e4r att man enkelt kan l\u00e4mna portnummer oangeslutna i policys och ha allt p\u00e5 standard. Emellertid rekommenderas det att g\u00f6ra policys s\u00e5 restriktiva som m\u00f6jligt, s\u00e5 i vissa fall kan portarna ocks\u00e5 anges:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres\n  namespace: default\nspec:\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: indexer\n    - podSelector:\n        matchLabels:\n          app: admin\n    ports:             # &lt;&lt;&lt;&lt;\n      - port: 443      # &lt;&lt;&lt;&lt;\n        protocol: TCP  # &lt;&lt;&lt;&lt;\n      - port: 80       # &lt;&lt;&lt;&lt;\n        protocol: TCP  # &lt;&lt;&lt;&lt;\n  podSelector:\n    matchLabels:\n      app: postgres\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/4c778cd46c54e2ae0f4527ffa9e1e740.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObservera att selektorn <code>ports<\/code> till\u00e4mpas p\u00e5 alla element inom blocket <code>till<\/code> eller <code>fr\u00e5n<\/code>, d\u00e4r det finns. F\u00f6r att ange olika portar f\u00f6r olika upps\u00e4ttningar av element, dela upp <code>ingress<\/code> eller <code>egress<\/code> i flera underrubrikblock med <code>till<\/code> eller <code>fr\u00e5n<\/code> och specificera dina portar i varje:<\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.k8s.io\/v1\nkind: NetworkPolicy\nmetadata:\n  name: default.postgres\n  namespace: default\nspec:\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: indexer\n    ports:             # &lt;&lt;&lt;&lt;\n     - port: 443       # &lt;&lt;&lt;&lt;\n       protocol: TCP   # &lt;&lt;&lt;&lt;\n  - from:\n    - podSelector:\n        matchLabels:\n          app: admin\n    ports:             # &lt;&lt;&lt;&lt;\n     - port: 80        # &lt;&lt;&lt;&lt;\n       protocol: TCP   # &lt;&lt;&lt;&lt;\n  podSelector:\n    matchLabels:\n      app: postgres\n  policyTypes:\n  - Ingress<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister\" src=\"\/wp-content\/uploads\/2019\/04\/b9ac1d8af491e992cac0be184005a278.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStandardbeteende f\u00f6r portar:<\/p>\n<ul>\n<li> Om du helt utel\u00e4mnar portdefinitioner (<code>ports<\/code>), betyder detta alla protokoll och alla portar;<\/li>\n<li> Om du utel\u00e4mnar protokolldefinitionen (<code>protocol<\/code>), betyder detta TCP;<\/li>\n<li> Om du utel\u00e4mnar portdefinitionen (<code>port<\/code>), betyder detta alla portar.<\/li>\n<\/ul>\n<p>\nB\u00e4sta praxis: f\u00f6rlita dig inte p\u00e5 standardv\u00e4rden, ange vad du beh\u00f6ver tydligt.<\/p>\n<p>Observera att du m\u00e5ste anv\u00e4nda pod-portar, inte tj\u00e4nsteportar (mer om detta i n\u00e4sta avsnitt).<\/p>\n<h2>\u00c4r policyer definierade f\u00f6r poddar eller tj\u00e4nster?<\/h2>\n<p>\nVanligtvis kommunicerar poddar i Kubernetes med varandra via en tj\u00e4nst \u2014 en virtuell lastbalanserare som dirigerar trafik till de poddar som implementerar tj\u00e4nsten. Man kan t\u00e4nka att n\u00e4tverkspolicys kontrollerar tillg\u00e5ng till tj\u00e4nster, men s\u00e5 \u00e4r det inte. <b>N\u00e4tverkspolicys i Kubernetes fungerar med pod-portar, inte tj\u00e4nsteportar.<\/b><\/p>\n<p>Till exempel, om en tj\u00e4nst lyssnar p\u00e5 port 80 men omdirigerar trafik till port 8080 p\u00e5 sina poddar, m\u00e5ste n\u00e4tverkspolicyn ange just 8080.<\/p>\n<p>En s\u00e5dan mekanism b\u00f6r betraktas som suboptimal: n\u00e4r den interna strukturen f\u00f6r tj\u00e4nsten \u00e4ndras (portarna som poddar lyssnar p\u00e5) m\u00e5ste n\u00e4tverkspolicyn uppdateras.<\/p>\n<p>En ny arkitektonisk ansats med anv\u00e4ndning av Service Mesh <i>(t.ex. se Istio nedan - anm. \u00f6vers.)<\/i> l\u00f6ser detta problem.<\/p>\n<h2>M\u00e5ste b\u00e5de Ingress och Egress anges?<\/h2>\n<p>\nDet korta svaret \u00e4r ja, f\u00f6r att pod A ska kunna koppla upp sig mot pod B m\u00e5ste det ges till\u00e5telse att skapa utg\u00e5ende anslutning (f\u00f6r detta b\u00f6r egress-policyn konfigureras), och pod B m\u00e5ste kunna ta emot en inkommande anslutning (d\u00e4rf\u00f6r beh\u00f6vs en ingress-policy).<\/p>\n<p>I praktiken kan man dock f\u00f6rlita sig p\u00e5 standardpolicyn som till\u00e5ter anslutningar i en eller b\u00e5da riktningarna.<\/p>\n<p>Om en viss pod-<b>ClickHouse-Ninja\/Proton<\/b> v\u00e4ljs av en eller flera <b>egress<\/b>-policys, kommer de begr\u00e4nsningar som \u00e5l\u00e4ggs den att best\u00e4mmas av deras disjunktion. I s\u00e5 fall m\u00e5ste det uttryckligen till\u00e5tas att koppla upp sig mot pod-<b>-mottagaren<\/b>. Om podden inte v\u00e4ljs av n\u00e5gon policy, \u00e4r dess utg\u00e5ende (egress) trafik till\u00e5ten som standard.<\/p>\n<p>P\u00e5 samma s\u00e4tt kommer \u00f6det f\u00f6r podden-<b>-mottagaren<\/b>, vald av en eller flera <b>ingress<\/b>-politikerna att definieras av deras disjunktion. I s\u00e5 fall m\u00e5ste det uttryckligen till\u00e5tas f\u00f6r den att ta emot trafik fr\u00e5n podd-k\u00e4llan. Om ingen policy valts f\u00f6r podden, \u00e4r all inkommande (ingress) trafik till\u00e5ten som standard.<\/p>\n<p>Se avsnittet \"Stateful eller Stateless\" nedan.<\/p>\n<h2>Loggar<\/h2>\n<p>\nN\u00e4tverkspolicys i Kubernetes kan inte logga trafik. Detta g\u00f6r det sv\u00e5rt att avg\u00f6ra om policyn fungerar som den ska, och g\u00f6r analysen inom s\u00e4kerhet mycket besv\u00e4rlig.<\/p>\n<h2>Kontroll av trafik till externa tj\u00e4nster<\/h2>\n<p>\nKubernetes n\u00e4tverkspolicyer till\u00e5ter inte att ange ett fullst\u00e4ndigt dom\u00e4nnamn (DNS) i egress-sektioner. Detta skapar stora besv\u00e4r n\u00e4r man f\u00f6rs\u00f6ker begr\u00e4nsa trafik till externa adresser som saknar en fast IP-adress (som aws.com).<\/p>\n<h2>Kontroll av policy<\/h2>\n<p>\nBrandv\u00e4ggar kommer att varna dig eller till och med v\u00e4gra att acceptera en felaktig policy. Kubernetes verifierar ocks\u00e5 viss information. N\u00e4r n\u00e4tverkspolicyn s\u00e4tts via kubectl kan Kubernetes meddela att den \u00e4r ogiltig och v\u00e4gra att acceptera den. I andra fall accepterar Kubernetes policyn och l\u00e4gger till de saknade detaljerna. Dessa kan ses med kommandot:<\/p>\n<pre><code class=\"plaintext\">kubernetes get networkpolicy  -o yaml<\/code><\/pre>\n<p>\nT\u00e4nk p\u00e5 att Kubernetes valideringssystem inte \u00e4r ofelbart och kan missa vissa typer av fel.<\/p>\n<h2>Exekvering<\/h2>\n<p>\nKubernetes hanterar inte n\u00e4tverkspolicyer sj\u00e4lva, utan fungerar endast som en API-gateway som l\u00e4gger den tunga b\u00f6rdan av kontroll p\u00e5 det underliggande systemet, kallat Container Networking Interface (CNI). Att definiera policys i ett Kubernetes-kluster utan att ange en l\u00e4mplig CNI \u00e4r som att skapa policies p\u00e5 en brandv\u00e4ggshantering utan att installera dem i brandv\u00e4ggarna. Du m\u00e5ste sj\u00e4lv s\u00e4kerst\u00e4lla att du har en v\u00e4rdig CNI, eller i fallet med Kubernetes-plattformar som \u00e4r distribuerade i molnet <i>(se lista \u00f6ver leverant\u00f6rer <noindex>h\u00e4r<\/noindex> \u2014 \u00f6vers. anm.)<\/i>, aktivera n\u00e4tverkspolicyer som st\u00e4ller in CNI f\u00f6r dig.<\/p>\n<p>Observera att Kubernetes inte kommer att varna dig om du definierar en n\u00e4tverkspolicy utan den n\u00f6dv\u00e4ndiga tillh\u00f6rande CNI.<\/p>\n<h3>Stateful eller Stateless?<\/h3>\n<p>\nAlla CNI Kubernetes jag har kommit i kontakt med \u00e4r stateful (t.ex. Calico anv\u00e4nder Linux conntrack). Detta g\u00f6r att en pod kan ta emot svar fr\u00e5n den initierade TCP-anslutningen utan att beh\u00f6va \u00e5teretablera den. Jag k\u00e4nner dock inte till n\u00e5gon Kubernetes-standard som garanterar statefulness.<\/p>\n<h2>Avancerad hantering av s\u00e4kerhetspolicyer<\/h2>\n<p>\nH\u00e4r \u00e4r n\u00e5gra s\u00e4tt att \u00f6ka effektiviteten av s\u00e4kerhetspolicyn i Kubernetes:<\/p>\n<ol>\n<li> Arkitekturm\u00f6nstret Service Mesh anv\u00e4nder sidokontainrar f\u00f6r att s\u00e4kerst\u00e4lla detaljerad telemetri och kontroll \u00f6ver trafiken p\u00e5 tj\u00e4nsteniv\u00e5. Ett exempel kan vara <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/\">Istio<\/a><\/noindex>.<\/li>\n<li> Vissa CNI-leverant\u00f6rer har f\u00f6rb\u00e4ttrat sina verktyg s\u00e5 att de g\u00e5r ut\u00f6ver Kubernetes n\u00e4tverkspolicyer.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tufin.com\/products\/tufin-orca\">Tufin Orca<\/a><\/noindex> erbjuder insyn och automatisering av n\u00e4tverkspolicyer f\u00f6r Kubernetes.<\/li>\n<\/ol>\n<p>\nTufin Orca-paketet hanterar n\u00e4tverkspolicyer f\u00f6r Kubernetes (och fungerar som k\u00e4lla till sk\u00e4rmdumparna ovan).<\/p>\n<h2>Ytterligare information<\/h2>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ahmetb\/kubernetes-network-policy-recipes\">Exempel p\u00e5 n\u00e4tverkspolicys, f\u00f6rberedda av Ahmet Alp Balkan fr\u00e5n GKE<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/network-policies\/\">Dokumentationen fr\u00e5n den officiella Kubernetes-webbplatsen.<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/sookocheff.com\/post\/kubernetes\/understanding-kubernetes-networking-model\/\">Guiden f\u00f6r Kubernetes n\u00e4tverksmodell.<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Tufin\/test-network-policies\">Script f\u00f6r att kontrollera n\u00e4tverkspolicyer.<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Slutsats<\/h2>\n<p>\nKubernetes n\u00e4tverkspolicyer erbjuder ett bra verktyg f\u00f6r att segmentera kluster, men de \u00e4r intuitivt sv\u00e5ra att f\u00f6rst\u00e5 och har m\u00e5nga nyanser. Jag anser att p\u00e5 grund av denna komplexitet s\u00e5 har m\u00e5nga befintliga kluster felaktiga policyer. M\u00f6jliga l\u00f6sningar p\u00e5 detta problem \u00e4r automatisering av policydefinitioner eller anv\u00e4ndning av andra segmenteringsverktyg.<\/p>\n<p>Jag hoppas att denna guide kommer att klarg\u00f6ra n\u00e5gra fr\u00e5gor och l\u00f6sa problem som du kan st\u00f6ta p\u00e5.<\/p>\n<h2>P.S. fr\u00e5n \u00f6vers\u00e4ttaren<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00abTillbaka till mikrotj\u00e4nster med Istio\u00bb: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">del 1 (introduktion till grundl\u00e4ggande funktioner)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440378\/\">del 2 (routing, trafikhantering)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/443668\/\">del 3 (s\u00e4kerhet)<\/a><\/noindex>;<\/li>\n<li> \u00bbIllustrerad guide till n\u00e4tverksuppbyggnaden i Kubernetes\u00ab: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/346304\/\">delar 1 och 2 (n\u00e4tverksmodell, \u00f6verlagrade n\u00e4tverk)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/433382\/\">del 3 (tj\u00e4nster och trafikhantering)<\/a><\/noindex>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440504\/\">Docker och Kubernetes i s\u00e4kerhetskr\u00e4vande milj\u00f6er<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436300\/\">9 b\u00e4sta praxis f\u00f6r att s\u00e4kerst\u00e4lla s\u00e4kerheten i Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417905\/\">11 s\u00e4tt att (inte) bli offer f\u00f6r hackning i Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/443190\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 Reuven Harrison \u2014 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 20 \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u0430 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0438 \u0441\u043e\u0443\u0447\u0440\u0435\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Tufin, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 Kubernetes \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043e\u043d \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24432,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32641","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 Kubernetes \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Introduktion till Kubernetes n\u00e4tverkspolicyer f\u00f6r s\u00e4kerhetsspecialister | ProHoster","description":"Ex.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 Kubernetes \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/vvedenie-v-setevye-politiki-kubernetes-dlya-spetsialistov-po-bezopasnosti","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:11+00:00","article:modified_time":"2019-10-31T18:48:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32641","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:53:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:55:23","updated":"2026-01-21 11:53:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32641\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}