ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄: ΠΠ²ΡΠΎΡΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, Reuven Harrison, ΠΈΠΌΠ° Π½Π°Π΄ 20 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΎΠΏΠΈΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ, Π° Π΄Π½Π΅Ρ Π΅ CTO ΠΈ ΡΡΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π» Π½Π° Tufin, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΠ·Π΄Π°Π²Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ. ΠΠΎΠΊΠ°ΡΠΎ ΡΠΎΠΉ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΠΊΠ°ΡΠΎ Π΄ΠΎΡΡΠ° ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π² ΠΊΠ»ΡΡΡΠ΅Ρ, ΡΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π²ΡΡΠ²Π°, ΡΠ΅ ΡΠ΅ Π½Π΅ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° Π»Π΅ΡΠ½ΠΈ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. Π’ΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» (Π΄ΠΎΡΡΠ° ΠΎΠ±Π΅ΠΌΠ΅Π½) ΠΈΠΌΠ° Π·Π° ΡΠ΅Π» Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ ΠΈ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π°Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ½Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Ρ Kubernetes Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΡΠ΅ΡΠ΅ΡΡΡ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ ΡΠΎΡΡΡΠ΅Ρ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π³ΠΎΠ»ΡΠΌ, ΡΠ΅ Π½ΡΠΊΠΎΠΈ Π½Π°ΡΠΈΡΠ°Ρ ββKubernetes βΠ½ΠΎΠ²Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΠ΅Π½ΡΡΡΠ° Π·Π° Π΄Π°Π½Π½ΠΈβ. ΠΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Kubernetes (ΠΈΠ»ΠΈ k8s) Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ° ΠΊΠ°ΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½Π° ΡΠ°ΡΡ ΠΎΡ Π±ΠΈΠ·Π½Π΅ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π·ΡΠ΅Π»ΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
ΠΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΠΏΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΎΠ·Π°Π΄Π°ΡΠ΅Π½ΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Kubernetes, ΠΈΡΡΠΈΠ½ΡΠΊΠΎΡΠΎ ΠΎΡΠΊΡΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°: ΡΠ°Π·ΡΠ΅ΡΠΈ Π²ΡΠΈΡΠΊΠΎ.
Π’ΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ; ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ Π·Π°ΡΠΈΡΠ½ΠΈ ΡΡΠ΅Π½ΠΈ. Π’ΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΎΠ±Ρ Π²Π°Π½Π΅ Π½ΡΠΊΠΎΠΈ ΠΊΠ»ΠΎΠΏΠΊΠΈ ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ Π·Π° ΠΏΠΎΠ΄ΠΏΠΎΠΌΠ°Π³Π°Π½Π΅ Π½Π° Π·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π² Kubernetes.
ΠΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° Kubernetes Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΠ»ΠΎΠΉ (ΡΡΠ΅ΡΠΈΡΡ Π² OSI ΠΌΠΎΠ΄Π΅Π»Π°). ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½ΡΠΌΠ°Ρ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π·Π°ΡΠΈΡΠ½ΠΈ ΡΡΠ΅Π½ΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° OSI Layer 7 ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠ»Π°Ρ ΠΈ, Π½ΠΎ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠ° ΠΎΡΠΏΡΠ°Π²Π½Π° ΡΠΎΡΠΊΠ°.
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Ρ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ΄Ρ
Π Π°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² Kubernetes ΡΠ΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΡΡ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Kubernetes ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ IP Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅. ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π°Π΄Π°Π²Π°Ρ ΠΏΡΠ°Π²Π° Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π³ΡΡΠΏΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Π³ΡΡΠΏΠΈΡΠ΅ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π² ΠΎΠ±Π»Π°ΠΊΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°.
ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π° 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
: Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π³ΡΡΠΏΠΈΡΠ΅, Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° (ΡΠ΅Π»ΠΈ) - Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ; -
policyTypes
: ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠΎΠ²Π°: Π²Ρ ΠΎΠ΄ ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ - ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ, Π½ΠΎ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ; -
ingress
: ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ - ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ; -
egress
: ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊΡΡ ΠΎΡ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½.
ΠΡΠΈΠΌΠ΅Ρ, Π²Π·Π΅Ρ ΠΎΡ ΡΠ΅Π±ΡΠ°ΠΉΡΠ° Π½Π° 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
, ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ΅ ΡΡΠ»ΠΊΡΠ²Π°, ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
- ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°, ΡΠ΅ ΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π²Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΡΡΠ°Π½Π°. ΠΠΊΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π΅ ΠΏΠΎΡΠΎΡΠ²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠΎΠ²Π°, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅, ΡΠ΅ ΡΠ΅Π»ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½.
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΡΡΠ°Π½Π° ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π²ΠΈΠ½Π°Π³ΠΈ Π³ΠΎ ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ policyTypes
.
Π‘ΠΏΠΎΡΠ΅Π΄ Π³ΠΎΡΠ½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°, Π°ΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ingress
ΠΈ / ΠΈΠ»ΠΈ egress
ΠΏΡΠΎΠΏΡΡΠ½Π°Ρ, ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ ΡΠ΅Π»ΠΈΡ ΡΡΠ°ΡΠΈΠΊ (Π²ΠΈΠΆΡΠ΅ βΠΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅β ΠΏΠΎ-Π΄ΠΎΠ»Ρ).
ΠΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅
ΠΠΊΠΎ Π½Π΅ ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, Kubernetes ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Π»ΠΈΡ ΡΡΠ°ΡΠΈΠΊ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΡΠΈΡΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π΅Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, Π½ΠΎ Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅, ΡΠ΅ Kubernetes ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°. ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΡ Π° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΡΠ° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΡΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π° Kubernetes. Π’Π΅ ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π΅Π΄Π½Π° ΠΎΡ Π΄ΡΡΠ³Π°, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΡΠ° Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° Kubernetes, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΆΠΈΠ²Π΅ΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°. Π Π±Π»ΠΎΠΊΠ° metadata
ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ°:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: my-namespace # <<<
spec:
...
ΠΠΊΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π½Π΅ Π΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΡΠΊΠ°Π·Π°Π½ΠΎ Π² kubectl (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ namespace=default
):
kubectl apply -n my-namespace -f namespace.yaml
ΠΠ· ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ ΠΏΠΎΡΠΎΡΠ΅ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ°, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΊΠΎΡΡΠΎ Π΅ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π½Π°Π²Π΅Π΄Π½ΡΠΆ.
ΠΡΡΠ²ΠΈΡΠ΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ podSelector
Π² ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ pods ΠΎΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΠΊΡΠΌ ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ (ΠΈΠΌΠ° ΠΎΡΠΊΠ°Π· Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ pods ΠΎΡ Π΄ΡΡΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°).
ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, podSelectors Π²ΡΠ² Π²Ρ
ΠΎΠ΄Π½ΠΈ ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·Π±ΠΈΡΠ°Ρ ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΡΠ°ΠΌΠΎ ΠΎΡ ΡΡΡ
Π½ΠΎΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅ Π½Π΅ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ Ρ namespaceSelector
(ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π° βΠ€ΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΠΈ Π³ΡΡΠΏΠΈβ).
ΠΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΠ° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°. ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Ρ Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ ΠΈΠΌΠ΅ Π² Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Ρ Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ ΠΈΠΌΠ΅ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΡΡΠ°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°.
ΠΡΠΎΠ±Π΅Π½ΠΎ ΠΌΠΈ Ρ Π°ΡΠ΅ΡΠ²Π° Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅. Π‘ΡΡΡΠΎΠΈ ΡΠ΅ ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° Ρ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ²Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
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 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ ΠΏΠΎΠ΄ΡΠ·Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ:
podSelector:
matchLabels:
role: db
β¦ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΠΊΡΠΌ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΡΠ½Π°ΡΡΡ. Π’ΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΡΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ:
namespaceSelector:
matchLabels:
project: myproject
ΠΠ΄Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ namespaceSelector
ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ΠΈΡΠ΅ ΠΎΡ Π²Π°Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ Π΅ΡΠΈΠΊΠ΅Ρ. ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΡΠΎ default
ΠΈ kube-system
, ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π΅ΡΠΈΠΊΠ΅Ρ ΠΊΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π°:
kubectl label namespace default namespace=default
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π² ΡΠ°Π·Π΄Π΅Π»Π° metadata
ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ, Π° Π½Π΅ ΠΊΡΠΌ Π΅ΡΠΈΠΊΠ΅ΡΠ°:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default # <<<
spec:
...
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΈ Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° ΡΠ΅ ΡΡΡΡΠΎΡΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΠΈ. ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Ρ Π·Π° ΡΠ΅Π» - Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΠΊΡΠΌ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ - ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π²Ρ
ΠΎΠ΄ΡΡ ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ. Π Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π»ΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π°Ρ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° default
Ρ Π΅ΡΠΈΠΊΠ΅Ρ Ρ ΠΊΠ»ΡΡ 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
Π² ΡΠ°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΎΡΠ²Π°ΡΡ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ²Π΅. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, Π²Ρ
ΠΎΠ΄ΡΡ Π΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ, Π° ΡΠ΅Π»ΡΠ° Π΅ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡ. ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ Π΅ Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΡΠ°, Π° ΡΠ΅Π»ΡΠ° Π΅ Π½Π΅ΠΉΠ½ΠΈΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ.
Π’ΠΎΠ²Π° Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π½Π° Π΄Π²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π°: Ingress β Target; Π¦Π΅Π» β ΠΠ·Π»ΠΈΠ·Π°Π½Π΅.
ΠΠ·Ρ ΠΎΠ΄ ΠΈ 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
ΠΠΎΡΠ»Π΅Π΄Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ to
Π΅ ΠΏΡΠ°Π·Π΅Π½ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈΠ½Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ 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
. Π Π°Π·Π΄Π΅Π»ΡΡ βΠ€ΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π ΠΏΠΎΠ΄ΠΎΠ²Π΅β ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΡΠΎΠ²Π°.
ΠΡΡΠ³ Π²Π°ΡΠΈΠ°Π½Ρ Π΅ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ 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
ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°.
ΠΡΡΠ²ΠΈ ΠΌΠ°Ρ ΠΈ ΡΠ΅Π΄ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°
Π ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ Π·Π°ΡΠΈΡΠ½ΠΈ ΡΡΠ΅Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ (Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΡΠΊΠ°Π·) Π²ΡΡΡ Ρ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ ΠΏΡΡΠ²ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠΎΠΉ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ. Π Kubernetes ΡΠ΅Π΄ΡΡ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½ΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π²ΡΡΠΊΠ° Π³ΡΡΠΏΠ°, Π·Π°ΡΠ΅Π³Π½Π°ΡΠ° ΠΎΡ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ ΡΡΡ , ΡΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠ° ΡΠΏΠΎΡΠ΅Π΄ Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΡΡΠ° (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ) Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π³ΠΎ ΠΈΠ·Π±ΡΠ°Π»ΠΈ. ΠΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΎΡΡΠ°Π²Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅.
ΠΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ (βΠΡΠΊΠ°Π·β)
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡΠΊΠ°Π·Π²Π°Ρ Π²ΡΠ΅ΠΊΠΈ ΡΡΠ°ΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½.
Π Kubernetes Π½ΡΠΌΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° ΠΎΡΠΊΠ°Π·, ΠΎΠ±Π°ΡΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π΅ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° (ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅Π»Π½Π°) ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠ΅Π· ΠΈΠ·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ°Π·Π½Π° Π³ΡΡΠΏΠ° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ (ingress):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
Π’Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΈΠ·Π±ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° ΠΈ ΠΎΡΡΠ°Π²Ρ Π²Ρ
ΠΎΠ΄Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½, ΠΊΠ°ΡΠΎ ΠΎΡΠΊΠ°Π·Π²Π° ΡΠ΅Π»ΠΈΡ Π²Ρ
ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ.
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΎΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress
ΠΠΎΠ»Ρ, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΎΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΈ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ pods Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΎΡΠΊΠ°Π· Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π°).
Π Π°Π·ΡΠ΅ΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ (Any-Any-Any-Allow)
ΠΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° ΠΎΡΠΊΠ°Π· ΠΏΠΎ-Π³ΠΎΡΠ΅ Ρ ΠΏΡΠ°Π·Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ingress
:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: default
spec:
podSelector: {}
ingress: # <<<
- {} # <<<
policyTypes:
- Ingress
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° (ΠΈ Π²ΡΠΈΡΠΊΠΈ IP) ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° default
. Π’ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΎΠ±Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π·Π° Π΄Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ΅ΡΠ½Π΅Π½ΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΡΠ°ΠΌΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΠΎΠ΄Ρ (app:balance
) Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° default
:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-to-balance
namespace: default
spec:
podSelector:
matchLabels:
app: balance
ingress:
- {}
policyTypes:
- Ingress
Π‘Π»Π΅Π΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Π»ΠΈΡ Π²Ρ
ΠΎΠ΄ΡΡ ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠ΅ΠΊΠΈ IP ΠΈΠ·Π²ΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ°:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
ingress:
- {}
egress:
- {}
policyTypes:
- Ingress
- Egress
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ Π½Π° ΡΡΠΈ Π½ΠΈΠ²Π°; Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ pod ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π³ΠΎ Π·Π°ΡΡΠ³Π°Ρ:
1. Π ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° from
ΠΈ to
ΠΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠΈ ΡΠΈΠΏΠ° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ (Π²ΡΠΈΡΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ ΠΠΠ):
-
namespaceSelector
β ΠΈΠ·Π±ΠΈΡΠ° ΡΡΠ»ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°; -
podSelector
β ΠΈΠ·Π±ΠΈΡΠ° ΡΡΡΡΠ»ΠΊΠΈ; -
ipBlock
β ΠΈΠ·Π±ΠΈΡΠ° ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ°.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π±ΡΠΎΡΡ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ (Π΄ΠΎΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ) Π² ΠΏΠΎΠ΄ΡΠ΅ΠΊΡΠΈΠΈΡΠ΅ from
/to
Π½Π΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π· Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ.
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
ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ to
(ΡΡΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΡΡΠ΅Π· Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΡ):
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. Π Π°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ
ΠΠΎ ΠΏΡΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈΠΌ ΠΈΠΌΠ° Π΅Π΄Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΠ΅ΡΠΎ policyTypes
(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
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π²ΡΠΈΡΠΊΠΈ pods Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° default
ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΠ΄Ρ postgres
Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° database
. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ postgres
ΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° default
?
Π€ΠΈΠ»ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° ΠΈ Π³ΡΡΠΏΠΈ
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
ΠΠ°ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ»ΠΊΡΠ²Π° ΠΊΠ°ΡΠΎ Π Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΠΠ?
ΠΠΎΠ»Ρ, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ podSelector
Π½Π΅ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΡΠΈΡΠ΅. Π YAML ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ podSelector
ΠΈ ΡΡΠΎΠΈ ΠΏΡΠ΅Π΄ Π½Π΅Π³ΠΎ namespaceSelector
ΠΏΡΠ΅ΠΏΡΠ°ΡΠ° ΠΊΡΠΌ ΡΡΡΠΈΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ Π.
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ podSelector
ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° Π½ΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ namespaceSelector
ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ.
ΠΠ° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΏΡΡΠ»ΠΈ ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π΅ΡΠΈΠΊΠ΅Ρ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΠΏΡΠ°Π·Π½ΠΎ 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
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΡΠ΅ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Ρ Ρ I
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π° Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±Π΅ΠΊΡΠΈ (Ρ
ΠΎΡΡΠΎΠ²Π΅, ΠΌΡΠ΅ΠΆΠΈ, Π³ΡΡΠΏΠΈ) ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ΅Π· Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ ΠΠΠ. Π‘Π»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ, Π°ΠΊΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΠ²ΠΏΠ°Π΄Π° Host_1
ΠΠΠ Host_2
:
| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A | HTTPS | Allow |
| Host_2 | | | |
| ----------------------------------------|
ΠΠ°ΠΏΡΠΎΡΠΈΠ², Π² Kubernetes ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π² podSelector
ΠΈΠ»ΠΈ namespaceSelector
ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎ Π. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΠΈ Π΄Π²Π°ΡΠ° Π΅ΡΠΈΠΊΠ΅ΡΠ°, role=db
Π version=v2
:
podSelector:
matchLabels:
role: db
version: v2
Π‘ΡΡΠ°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π°ΠΆΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ: ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°.
ΠΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ (IPBlocks)
ΠΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π½ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ VLAN, IP Π°Π΄ΡΠ΅ΡΠΈ ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ, Π·Π° Π΄Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Ρ ΠΌΡΠ΅ΠΆΠ°.
Π Kubernetes IP Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Ρ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΡΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π° Π² ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ.
ΠΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ (ipBlocks
) ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ
ΠΎΠ΄ΡΡΠΈ (Π²Ρ
ΠΎΠ΄ΡΡΠΈ) ΠΈΠ»ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡΠΈ (ΠΈΠ·Ρ
ΠΎΠ΄ΡΡΠΈ) Π²ΡΠ½ΡΠ½ΠΈ (ΡΠ΅Π²Π΅Ρ-ΡΠ³) Π²ΡΡΠ·ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ΅ ΠΎΡΠ²Π°ΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΎΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° default
Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Google DNS ΡΡΠ»ΡΠ³Π°:
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
ΠΡΠ°Π·Π½ΠΈΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ Π² ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ·Π½Π°ΡΠ°Π²Π° βΠΈΠ·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°β.
Π’Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ ΡΠ°ΠΌΠΎ Π΄ΠΎ 8.8.8.8; Π΄ΠΎΡΡΡΠΏΡΡ Π΄ΠΎ Π²ΡΠ΅ΠΊΠΈ Π΄ΡΡΠ³ IP Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½. Π’Π°ΠΊΠ° ΡΠ΅ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π»ΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° DNS ΡΡΠ»ΡΠ³Π° Π½Π° Kubernetes. ΠΠΊΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅, ΠΏΠΎΡΠΎΡΠ΅ΡΠ΅ ΡΠΎΠ²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ipBlocks
ΠΈ podSelectors
ΡΠ° Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°ΡΠΈ ΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ Π½Π° ΠΏΠΎΠ΄Ρ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ipBlocks
. Π§ΡΠ΅Π· ΠΏΠΎΡΠΎΡΠ²Π°Π½Π΅ Π²ΡΡΡΠ΅ΡΠ½ΠΈ IP ΠΏΠΎΠ΄Ρ, Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ/ΠΎΡ pods Ρ ΡΠ΅Π·ΠΈ Π°Π΄ΡΠ΅ΡΠΈ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π½ΡΠΌΠ° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΎΠΉ IP Π°Π΄ΡΠ΅Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅.
ΠΠ°ΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π²ΠΊΠ»ΡΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠΈΡΠΊΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅:
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 Π΅ 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
ΠΠΎΡΡΠΎΠ²Π΅ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ΅ ΡΠ»ΡΡΠ°Ρ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΡ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π½Π΅ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ Π² ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΈ Π΄Π° ΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠ΅ΡΡΡΠΈΠΊΡΠΈΠ²Π½ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π² Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΠ²Π΅:
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
Π²Π°ΠΆΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π² Π±Π»ΠΎΠΊΠ° to
ΠΈΠ»ΠΈ from
, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°. ΠΠ° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ, ΡΠ°Π·Π΄Π΅Π»Π΅ΡΠ΅ ingress
ΠΈΠ»ΠΈ egress
Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π° Ρ to
ΠΈΠ»ΠΈ 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, Π° Π½Π΅ ΡΠ΅ΡΠ²ΠΈΠ·Π½ΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ (ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ).
ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π»ΠΈ ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³ΠΈ?
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π² Kubernetes ΠΈΠΌΠ°Ρ Π΄ΠΎΡΡΡΠΏ Π΅Π΄ΠΈΠ½ Π΄ΠΎ Π΄ΡΡΠ³ ΡΡΠ΅Π· ΡΡΠ»ΡΠ³Π° β Π²ΠΈΡΡΡΠ°Π»Π΅Π½ Π±Π°Π»Π°Π½ΡΡΠΎΡ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Ρ ΡΡΠ»ΡΠ³Π°ΡΠ°. ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΠΈ ΠΌΠΈΡΠ»ΠΈΡΠ΅, ΡΠ΅ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠ°. ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΡΠ°Π±ΠΎΡΡΡ Π½Π° ΠΏΠΎΠ΄ ΠΏΠΎΡΡΠΎΠ²Π΅, Π° Π½Π΅ Π½Π° ΡΠ΅ΡΠ²ΠΈΠ·Π½ΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π΄Π°Π΄Π΅Π½Π° ΡΡΠ»ΡΠ³Π° ΡΠ»ΡΡΠ° ΠΏΠΎΡΡ 80, Π½ΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ ΠΏΠΎΡΡ 8080 Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΠΎΡΠ½ΠΎ 8080 Π² ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°.
Π’Π°ΠΊΡΠ² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½: Π°ΠΊΠΎ Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° (ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄ΡΠ»ΡΡΠ²Π°Ρ) ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ.
ΠΠΎΠ² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Service Mesh (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΈΠΆΡΠ΅ Π·Π° Istio ΠΏΠΎ-Π΄ΠΎΠ»Ρ - ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π².) Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈ Π΅ Π΄Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΡΠ΅ Ingress ΠΈ Egress?
ΠΡΠ°ΡΠΊΠΈΡΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π΅ Π΄Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ΄ A Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ° Ρ pod B, ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΡ Π±ΡΠ΄Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠ° Π²ΡΡΠ·ΠΊΠ° (Π·Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°), Π° pod B ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠ° Π²ΡΡΠ·ΠΊΠ° ( Π·Π° ΡΠΎΠ²Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° Π²Ρ ΠΎΠ΄).
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΎΠ±Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π·Π° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ Π² Π΅Π΄Π½Π°ΡΠ° ΠΈΠ»ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ.
ΠΠΊΠΎ Π½ΡΠΊΠΎΠΈ ΠΏΠΎΠ΄-ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅-ΠΏΠΎΠ»ΠΈΡΠΈΡΠΈ, Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΎΡ ΡΡΡ Π½Π°ΡΠ° Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΡ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π³ΡΡΠΏΠ°ΡΠ° -ΠΊΡΠΌ Π°Π΄ΡΠ΅ΡΠ°ΡΠ°. ΠΠΊΠΎ Π³ΡΡΠΏΠ° Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΎΡ Π½ΠΈΠΊΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡΡ (ΠΈΠ·Ρ ΠΎΠ΄ΡΡ) ΡΡΠ°ΡΠΈΠΊ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ Π΅ ΡΡΠ΄Π±Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°Π΄ΡΠ΅ΡΡΡ, ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π°Π²Π»ΠΈΠ·Π°Π½Π΅-ΠΏΠΎΠ»ΠΈΡΠΈΡΠΈ, ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΎΡ ΡΡΡ Π½Π°ΡΠ° Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΡ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΡΠ°ΡΠΈΠΊ ΠΎΡ Π³ΡΡΠΏΠ°ΡΠ° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ. ΠΠΊΠΎ Π³ΡΡΠΏΠ° Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΎΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΡΠ΅Π»ΠΈΡΡ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ Π·Π° Π½Π΅Ρ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠΈΠΆΡΠ΅ Stateful ΠΈΠ»ΠΈ Stateless ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
ΠΠ½Π΅Π²Π½ΠΈΡΠΈ
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° Kubernetes Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Ρ ΡΡΠ°ΡΠΈΠΊ. Π’ΠΎΠ²Π° Π·Π°ΡΡΡΠ΄Π½ΡΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°.
ΠΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° Kubernetes Π½Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΎ ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ (DNS) Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ. Π’ΠΎΠ·ΠΈ ΡΠ°ΠΊΡ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ IP Π°Π΄ΡΠ΅Ρ (ΠΊΠ°ΡΠΎ aws.com).
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°
ΠΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π½ΠΈ ΡΠ΅ Π²ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ°Ρ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ°Ρ Π³ΡΠ΅ΡΠ½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°. Kubernetes ΡΡΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°. ΠΠΎΠ³Π°ΡΠΎ Π·Π°Π΄Π°Π²Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΡΠ΅Π· kubectl, Kubernetes ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°, ΡΠ΅ ΡΡ Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΈ Π΄Π° ΠΎΡΠΊΠ°ΠΆΠ΅ Π΄Π° Ρ ΠΏΡΠΈΠ΅ΠΌΠ΅. Π Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ Kubernetes ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ Ρ ΠΏΠΎΠΏΡΠ»Π½ΠΈ Ρ Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ. Π’Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
kubernetes get networkpolicy <policy-name> -o yaml
ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Kubernetes Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠΎΠ³ΡΠ΅ΡΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠΏΡΡΠ½Π΅ Π½ΡΠΊΠΎΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
Kubernetes Π½Π΅ ΠΏΡΠΈΠ»Π°Π³Π° ΡΠ°ΠΌ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π° Π΅ ΠΏΡΠΎΡΡΠΎ API ΡΠ»ΡΠ·, ΠΊΠΎΠΉΡΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΠ° ΡΠ΅ΠΆΠ΅ΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, Π½Π°ΡΠ΅ΡΠ΅Π½Π° Container Networking Interface (CNI). ΠΠ°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes Π±Π΅Π· ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ CNI Π΅ ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° ΡΡΡΠ²ΡΡ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π°, Π±Π΅Π· ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π½Π° Π·Π°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π½ΠΈ. ΠΡ Π²Π°Ρ Π·Π°Π²ΠΈΡΠΈ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ΅Π½ CNI ΠΈΠ»ΠΈ, Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Kubernetes, Ρ
ΠΎΡΡΠ²Π°Π½ Π² ΠΎΠ±Π»Π°ΠΊΠ° (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ
ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Kubernetes Π½ΡΠΌΠ° Π΄Π° Π²ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈ, Π°ΠΊΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π±Π΅Π· ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ΅Π½ CNI.
ΠΡΡΠΆΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±Π΅Π· Π³ΡΠ°ΠΆΠ΄Π°Π½ΡΡΠ²ΠΎ?
ΠΡΠΈΡΠΊΠΈ CNI Π½Π° Kubernetes, ΠΊΠΎΠΈΡΠΎ ΡΡΠΌ ΡΡΠ΅ΡΠ°Π», ΡΠ° ΡΡΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Calico ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Linux conntrack). Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π³ΡΡΠΏΠ°ΡΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π·Π° TCP Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ°Π»Π°, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° Ρ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° ΠΎΡΠ½ΠΎΠ²ΠΎ. ΠΠ΅ ΠΌΠΈ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΎΠ±Π°ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡ Π½Π° Kubernetes, ΠΊΠΎΠΉΡΠΎ Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ° Π΄ΡΡΠΆΠ°Π²Π½ΠΎΡΡ.
Π Π°Π·ΡΠΈΡΠ΅Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ
ΠΡΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π² Kubernetes:
- ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° Service Mesh ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Ρ ΠΊΠΎΡ, Π·Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΠ»ΡΠ³Π°. ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ
ΠΡΡΠΈΠΎ . - ΠΡΠΊΠΎΠΈ ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈΡΠ΅ Π½Π° CNI ΡΠ°Π·ΡΠΈΡΠΈΡ Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Π·Π° Π΄Π° Π½Π°Π΄Ρ Π²ΡΡΠ»ΡΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes.
-
Π’ΡΡΠΈΠ½ ΠΊΠΎΡΠ°ΡΠΊΠ° ΠΡΠΈΠ³ΡΡΡΠ²Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes.
ΠΠ°ΠΊΠ΅ΡΡΡ Tufin Orca ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes (ΠΈ Π΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° Π΅ΠΊΡΠ°Π½Π½ΠΈΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅).
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
-
ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΈΠ·Π³ΠΎΡΠ²Π΅Π½ΠΈ ΠΎΡ ΠΡ ΠΌΠ΅Ρ ΠΠ»ΠΏ ΠΠ°Π»ΠΊΠ°Π½ ΠΎΡ GKE ; -
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ΅Π±ΡΠ°ΠΉΡ Π½Π° Kubernetes ; -
Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΌΠΎΠ΄Π΅Π» Kubernetes ; -
Π‘ΠΊΡΠΈΠΏΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ .
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΄ΠΎΠ±ΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, Π½ΠΎ ΡΠ΅ Π½Π΅ ΡΠ° ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΈ ΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΠΎΡΡΠΈ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ Π²ΡΡΠ²Π°ΠΌ, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ° Π±ΡΠ³ΠΎΠ²ΠΈ. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅.
ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΈΠ·ΡΡΠ½ΠΈΡΠ΅ Π½ΡΠΊΠΎΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΠΈ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΅ΡΠ½Π΅ΡΠ΅.
PS ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- βΠΠ°Π·Π°Π΄ ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ Ρ Istioβ:
ΡΠ°ΡΡ 1 (Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ) ,ΡΠ°ΡΡ 2 (ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°) ,ΡΠ°ΡΡ 3 (ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ) ; - βΠΠ»ΡΡΡΡΠΎΠ²Π°Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ° Π² Kubernetesβ:
ΡΠ°ΡΡΠΈ 1 ΠΈ 2 (ΠΌΡΠ΅ΠΆΠΎΠ² ΠΌΠΎΠ΄Π΅Π», ΠΌΡΠ΅ΠΆΠΈ Ρ Π½Π°ΡΠ»Π°Π³Π²Π°Π½Π΅) ,ΡΠ°ΡΡ 3 (ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΠΊ) ; - Β«
Docker ΠΈ Kubernetes Π² ΡΡΠ΅Π΄ΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Β»; - Β«
9 Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° Kubernetes Β»; - Β«
11 Π½Π°ΡΠΈΠ½Π° Π΄Π° (Π½Π΅) Π±ΡΠ΄Π΅ΡΠ΅ Ρ Π°ΠΊΠ½Π°ΡΠΈ Π² Kubernetes ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com