Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠŸΡ€ΠΈΠΌ. ΠΏΡ€Π΅Π².: Автор Π½Π° статията β€” Reuven Harrison β€” Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° с Π½Π°Π΄ 20 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΎΠΏΠΈΡ‚ Π² софтуСрната Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ тСхничСски Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ ΡΡŠΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π» Π½Π° компанията Tufin, която Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π° сигурност. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes ΠΊΠ°Ρ‚ΠΎ доста ΠΌΠΎΡ‰Π΅Π½ инструмСнт Π·Π° сСгмСнтация Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Ρ‚ΠΎΠΉ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ смята, Ρ‡Π΅ Ρ‚Π΅ Π½Π΅ са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° лСсни Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π’Π°Π·ΠΈ статия (доста ΠΎΠ±ΡˆΠΈΡ€Π½Π°) ΠΈΠΌΠ° Π·Π° Ρ†Π΅Π» Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ освСдомСността Π½Π° спСциалиститС ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ ΠΈ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ДнСс ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ всС ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ Kubernetes Π·Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° прилоТСнията си. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡŠΡ‚ към Ρ‚ΠΎΠ·ΠΈ софтуСр Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° висок, Ρ‡Π΅ някои Π³ΠΎ Π½Π°Ρ€ΠΈΡ‡Π°Ρ‚ "Π½ΠΎΠ²Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма Π·Π° Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ". ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ Kubernetes (ΠΈΠ»ΠΈ k8s) Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° сС Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π²Π°ΠΆΠ½Π° част ΠΎΡ‚ бизнСса, която изисква организация Π½Π° Π·Ρ€Π΅Π»ΠΈ бизнСс-процСси, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ осигуряванС Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π° сигурност.

Π—Π° спСциалиститС ΠΏΠΎ сигурност, ΠΊΠΎΠΈΡ‚ΠΎ са Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Kubernetes, дСйствитСлСн шок ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°: Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° всичко.

Π’ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° структура Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ; Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊ Ρ‚Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈ стСни. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ някои ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΠΈ камъни ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π½Π° прилоТСнията Π² Kubernetes.

ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Kubernetes

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes позволява ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° взаимодСйствията ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ‚Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° прилоТСния Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ Π½ΠΈΠ²ΠΎ (Ρ‚Ρ€Π΅Ρ‚Π° Π½ΠΈΠ²Π° Π² ΠΌΠΎΠ΄Π΅Π»Π° OSI). ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ липсват ΠΎΡ‚ някои Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈ стСни, ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° 7-ΠΌΠΎ Π½ΠΈΠ²ΠΎ Π½Π° OSI ΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠ»Π°Ρ…ΠΈ, Π½ΠΎ осигуряват основно Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π° сигурност, ΠΊΠΎΠ΅Ρ‚ΠΎ прСдставлява Π΄ΠΎΠ±Ρ€Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.

ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ комуникацията ΠΌΠ΅ΠΆΠ΄Ρƒ pod’овСтС

Π Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ натоварвания Π² Kubernetes сС разпрСдСлят ΠΏΠΎ pod-ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΡΡ‚ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ няколко ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Kubernetes присвоява Π½Π° всСки pod IP адрСс, Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ pod-ΠΎΠ²Π΅. ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² Kubernetes Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΏΡ€Π°Π²Π° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° Π³Ρ€ΡƒΠΏΠΈ pod-ΠΎΠ²Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠ°ΠΊΡ‚ΠΎ Π³Ρ€ΡƒΠΏΠΈΡ‚Π΅ Π·Π° сигурност Π² ΠΎΠ±Π»Π°ΠΊΠ° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ инстанции Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ

Подобно Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ рСсурси Π² Kubernetes, ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ сС Π·Π°Π΄Π°Π²Π°Ρ‚ Π½Π° Π΅Π·ΠΈΠΊΠ° YAML. Π’ слСдващия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ balance ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

