
ΠΡΠΈΠΌ. ΠΏΡΠ΅Π².: ΠΠ²ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° β 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, Π° Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Tufin Orca, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Π½Π° Π°Π²ΡΠΎΡΠ° Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ, ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ° Π² ΠΊΡΠ°Ρ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°.
ΠΠ° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ ΠΏΠΎ YAML. Π’ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΡΡΡΠΏΠΈΡΠ΅ (Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ, Π° Π½Π΅ Ρ ΡΠ°Π±ΡΠ»Π°ΡΠΈΡ). ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΎΡΡΡΡΠΏ ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠΈΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΎΡΡΡΡΠΏ Π½Π°Π΄ Π½Π΅Π³ΠΎ. ΠΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΡΠΈΡΠ΅, Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΠ° Π²ΡΠ² Π²ΠΈΠ΄Π° ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΎΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° YAML, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ , Π·Π° Π΄Π° Ρ ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°:
kubectl create -f policy.yamlΠ‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π² Kubernetes Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ΡΠΈΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°:
-
podSelector: ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ pod-ΠΎΠ²Π΅ΡΠ΅, Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° (ΡΠ΅Π»ΠΈΡΠ΅) β Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½; -
policyTypes: ΡΠΊΠ°Π·Π²Π° ΠΊΠΎΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠ°Π·ΠΈ: ingress ΠΈ/ΠΈΠ»ΠΈ egress β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½, Π½ΠΎ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° Π³ΠΎ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ ΡΡΠ½ΠΎ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ; -
ingress: ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ Π² ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ pod-ΠΎΠ²Π΅ β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½; -
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 

ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΠΈΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ. Π‘Π°ΠΌΠΎ 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, ΠΊΠ°ΡΠΎ 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 

Π Π°Π·Π΄Π΅Π» ingress Π² ΡΠ°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΎΡΠ²Π°ΡΡ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ podβΠΎΠ²Π΅. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ingress Π΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ, Π° ΡΠ΅Π»ΡΠ° Π΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΡ Π°Π΄ΡΠ΅ΡΠ°Ρ. ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ egress Π΅ Π°Π΄ΡΠ΅ΡΠ°Ρ, Π° ΡΠ΅Π»ΡΠ° Π΅ Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ.