(ΠŸΡ€ΠΈΠΌ. ΠΏΡ€Π΅Π².: Ρ‚ΠΎΠ·ΠΈ Π΅ΠΊΡ€Π°Π½, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ всички послСдващи ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ, Π΅ създадСн Π½Π΅ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ срСдства Π½Π° Kubernetes, Π° с инструмСнта Tufin Orca, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ компанията Π½Π° Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° статия, спомСната Π² края Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.

Π—Π° Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ собствСна ΠΌΡ€Π΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, Ρ‰Π΅ Π²ΠΈ трябват основни познания ΠΏΠΎ YAML. Π’ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ Π΅ основан Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅ (Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, Π° Π½Π΅ с табулация). Π•Π»Π΅ΠΌΠ΅Π½Ρ‚ с ΠΎΡ‚ΡΡ‚ΡŠΠΏ сС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π°ΠΉ-близкия Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ с ΠΎΡ‚ΡΡ‚ΡŠΠΏ Π½Π°Π΄ Π½Π΅Π³ΠΎ. Нов Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ списъка Π·Π°ΠΏΠΎΡ‡Π²Π° с Ρ‚ΠΈΡ€Π΅, Π° всички останали Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ са във Π²ΠΈΠ΄Π° ΠΊΠ»ΡŽΡ‡-стойност.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° YAML, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ kubectl, Π·Π° Π΄Π° я ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π² кластСра:

kubectl create -f policy.yaml

БпСцификация Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°

БпСцификацията Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π² Kubernetes Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°:

  1. podSelector: опрСдСля pod-ΠΎΠ²Π΅Ρ‚Π΅, засСгнати ΠΎΡ‚ Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° (Ρ†Π΅Π»ΠΈΡ‚Π΅) β€” Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½;
  2. policyTypes: ΡƒΠΊΠ°Π·Π²Π° ΠΊΠΎΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² Ρ‚Π°Π·ΠΈ: ingress ΠΈ/ΠΈΠ»ΠΈ egress β€” нСобязатСлСн, Π½ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° Π³ΠΎ описватС ясно във всички случаи;
  3. ingress: опрСдСля Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ входящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ pod-ΠΎΠ²Π΅ β€” нСобязатСлСн;
  4. egress: опрСдСля Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ изходящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ pod-ΠΎΠ²Π΅ β€” нСобязатСлСн.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π²Π·Π΅Ρ‚ ΠΎΡ‚ сайта Π½Π° Kubernetes (Π·Π°ΠΌΠ΅Π½ΠΈΠ» съм role Π½Π° app), ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ всички Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността
Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ всички Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚. Π‘Π°ΠΌΠΎ podSelectorΠ΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½, останалитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

Ако пропуснСтС policyTypes, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ‰Π΅ бъдС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ тя опрСдСля страната Π½Π° ingress. Ако Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π΅ са посочСни ясни указания Π·Π° Ρ‚ΠΎΠ²Π°, систСмата Ρ‰Π΅ счита, Ρ‡Π΅ цСлият Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½.
  • ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° egress-страна Ρ‰Π΅ бъдС опрСдСляно ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ egress ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€.

Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° посочватС ясно policyTypes.

Π’ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с посочСната ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π»ΠΎΠ³ΠΈΠΊΠ°, Π² случай Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ingress ΠΈ/ΠΈΠ»ΠΈ egress са пропуснати, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ‰Π΅ забранява цСлия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ (Π²ΠΆ. "ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° почистванС" ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ).

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅

Ако ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π½Π΅ са ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ, Kubernetes ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° цСлия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Всички pod-ΠΎΠ²Π΅ свободно ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° обмСнят информация ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си. ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° сигурността Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Π½Π΅ забравяйтС, Ρ‡Π΅ Kubernetes ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΅ създадСн ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ с Ρ†Π΅Π» Π΄Π° осигури взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСнията. ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΏΠΎ-късно.

ИмСнни пространства

Π˜ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ пространства (Namespaces) са ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΈΠ²Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Kubernetes. Π’Π΅ са ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° логичСски срСди Π΅Π΄Π½Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ пространства ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° Kubernetes, ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ±ΠΈΡ‚Π°Π²Π°Ρ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠΌΠ΅Π½Π½Π° пространство. Π’ Π±Π»ΠΎΠΊΠ° metadata ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС посочСно Π½Π° ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ пространство ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°:

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

Ако ΠΈΠΌΠ΅Π½Π½ΠΎΡ‚ΠΎ пространство Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π΅ Π΅ посочСно ясно, систСмата Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° namespace, посочСно Π² kubectl (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ namespace=default):

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

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ ясно Π΄Π° посочватС namespace, освСн Π°ΠΊΠΎ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° няколко пространства с ΠΈΠΌΠ΅Π½Π°.

ОсновСн Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ podSelector Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ‰Π΅ ΠΈΠ·Π±ΠΈΡ€Π° pod'ΠΈ ΠΎΡ‚ пространството с ΠΈΠΌΠ΅Π½Π°, към ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° (няма Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ pod'ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎ пространство с ΠΈΠΌΠ΅Π½Π°).

По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ podSelector'ΠΈΡ‚Π΅ Π² Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ ingress ΠΈ egress ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ pod'ΠΈ само ΠΎΡ‚ своСто пространство с ΠΈΠΌΠ΅Π½Π°, освСн Π°ΠΊΠΎ Π½Π΅ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° namespaceSelector (Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π° "Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ пространства с ΠΈΠΌΠ΅Π½Π° ΠΈ pod'ΠΈ").

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ

Π˜ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ са ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½ΠΎ пространство с ΠΈΠΌΠ΅Π½Π°. НС ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ΅ Π² Π΅Π΄Π½ΠΎ пространство, Π½ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ с Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ ΠΈΠΌΠ΅Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пространства. Π’ΠΎΠ²Π° Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искатС Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π² няколко пространства.

ОсобСно ΠΌΠΈ харСсва Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅. Π’ΠΎΠΉ сС ΡΡŠΡΡ‚ΠΎΠΈ Π² комбинация Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° пространството с ΠΈΠΌΠ΅Π½Π° с Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ pod'ΠΈ. НапримСр:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ

На ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° Kubernetes, ΠΊΠ°Ρ‚ΠΎ pod'ΠΈ ΠΈ пространства с ΠΈΠΌΠ΅Π½Π°, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС прикрСпят потрСбитСлски Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ. Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ (labels β€” ΠΌΠ°Ρ€ΠΊΠΈ) са Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Π½Π° Ρ‚Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΎΠ±Π»Π°ΠΊΠ°. ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ€ pod'ΠΈ, към ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚:

podSelector:
  matchLabels:
    role: db

… ΠΈΠ»ΠΈ пространствата с ΠΈΠΌΠ΅Π½Π°, към ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ всички pod'ΠΈ Π² пространствата с ΠΈΠΌΠ΅Π½Π° с подходящитС Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ:

namespaceSelector:
  matchLabels:
    project: myproject

Π•Π΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ namespaceSelector Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΡ‚Π΅ пространства с ΠΈΠΌΠ΅Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ нСобходимия Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚. Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ пространства с ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ kube-system, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ.

ДобавянСто Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ към пространството ΠΌΠΎΠΆΠ΅ Π΄Π° станС ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

kubectl label namespace default namespace=default

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° namespace Π² сСкцията metadata трябва Π΄Π° сС отнася Π΄ΠΎ дСйствитСлното ΠΈΠΌΠ΅ Π½Π° пространството, Π° Π½Π΅ Π΄ΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π°:

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

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈ адрСсат

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΡ‚Π΅ стСни сС ΡΡŠΡΡ‚ΠΎΡΡ‚ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° с ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ ΠΈ адрСсати. ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes сС опрСдСлят Π·Π° Ρ†Π΅Π»Ρ‚Π° – Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ pod’овС, към ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚, ΠΈ слСд Ρ‚ΠΎΠ²Π° установяват ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° входящ (ingress) ΠΈ/ΠΈΠ»ΠΈ изходящ (egress) Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†Π΅Π»Ρ‚Π° Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ всички pod’овС Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ с ΠΊΠ»ΡŽΡ‡ app ΠΈ стойността 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността
Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π Π°Π·Π΄Π΅Π» ingress Π² Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° отваря входящия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ към Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ pod’овС. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ingress Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ, Π° Ρ†Π΅Π»Ρ‚Π° Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ адрСсат. По Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ egress Π΅ адрСсат, Π° Ρ†Π΅Π»Ρ‚Π° Π΅ нСговият ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π’ΠΎΠ²Π° Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π½Π° Π΄Π²Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна: Ingress β†’ Π¦Π΅Π»; Π¦Π΅Π» β†’ Egress.

Egress ΠΈ DNS (Π²Π°ΠΆΠ½ΠΎ!)

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° изходящия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, особСно ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° DNS β€” Kubernetes ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ услуга Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° услуги с IP адрСси. НапримСр, слСдната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° няма Π΄Π° сработи, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ стС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ balance Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π° с 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

МоТС Π΄Π° я ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅, отваряйки Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ услугата 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ към β€” Π΅ ΠΏΡ€Π°Π·Π΅Π½ ΠΈ слСдоватСлно косвСно ΠΈΠ·Π±ΠΈΡ€Π° всички pod’овС във всички пространства Π½Π° ΠΈΠΌΠ΅Π½Π°, позволявайки balance ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° DNS заявки към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° услуга Π½Π° Kubernetes (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² пространството kube-system).

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ Π΅ ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ ΠΈ нСбСзопасСн, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ позволява насочванС Π½Π° DNS заявки извън кластСра.

МоТС Π΄Π° бъдС ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ с Ρ‚Ρ€ΠΈ послСдоватСлни ΡΡ‚ΡŠΠΏΠΊΠΈ.

1. Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ DNS заявки само Π²ΡŠΡ‚Ρ€Π΅ към кластСра, добавяйки 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

2. Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ DNS заявкитС само Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° kube-system.

Π—Π° Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° kube-system: kubectl label namespace kube-system namespace=kube-system β€” ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

3. ΠŸΠ°Ρ€Π°Π½ΠΎΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π°Ρ‚ ΠΎΡ‰Π΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡ ΠΈ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Ρ‚ DNS заявкитС Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° DNS услуга Π² kube-system. Π’ Ρ€Π°Π·Π΄Π΅Π»Π° "Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ пространства Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ΠΈ pod’овС" Ρ‰Π΅ бъдС описано ΠΊΠ°ΠΊ Π΄Π° сС постигнС Ρ‚ΠΎΠ²Π°.

Π”Ρ€ΡƒΠ³ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ DNS Π½Π° Π½ΠΈΠ²ΠΎ пространство Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°. Π’ Ρ‚Π°ΠΊΡŠΠ² случай няма Π΄Π° Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Π³ΠΎ отварятС Π·Π° всяка услуга:

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

ΠŸΡ€Π°Π·Π΅Π½ podSelector ΠΈΠ·Π±ΠΈΡ€Π° всички pod’овС Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠŸΡŠΡ€Π²ΠΎ съвпадСниС ΠΈ Ρ€Π΅Π΄ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°

Π’ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ‚Π΅ Π±Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€ΠΈ, дСйствиСто (β€žΠ Π°Π·Ρ€Π΅ΡˆΠΈβ€œ ΠΈΠ»ΠΈ β€žΠ—Π°Π±Ρ€Π°Π½ΠΈβ€œ) ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ сС опрСдСля ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ отговаря. Π’ Kubernetes Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π½Π΅ са Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ, комуникацията ΠΌΠ΅ΠΆΠ΄Ρƒ pod’овСтС Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° ΠΈ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ свободно Π΄Π° обмСнят информация. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, всСки pod, засСгнат ΠΎΡ‚ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ тях, става ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ†ΠΈΡΡ‚Π° (Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π˜Π›Π˜) Π½Π° всички ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π³ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚. Pod’овСтС, Π½Π΅ засСгнати ΠΎΡ‚ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, остават ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° почистванС.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° почистванС (β€žΠ—Π°Π±Ρ€Π°Π½ΠΈβ€œ)

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π½Π° Π±Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ забраняват всякакъв Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ явно Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½.

Π’ Kubernetes няма дСйствиС β€žΠ·Π°Π±Ρ€Π°Π½ΡΠ²Π°ΠΌβ€œ (deny),ΠΎΠ±Π°Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС постигнат с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° (Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰Π°) ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, ΠΈΠ·Π±ΠΈΡ€Π°Ρ‰Π° ΠΏΡ€Π°Π·Π½Π° Π³Ρ€ΡƒΠΏΠ° pod’овС-ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ (ingress):

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π’Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΈΠ·Π±ΠΈΡ€Π° всички pod'ΠΎΠ²Π΅ Π² пространството Π·Π° ΠΈΠΌΠ΅ ΠΈ оставя ingress Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, забранявайки цСлия входящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

По ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ цСлия изходящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ пространството Π·Π° ΠΈΠΌΠ΅:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ всички Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ към pod'ΠΎΠ²Π΅ Π² пространството Π·Π° ΠΈΠΌΠ΅, Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚ прСдимство Π½Π°Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° добавянСто Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€Π΅Π΄ΠΈ забраняващото Π² конфигурацията Π½Π° Π±Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€Π°).

Π Π°Π·Ρ€Π΅ΡˆΠΈ всичко (Any-Any-Any-Allow)

Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° β€žΠ Π°Π·Ρ€Π΅ΡˆΠΈ Π²ΡΠΈΡ‡ΠΊΠΎβ€œ, трябва Π΄Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π·Π°Π±Ρ€Π°Π½ΠΈΡ‚Π΅Π»Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° с ΠΏΡ€Π°Π·Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ingress:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Вя отваря Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ всички pod'ΠΎΠ²Π΅ във всички пространства Π·Π° ΠΈΠΌΠ΅ (ΠΈ всички IP) Π΄ΠΎ всСки pod Π² пространството Π·Π° ΠΈΠΌΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° понякога ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ някои ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° диагностика Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС стСснСно ΠΈ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ само Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ pod'ΠΎΠ²Π΅ (app:balance) Π² пространството Π·Π° ΠΈΠΌΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° цСлия входящ (ingress) ΠΈ изходящ (egress) Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всякакви IP извън ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността
Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° няколко ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ с логичСско Π˜Π›Π˜ Π½Π° Ρ‚Ρ€ΠΈ Π½ΠΈΠ²Π°; Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° Π½Π° всСки pod сС опрСдСлят Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ†ΠΈΡΡ‚Π° Π½Π° всички ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π³ΠΎ засягат:

1. Π’ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° from ΠΈ към ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ (всички Ρ‚Π΅ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π˜Π›Π˜):

  • namespaceSelector β€” ΠΈΠ·Π±ΠΈΡ€Π°Π»ΠΎ пространство Π·Π° ΠΈΠΌΠ΅ изцяло;
  • podSelector β€” ΠΈΠ·Π±ΠΈΡ€Π°Π»ΠΎ pod'ΠΎΠ²Π΅;
  • ipBlock β€” ΠΈΠ·Π±ΠΈΡ€Π°Π»ΠΎ подсСт.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° броят Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ (Π΄ΠΎΡ€ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ) Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ from/към Π½Π΅ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Всички Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ логичСски с Π˜Π›Π˜.

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

2. Π’ΡŠΡ‚Ρ€Π΅ Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π» ingress ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° мноТСство Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ from (ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ с логичСско Π˜Π›Π˜). По аналогия, Ρ€Π°Π·Π΄Π΅Π» egress ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΌΠ½ΠΎΠ³ΠΎΠ±Ρ€ΠΎΠΉΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ към (ΡΡŠΡ‰ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ с Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ†ΠΈΡ):

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

3. Π Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΡΡŠΡ‰ΠΎ сС обСдиняват с логичСско Π˜Π›Π˜

Но ΠΏΡ€ΠΈ обСдиняванСто ΠΈΠΌ ΠΈΠΌΠ° Π΅Π΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ посочи ΠšΡ€ΠΈΡ ΠšΡƒΠ½ΠΈ: Kubernetes ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ само с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ policyTypes (Ingress ΠΈΠ»ΠΈ Egress). ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ опрСдСлят ingress (ΠΈΠ»ΠΈ egress), Ρ‰Π΅ замСстват Π΅Π΄Π½Π° Π΄Ρ€ΡƒΠ³Π°.

Π’Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° пространствата

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΎΠ±ΠΌΠ΅Π½ΡŠΡ‚ Π½Π° информация ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° пространствата Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‰Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, която Ρ‰Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈ изходящия ΠΈ/ΠΈΠ»ΠΈ входящия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² пространството (Π²ΠΆ. "ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° почистванС" ΠΏΠΎ-Π³ΠΎΡ€Π΅).

Π§Ρ€Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ пространството (Π²ΠΆ. "ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° почистванС" ΠΏΠΎ-Π³ΠΎΡ€Π΅) ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‰Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°ΠΉΠΊΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ пространство Ρ‡Ρ€Π΅Π· 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° всички pod’овС Π² пространството ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ pod’овСтС postgres Π² пространството ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° database. Но ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ искатС Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ само Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ pod’овС Π² пространството postgres Π€ΠΈΠ»Ρ‚ΡŠΡ€ ΠΏΠΎ пространства ΠΈ pod’овС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅?

Kubernetes вСрсия 1.11 ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅ позволява ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ

Ρ‡Ρ€Π΅Π· логичСско И. ИзглСТда Ρ‚Π°ΠΊΠ°: namespaceSelector ΠΈ podSelector 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

Π—Π°Ρ‰ΠΎ Ρ‚ΠΎΠ²Π° сС Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π° ΠΊΠ°Ρ‚ΠΎ И вмСсто ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎΡ‚ΠΎ Π˜Π›Π˜?

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π½Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π° с Ρ‚ΠΈΡ€Π΅. Π’ YAML Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ podSelector ΠΈ стоящото ΠΏΡ€Π΅Π΄ Π½Π΅Π³ΠΎ podSelector сС отнасят Π·Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° списъка. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‚Π΅ сС обСдиняват логичСски И. namespaceSelector относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ элСмСнту списка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ логичСским И.

ДобавянС Π½Π° Ρ‚ΠΈΡ€Π΅ ΠΏΡ€Π΅Π΄ΠΈ podSelector Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ създаванС Π½Π° Π½ΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ списъка, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ с ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π°Ρ‰ΠΈΡ namespaceSelector Ρ‡Ρ€Π΅Π· логичСско Π˜Π›Π˜.

Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ pod’овС с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ във всички пространства Π½Π° ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π·Π΅Π½ 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ с И

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΡ‚Π΅ стСни с мноТСство ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (хостовС, ΠΌΡ€Π΅ΠΆΠΈ, Π³Ρ€ΡƒΠΏΠΈ) сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Ρ‡Ρ€Π΅Π· логичСско Π˜Π›Π˜. Π‘Π»Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‰Π΅ сработи, Π°ΠΊΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° съвпада с Host_1 Π˜Π›Π˜ Host_2:

| Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ | ДСстинация | Услуга | ДСйствиС |
| ----------------------------------------|
| Host_1 | Subnet_A    | HTTPS   | Позволи  |
| Host_2 |             |         |        |
| ----------------------------------------|

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π² Kubernetes Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π² podSelector ΠΈΠ»ΠΈ namespaceSelector сС обСдиняват логичСски с И. НапримСр, слСдното ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‰Π΅ ΠΈΠ·Π±Π΅Ρ€Π΅ pod’овС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π°Ρ‚ ΠΈ Π΄Π²Π°Ρ‚Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π°, role=db И version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

Π‘ΡŠΡ‰Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π·Π° всички Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ: сСлСктори Π½Π° Ρ†Π΅Π»ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, сСлСктори Π½Π° pod’овС ΠΈ сСлСктори Π½Π° пространства Π½Π° ΠΈΠΌΠ΅Π½Π°.

ΠŸΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ ΠΈ IP адрСси (IPBlocks)

Π—Π° сСгмСнтиранС Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΡ‚Π΅ стСни ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ VLAN, IP адрСси ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ.

Π’ Kubernetes IP адрСситС сС присвояват Π½Π° pod’овСтС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ чСсто Π΄Π° сС промСнят, Π·Π°Ρ‚ΠΎΠ²Π° Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° pod’овС ΠΈ пространства Π½Π° ΠΈΠΌΠ΅Π½Π° Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ.

ΠŸΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ (ipBlocks) сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° входящитС (ingress) ΠΈΠ»ΠΈ изходящитС (egress) външни (North-South) Π²Ρ€ΡŠΠ·ΠΊΠΈ. НапримСр, Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° отваря Π΄ΠΎΡΡ‚ΡŠΠΏ Π½Π° всички pod’овС Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΄ΠΎ 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠŸΡ€Π°Π·Π΅Π½ сСлСктор Π½Π° pod’овС Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° β€žΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ всички pod’овС Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°β€œ.

Π’Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° отваря Π΄ΠΎΡΡ‚ΡŠΠΏ само Π΄ΠΎ 8.8.8.8; Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ всякакви Π΄Ρ€ΡƒΠ³ΠΈ IP Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π² ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π°, Π²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° услуга DNS Π½Π° Kubernetes. Ако всС ΠΏΠ°ΠΊ искатС Π΄Π° я ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅, посочСтС Ρ‚ΠΎΠ²Π° явно.

ОбикновСно ipBlocks ΠΈ podSelectors са Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ IP адрСси Π½Π° pod’овСтС Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² ipBlocks. ΠŸΠΎΡΠΎΡ‡Π²Π°ΠΉΠΊΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ IP адрСси Π½Π° pod’овСтС, Π²ΠΈΠ΅ фактичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ ΠΎΡ‚/ΠΊ pod’овС с Ρ‚Π΅Π·ΠΈ адрСси. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, няма Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΉ IP адрСс Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Ρ‚ΠΎΠ²Π° Π½Π΅ трябва Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅ Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° pod’овС.

ΠšΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слСдната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π²Π° всички IP адрСси ΠΈ слСдоватСлно Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всички Π΄Ρ€ΡƒΠ³ΠΈ pod’овС:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ само Π΄ΠΎ външни IP адрСси, ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°ΠΉΠΊΠΈ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ IP адрСси Π½Π° pod’овСтС. НапримСр, Π°ΠΊΠΎ подсСтната маска Π½Π° вашия 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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠŸΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ pod’овСтС ΡΠ»ΡƒΡˆΠ°Ρ‚ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ€Ρ‚. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π½Π΅ посочватС Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ ΠΈ Π΄Π° оставитС всичко ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. ВсС ΠΏΠ°ΠΊ, сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ максимално ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° Π² някои случаи всС ΠΏΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ ports сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към всички Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² Π±Π»ΠΎΠΊΠ° към ΠΈΠ»ΠΈ from, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°. Π—Π° Π΄Π° посочитС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Ρ€Π°Π·Π΄Π΅Π»Π΅Ρ‚Π΅ ingress ΠΈΠ»ΠΈ egress Π½Π° няколко ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π° с към ΠΈΠ»ΠΈ from ΠΈ Π·Π° всСки ΠΎΡ‚ тях Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ своитС ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅:

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността

Π Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

  • Ако напълно пропуснСтС дСфиницията Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ (ports), Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° всичкитС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ всички ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅;
  • Ако пропуснСтС дСфиницията Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (protocol), Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° TCP;
  • Ако пропуснСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚Π° (port), Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° всички ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅.