Π’ΠΎΠ²Π° Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π½Π° Π΄Π²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π°: 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 
ΠΠΎΠΆΠ΅ Π΄Π° Ρ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΡΠ΅, ΠΎΡΠ²Π°ΡΡΠΉΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° 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 
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΊΡΠΌ β Π΅ ΠΏΡΠ°Π·Π΅Π½ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΊΠΎΡΠ²Π΅Π½ΠΎ ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ 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 
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 
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 ΡΠ΅Π΄ΡΡ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½ΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π΅ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ, ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ podβΠΎΠ²Π΅ΡΠ΅ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π²ΡΠ΅ΠΊΠΈ pod, Π·Π°ΡΠ΅Π³Π½Π°Ρ ΠΎΡ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ ΡΡΡ , ΡΡΠ°Π²Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΡΡΠ° (Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΠΠ) Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π³ΠΎ ΠΈΠ·Π±ΠΈΡΠ°Ρ. PodβΠΎΠ²Π΅ΡΠ΅, Π½Π΅ Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΎΡΡΠ°Π²Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅.
ΠΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ (βΠΠ°Π±ΡΠ°Π½ΠΈβ)
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΠ΅ΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°Π±ΡΠ°Π½ΡΠ²Π°Ρ Π²ΡΡΠΊΠ°ΠΊΡΠ² ΡΡΠ°ΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π΅ ΡΠ²Π½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½.
Π Kubernetes Π½ΡΠΌΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ βΠ·Π°Π±ΡΠ°Π½ΡΠ²Π°ΠΌβ (deny),ΠΎΠ±Π°ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π΅ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°Ρ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° (ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΡΠ°) ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΈΠ·Π±ΠΈΡΠ°ΡΠ° ΠΏΡΠ°Π·Π½Π° Π³ΡΡΠΏΠ° podβΠΎΠ²Π΅-ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ (ingress):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress 
Π’Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ pod'ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅ ΠΈ ΠΎΡΡΠ°Π²Ρ ingress Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½, Π·Π°Π±ΡΠ°Π½ΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅Π»ΠΈΡ Π²Ρ
ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ.
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΎΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress 
ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΡΠΈ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ pod'ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅, ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π½Π°Π΄ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅Π΄ΠΈ Π·Π°Π±ΡΠ°Π½ΡΠ²Π°ΡΠΎΡΠΎ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΠ΅ΡΠ°).
Π Π°Π·ΡΠ΅ΡΠΈ Π²ΡΠΈΡΠΊΠΎ (Any-Any-Any-Allow)
ΠΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° βΠ Π°Π·ΡΠ΅ΡΠΈ Π²ΡΠΈΡΠΊΠΎβ, ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π·Π°Π±ΡΠ°Π½ΠΈΡΠ΅Π»Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Ρ ΠΏΡΠ°Π·Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ingress:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: default
spec:
podSelector: {}
ingress: # <<<
- {} # <<<
policyTypes:
- Ingress 
Π’Ρ ΠΎΡΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ 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 
Π‘Π»Π΅Π΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π° ΡΠ΅Π»ΠΈΡ Π²Ρ
ΠΎΠ΄ΡΡ (ingress) ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ (egress) ΡΡΠ°ΡΠΈΠΊ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ IP ΠΈΠ·Π²ΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ°:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
ingress:
- {}
egress:
- {}
policyTypes:
- Ingress
- Egress 

ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ Π½Π° ΡΡΠΈ Π½ΠΈΠ²Π°; ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ 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 
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 
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 
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π²ΡΠΈΡΠΊΠΈ 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
ΠΠ°ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ»ΠΊΡΠ²Π° ΠΊΠ°ΡΠΎ Π Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΠΠ? 
Π½Π΅ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΡΠΈΡΠ΅. Π 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 
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½ΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ Π
ΠΡΠ°Π²ΠΈΠ»Π° Π·Π° Π·Π°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π½ΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±Π΅ΠΊΡΠΈ (Ρ
ΠΎΡΡΠΎΠ²Π΅, ΠΌΡΠ΅ΠΆΠΈ, Π³ΡΡΠΏΠΈ) ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ΅Π· Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ. Π‘Π»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΅ ΡΡΠ°Π±ΠΎΡΠΈ, Π°ΠΊΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΠ²ΠΏΠ°Π΄Π° Ρ 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 
ΠΡΠ°Π·Π΅Π½ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π½Π° 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 
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΡΠ°ΠΌΠΎ Π΄ΠΎ Π²ΡΠ½ΡΠ½ΠΈ 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 
ΠΠΎΡΡΠΎΠ²Π΅ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ
ΠΠ±ΡΡΠ½ΠΎ 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 
ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡΡ 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 
Π Π°Π±ΠΎΡΠ° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
- ΠΠΊΠΎ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠΎΠΏΡΡΠ½Π΅ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΡΠ° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ (
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:
- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈΡΡ ΠΏΠ°ΡΡΡΠ½ Service Mesh ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π°Π΄ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΠ»ΡΠ³ΠΈ. ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ .
- ΠΡΠΊΠΎΠΈ ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈΡΠ΅ CNI ΡΠ°Π·ΡΠΈΡΠΈΡ Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΈΠ·Π»ΡΠ·Π°Ρ ΠΈΠ·Π²ΡΠ½ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes.
- ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes.
ΠΠ°ΠΊΠ΅ΡΡΡ Tufin Orca ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes (ΠΈ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΡΠΊΡΠΈΠΉΠ½ΡΠΎΡΠΎΠ²Π΅, ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅).
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
- ;
- ;
- ;
- .
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΄ΠΎΠ±ΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, Π½ΠΎ ΡΠ΅ ΡΠ° ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΡΡΡΠ΄Π½ΠΈ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ. Π‘ΠΌΡΡΠ°ΠΌ, ΡΠ΅ Π·Π°ΡΠ°Π΄ΠΈ ΡΠ°Π·ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ ΠΌΠ½ΠΎΠ·ΠΈΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΈΠ·ΡΡΠ½ΠΈ Π½ΡΠΊΠΎΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΠΈ Π΄Π° ΡΠ΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, Ρ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΡΠ΅.
P.S. ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«ΠΠ°Π·Π°Π΄ ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ Ρ IstioΒ»: , , ;
- Β«ΠΠ»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π² KubernetesΒ»: , ;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