Най-Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°: Π½Π΅ Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π½Π° стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, посочвайтС Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ Π²ΠΈ явно.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° pod-ΠΎΠ²Π΅Ρ‚Π΅, Π° Π½Π΅ Π½Π° услугитС (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Π² слСдващия ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„).

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π»ΠΈ са Π·Π° pod-ΠΎΠ²Π΅ ΠΈΠ»ΠΈ услуги?

ОбикновСно pod-ΠΎΠ²Π΅Ρ‚Π΅ Π² Kubernetes сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си Ρ‡Ρ€Π΅Π· услуга β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ балансировчик Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, прСнасочващ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° към pod-ΠΎΠ²Π΅Ρ‚Π΅, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‰ΠΈ услугата. МоТС Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ услугитС, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚Π°ΠΊΠ°. ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes работят с ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° pod-ΠΎΠ²Π΅Ρ‚Π΅, Π° Π½Π΅ с услугитС.

НапримСр, Π°ΠΊΠΎ услугата ΡΠ»ΡƒΡˆΠ° Π½Π° 80-Ρ‚ΠΈ ΠΏΠΎΡ€Ρ‚, Π½ΠΎ прСнасочва Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΠΏΠΎΡ€Ρ‚ 8080 ΠΎΡ‚ своитС pod-ΠΎΠ²Π΅, Π² ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° трябва Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ 8080.

Вакъв ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ слСдва Π΄Π° сС ΠΏΡ€ΠΈΠ·Π½Π°Π΅ Π·Π° Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½: ΠΏΡ€ΠΈ промяна Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° структура Π½Π° услугата (ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ pod-ΠΎΠ²Π΅Ρ‚Π΅), Ρ‰Π΅ сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° сС обновят ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

Нов Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Service Mesh (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΈΠΆΡ‚Π΅ Π·Π° Istio ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ β€” Π±Π΅Π». Π½Π° ΠΏΡ€Π΅Π².) позволява Π΄Π° сС справим с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

НСобходимо Π»ΠΈ Π΅ Π΄Π° сС Π·Π°Π΄Π°Π΄Π°Ρ‚ ΠΊΠ°ΠΊΡ‚ΠΎ Ingress, Ρ‚Π°ΠΊΠ° ΠΈ Egress?

ΠšΡ€Π°Ρ‚ΠΊΠΈΡΡ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π΅ Π΄Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ pod А Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ с pod Π’, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΌΡƒ бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈ изходящо ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° сС настрои egress ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°), Π° pod Π’ трябва Π΄Π° ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° входящо ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ingress ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°).

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ Π² Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π² Π΄Π²Π΅Ρ‚Π΅ посоки.

Ако някой pod-ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ бъдС ΠΈΠ·Π±Ρ€Π°Π½ ΠΎΡ‚ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ egress-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ограничСнията, Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ‚ тяхната Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ†ΠΈΡ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ явно ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ с pod-адрСсат. Ако pod Π½Π΅ Π΅ ΠΈΠ·Π±Ρ€Π°Π½ ΠΎΡ‚ някоя ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, нСговият изходящ (egress) Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

По ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΡΡŠΠ΄Π±Π°Ρ‚Π° Π½Π° pod-Π°-адрСсат, ΠΈΠ·Π±Ρ€Π°Π½ ΠΎΡ‚ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ingress-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Ρ‰Π΅ сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΠΎΡ‚ тяхната Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ†ΠΈΡ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ явно Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ pod-Π°-ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ. Ако pod Π½Π΅ Π΅ ΠΈΠ·Π±Ρ€Π°Π½ ΠΎΡ‚ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, цСлият входящ (ingress) Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π·Π° Π½Π΅Π³ΠΎ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

Π’ΠΈΠΆΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° 'Stateful ΠΈΠ»ΠΈ Stateless' ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

Π›ΠΎΠ³ΠΎΠ²Π΅

ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ΠΎΠ²Π° затруднява опрСдСлянСто Π½Π° Ρ‚ΠΎΠ²Π° Π΄Π°Π»ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ услоТнява Π°Π½Π°Π»ΠΈΠ·Π° Π² областта Π½Π° сигурността.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° към външни услуги

ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π½Π΅ позволяват Π΄Π° сС ΡƒΠΊΠ°Π·Π²Π° пълно Π΄ΠΎΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅ (DNS) Π² сСкции egress. Π’ΠΎΠ·ΠΈ Ρ„Π°ΠΊΡ‚ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ нСудобства ΠΏΡ€ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° към външни адрСсати, ΠΊΠΎΠΈΡ‚ΠΎ нямат фиксиран IP адрСс (ΠΊΠ°ΠΊΡ‚ΠΎ aws.com).

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°

Π‘Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€ΠΈΡ‚Π΅ Ρ‰Π΅ Π²ΠΈ прСдупрСдят ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ Ρ‰Π΅ ΠΎΡ‚ΠΊΠ°ΠΆΠ°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. Kubernetes ΡΡŠΡ‰ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° извСстно Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅. ΠŸΡ€ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Ρ‡Ρ€Π΅Π· kubectl, Kubernetes ΠΌΠΎΠΆΠ΅ Π΄Π° заяви, Ρ‡Π΅ тя Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΠΈ Π΄Π° ΠΎΡ‚ΠΊΠ°ΠΆΠ΅ Π΄Π° я ΠΏΡ€ΠΈΠ΅ΠΌΠ΅. Π’ Π΄Ρ€ΡƒΠ³ΠΈ случаи Kubernetes Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΈ Ρ‰Π΅ я допълни с липсващи Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС видят с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

kubernetes get networkpolicy  -o yaml

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ систСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Kubernetes Π½Π΅ Π΅ Π±Π΅Π·Π³Ρ€Π΅ΡˆΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° пропуснС някои Π²ΠΈΠ΄ΠΎΠ²Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ.

ИзпълнСниС

Kubernetes Π½Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° със ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ самостоятСлно, Π° Π΅ просто API шлюз, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ тСТСстта Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° ΠΏΠΎ-Π΄ΠΎΠ»Π½Π°Ρ‚Π° систСма, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Container Networking Interface (CNI). Π—Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² кластСра Kubernetes Π±Π΅Π· Π½Π°Π·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ CNI Π΅ равносилно Π½Π° създаванС Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€Π° Π±Π΅Π· тяхното послСдващо инсталиранС Π² Π±Ρ€Π°Π½Π΄ΠΌΠ°ΡƒΠ΅Ρ€ΠΈΡ‚Π΅. Π’ΠΈΠ΅ сами трябва Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° подходящ CNI ΠΈΠ»ΠΈ, Π² случаи Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Kubernetes, Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ° (Π‘ списък Π½Π° доставчицитС ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ. β€” Π±Π΅Π». Ρ€Π΅Π΄.), Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ настроят CNI Π·Π° вас.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Kubernetes няма Π΄Π° Π²ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈ, Π°ΠΊΠΎ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π±Π΅Π· ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΏΠΎΠΌΠΎΡ‰Π΅Π½ CNI.

Stateful ΠΈΠ»ΠΈ Stateless?

Всички CNI Kubernetes, с ΠΊΠΎΠΈΡ‚ΠΎ съм сС сблъсквал, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Calico ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Linux conntrack). Π’ΠΎΠ²Π° позволява Π½Π° pod Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Π½ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ TCP ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π±Π΅Π· нСобходимост ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ установяванС. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ ΠΌΠΈ Π΅ извСстно Π·Π° стандарт Π½Π° Kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ (statefulness).

Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π·Π° сигурност

Π•Ρ‚ΠΎ няколко Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° повишаванС Π½Π° СфСктивността Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π·Π° сигурност Π² Kubernetes:

  1. АрхитСктурният ΠΏΠ°Ρ‚ΡŠΡ€Π½ Service Mesh ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° sidecar ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π·Π° осигуряванС Π½Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° тСлСмСтрия ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π°Π΄ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° Π½ΠΈΠ²ΠΎ услуги. ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Istio.
  2. Някои ΠΎΡ‚ доставчицитС CNI Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ…Π° инструмСнтитС си, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° излязат извън ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes.
  3. Tufin Orca осигурява прозрачност ΠΈ автоматизация Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes.

ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ Tufin Orca управлява ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes (ΠΈ слуТи ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° ΡΠΊΡ€ΠΈΠΉΠ½ΡˆΠΎΡ‚ΠΎΠ²Π΅, посочСни ΠΏΠΎ-Π³ΠΎΡ€Π΅).

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π΄ΠΎΠ±ΡŠΡ€ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструмСнти Π·Π° сСгмСнтация Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, Π½ΠΎ Ρ‚Π΅ са ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠΌΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ спСцифики. Бмятам, Ρ‡Π΅ Π·Π°Ρ€Π°Π΄ΠΈ Ρ‚Π°Π·ΠΈ слоТност ΠΌΠ½ΠΎΠ·ΠΈΠ½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ са автоматизация Π½Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ срСдства Π·Π° сСгмСнтация.

Надявам сС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° изясни някои Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈ Π΄Π° Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅.

P.S. ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster