ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄.: ΠΠ²ΡΠΎΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, Π Π΅ΡΠ²Π΅Π½ Π₯Π°ΡΠΈΡΠΎΠ½, ΠΈΠΌΠ° Π½Π°Π΄ 20 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈΡΠΊΡΡΡΠ²ΠΎ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ, Π° Π΄Π΅Π½Π΅Ρ Π΅ CTO ΠΈ ΠΊΠΎ-ΠΎΡΠ½ΠΎΠ²Π°Ρ Π½Π° Tufin, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π²Π° ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ. ΠΠ°ΠΊΠΎ ΡΠΎΡ Π³ΠΈ Π³Π»Π΅Π΄Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΡ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΌΠΎΡΠ½Π° Π°Π»Π°ΡΠΊΠ° Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ, ΡΠΎΡ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π²Π΅ΡΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΠΈΠ΅ Π½Π΅ ΡΠ΅ ΡΠΎΠ»ΠΊΡ Π»Π΅ΡΠ½ΠΈ Π·Π° ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°. ΠΠ²ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π» (ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΎΠ±Π΅ΠΌΠ΅Π½) Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ Π΄Π° ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠ²Π΅ΡΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΡΠ°Π»ΠΈΡΡΠΈΡΠ΅ Π·Π° ΠΎΠ²Π° ΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΈ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΈ ΡΠΎΠ·Π΄Π°Π΄Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ΅Π½Π΅Ρ, ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Π°Ρ Kubernetes Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠΎΡ Π·Π° ΠΎΠ²ΠΎΡ ΡΠΎΡΡΠ²Π΅Ρ Π΅ ΡΠΎΠ»ΠΊΡ Π³ΠΎΠ»Π΅ΠΌ ΡΡΠΎ Π½Π΅ΠΊΠΎΠΈ Π³ΠΎ Π½Π°ΡΠ΅ΠΊΡΠ²Π°Π°Ρ Kubernetes βΠ½ΠΎΠ²ΠΈΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠ΅Π½ΡΠ°ΡΠΎΡ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈβ. ΠΠΎΡΡΠ΅ΠΏΠ΅Π½ΠΎ, Kubernetes (ΠΈΠ»ΠΈ k8s) ΠΏΠΎΡΠ½ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΠ΅ΡΡΠ΅ΠΏΠΈΡΠ° ΠΊΠ°ΠΊΠΎ ΠΊΡΠΈΡΠΈΡΠ΅Π½ Π΄Π΅Π» ΠΎΠ΄ Π±ΠΈΠ·Π½ΠΈΡΠΎΡ, ΠΊΠΎΡ Π±Π°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° Π·ΡΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΠΌΡΠ΅ΠΆΠ½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ.
ΠΠ° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π·Π±ΡΠ½Π΅ΡΠΈ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΎ Kubernetes, Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΎΡΠΎ ΠΎΡΠΊΡΠΈΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°: Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΓ¨.
ΠΠ²ΠΎΡ Π²ΠΎΠ΄ΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π²Π½Π°ΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ; ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠΈΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ ΠΎΠ΄ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ Π·Π°ΡΡΠΈΡΠ½ΠΈ ΡΠΈΠ΄ΠΎΠ²ΠΈ. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΎΠΏΡΠ°ΡΠΈ Π½Π΅ΠΊΠΎΠΈ ΡΡΠ°ΠΏΠΈΡΠΈ ΠΈ ΡΠ΅ Π΄Π°Π΄Π΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΠΊΠΈ Π·Π° Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π²ΠΎ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Kubernetes.
ΠΡΠ΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΡ Π·Π° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΠΎΡ ΡΠ»ΠΎΡ (ΡΡΠ΅ΡΠΈΠΎΡ Π²ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ OSI). ΠΠ° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π°Π°Ρ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅ Π·Π°ΡΡΠΈΡΠ½ΠΈ ΡΠΈΠ΄ΠΎΠ²ΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° OSI Layer 7 ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ΡΠΎ Π·Π°ΠΊΠ°Π½ΠΈ, Π½ΠΎ ΡΠΈΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠ½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ ΡΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠ° ΠΏΠΎΡΠ΅ΡΠ½Π° ΡΠΎΡΠΊΠ°.
ΠΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π³ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π°Ρ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅
ΠΠ±Π΅ΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π²ΠΎ Kubernetes ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° Π½ΠΈΠ· ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ, ΠΊΠΎΠΈ ΡΠ΅ ΡΠΎΡΡΠΎΡΠ°Ρ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Kubernetes ΠΌΡ Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π° Π½Π° ΡΠ΅ΠΊΠΎΡ pod 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
(ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄.: ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΠ»ΠΈΡΠ½ΠΈ, Π΅ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½Π° Π½Π΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠ½ΠΈ Π°Π»Π°ΡΠΊΠΈ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅Ρ, ΡΡΠΊΡ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π’ΡΡΠΈΠ½ ΠΡΠΊΠ°, ΠΊΠΎΡΠ° ΡΠ° ΡΠ°Π·Π²ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° Π°Π²ΡΠΎΡΠΎΡ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΠΈ ΠΊΠΎΡΠ° Π΅ ΡΠΏΠΎΠΌΠ½Π°ΡΠ° Π½Π° ΠΊΡΠ°ΡΠΎΡ ΠΎΠ΄ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΎΡ.)
ΠΠ° Π΄Π° ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΡΠΎΠΏΡΡΠ²Π΅Π½Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΡΠ΅ Π²ΠΈ ΡΡΠ΅Π±Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ Π½Π° YAML. ΠΠ²ΠΎΡ ΡΠ°Π·ΠΈΠΊ ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° Π²ΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ (Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΡΠΎ ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ° Π½Π°ΠΌΠ΅ΡΡΠΎ ΡΠΎ ΡΠ°Π·ΠΈΡΠΈΡΠ°). ΠΠΎΠ²Π»Π΅ΡΠ΅Π½ΠΈΠΎΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠΏΠ°ΡΠ° Π½Π° Π½Π°ΡΠ±Π»ΠΈΡΠΊΠΈΠΎΡ Π²ΠΎΠ²Π»Π΅ΡΠ΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π°Π΄ Π½Π΅Π³ΠΎ. ΠΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ΄ ΡΠΏΠΈΡΠΎΠΊΠΎΡ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° ΡΠΎ ΡΡΡΠΈΡΠΊΠ°, ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΠ° ΠΈΠΌΠ°Π°Ρ ΡΠΎΡΠΌΠ°ΡΠ° ΠΊΠ»ΡΡ-Π²ΡΠ΅Π΄Π½ΠΎΡΡ.
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ° ΠΎΠΏΠΈΡΠ°Π²ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π²ΠΎ YAML, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅
kubectl create -f policy.yaml
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΠ΅ΡΠΈΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ:
-
podSelector
: Π³ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅ Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΠ΄ ΠΎΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° (ΡΠ΅Π»ΠΈ) - Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ; -
policyTypes
: ΠΎΠ·Π½Π°ΡΡΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ²Π°: Π²Π»Π΅Π· ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ·Π»Π΅Π· - ΠΈΠ·Π±ΠΎΡΠ΅Π½, Π½ΠΎ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ° Π²ΠΎ ΡΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ; -
ingress
: Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π΄ΠΎ ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ Π·Π° ΡΠ΅Π» - ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½; -
egress
: Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ΠΏΠΎΡΠ΄ΠΎΠ²Π΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΎΠ΄ ΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ° Π΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½.
ΠΡΠΈΠΌΠ΅Ρ Π·Π΅ΠΌΠ΅Π½ ΠΎΠ΄ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ (ΡΠ°Ρ Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² 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, ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΆΠΈΠ²Π΅Π°Ρ Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ. ΠΠΎ Π±Π»ΠΎΠΊΠΎΡ 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
Π²ΠΎ ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ°Ρ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ ΠΎΠ΄ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΠΊΠΎΡ ΠΌΡ ΠΏΡΠΈΠΏΠ°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° (Π½Π΅ΠΌΠ° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΌΠ΅ΡΡΠ°ΡΠ° ΠΎΠ΄ Π΄ΡΡΠ³ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ).
Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, 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 ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ ΠΌΠ΅ΡΡΠ½ΠΊΠΈΠ½Π° ΠΊΠΎΠΈ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°Π°Ρ:
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
Π²ΠΎ ΠΎΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, Π³ΠΎ ΠΎΡΠ²ΠΎΡΠ° Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π΄ΠΎ ΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ°. Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, Π²Π»Π΅Π·ΠΎΡ Π΅ ΠΈΠ·Π²ΠΎΡΠΎΡ, Π° ΡΠ΅Π»ΡΠ° Π΅ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΠ°. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΈΠ·Π»Π΅Π·ΠΎΡ Π΅ Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡΠ°ΡΠ° ΠΈ ΡΠ΅Π»ΡΠ° Π΅ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡ.
ΠΠ²Π° Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π½Π° Π΄Π²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π·Π°ΡΡΠΈΡΠ΅Π½ ΡΠΈΠ΄: ΠΠ»Π΅Π· β Π¦Π΅Π»; Π¦Π΅Π» β ΠΠ·Π»Π΅Π·.
ΠΠ·Π»Π΅Π· ΠΈ 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
Π³ΠΈ ΠΈΠ·Π±ΠΈΡΠ° ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ.
ΠΡΠ² Π½Π°ΡΠΏΡΠ΅Π²Π°Ρ ΠΈ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°
ΠΠΎ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ Π·Π°ΡΡΠΈΡΠ½ΠΈ ΡΠΈΠ΄ΠΎΠ²ΠΈ, Π΄Π΅ΡΡΡΠ²ΠΎΡΠΎ (ΠΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΈΠ»ΠΈ ΠΠ΄Π±ΠΈΡ) Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΡΠΏΠΎΡΠ΅Π΄ ΠΏΡΠ²ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΠΎ Π³ΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΠ²Π°. ΠΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ, ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π΅ Π΅ Π²Π°ΠΆΠ΅Π½.
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, ΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ ΠΈ ΡΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ ΡΠ»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ°Π·ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. Π¨ΡΠΎΠΌ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΡΠ΅ΠΊΠΎΡ ΠΏΠΎΠ΄ Π·Π°ΡΠ΅Π³Π½Π°Ρ ΠΎΠ΄ Π±Π°ΡΠ΅ΠΌ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½ΠΈΠ² ΡΡΠ°Π½ΡΠ²Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ ΡΠΏΠΎΡΠ΅Π΄ Π΄ΠΈΡΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° (Π»ΠΎΠ³ΠΈΡΠΊΠ° ΠΠΠ) Π½Π° ΡΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΠΎ ΡΠ° ΠΈΠ·Π±ΡΠ°Π»Π΅. ΠΠΎΠ΄ΡΠ°ΡΡΠ°ΡΠ° ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ ΠΎΠ΄ Π½ΠΈΡΡ Π΅Π΄Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΠ²Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΡΠΎΠ³ΠΎΠ»ΡΠ²Π°ΡΠ΅.
ΠΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΡΠΎΠ³ΠΎΠ»ΡΠ²Π°ΡΠ΅ (βΠΠ΄Π±ΠΈΡβ)
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π·Π°ΡΡΠΈΡΠ½ΠΈΠΎΡ ΡΠΈΠ΄ ΠΎΠ±ΠΈΡΠ½ΠΎ Π³ΠΎ Π½Π΅Π³ΠΈΡΠ°Π°Ρ ΡΠ΅ΠΊΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΡΡΠΎ Π½Π΅ Π΅ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½.
ΠΠ΅ΠΌΠ° Π½Π΅Π³ΠΈΡΠ°ΡΠ΅ Π°ΠΊΡΠΈΡΠ° Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ, ΡΠ΅ΠΏΠ°ΠΊ, ΡΠ»ΠΈΡΠ΅Π½ Π΅ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΠΎ ΡΠ΅Π΄ΠΎΠ²Π½Π° (ΠΏΠΎΠΏΡΡΡΠ»ΠΈΠ²Π°) ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ ΠΏΡΠ°Π·Π½Π° Π³ΡΡΠΏΠ° ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ (Π²Π»Π΅Π·):
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
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π°Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π΄ΠΎ ΠΌΠ΅ΡΡΠ°ΡΠ° Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ ΡΠ΅ ΠΈΠΌΠ°Π°Ρ ΠΏΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΡΠ΅Π΄ ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ (ΡΠ»ΠΈΡΠ½ΠΎ Π½Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΡΠ΅Π΄ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΎΠ΄Π±ΠΈΠ²Π°ΡΠ΅ Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° Π·Π°ΡΡΠΈΡΠ΅Π½ ΡΠΈΠ΄).
ΠΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΓ¨ (Any-Any-Any-Allow)
ΠΠ° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΠΎΠ·Π²ΠΎΠ»ΠΈ Π³ΠΈ ΡΠΈΡΠ΅, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ΄Π±ΠΈΠ²Π°ΡΠ΅ ΠΏΠΎΠ³ΠΎΡΠ΅ ΡΠΎ ΠΏΡΠ°Π·Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ingress
:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: default
spec:
podSelector: {}
ingress: # <<<
- {} # <<<
policyTypes:
- Ingress
ΠΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏ ΠΎΠ΄ ΡΠΈΡΠ΅ pods Π²ΠΎ ΡΠΈΡΠ΅ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΠΈ (ΠΈ ΡΠΈΡΠ΅ IP) Π΄ΠΎ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ pod Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ 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
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π°Ρ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠΊΠΈ ΠΠΠ Π½Π° ΡΡΠΈ Π½ΠΈΠ²ΠΎΠ°; ΠΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π²ΠΎ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎΡΡ ΡΠΎ ΠΏΠΎΠ΄Π΅Π»Π±Π°ΡΠ° Π½Π° ΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡΠΎ Π²Π»ΠΈΡΠ°Π°Ρ Π½Π° Π½Π΅Π°:
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
ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΡΠΈΡΠ΅ ΠΏΠ°ΡΡΠΈΡΠ° Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ default
ΡΠ΅ ΠΈΠΌΠ°Π°Ρ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ postgres
Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ database
. ΠΠΎ, ΡΡΠΎ Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ postgres
ΡΠ°ΠΌΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ½ΠΊΠΈ Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ default
?
Π€ΠΈΠ»ΡΡΠΈΡΠ°ΡΡΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΠΈ ΠΈ ΠΌΠ΅ΡΡΠ½ΠΊΠΈ
ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ Π²Π΅ΡΠ·ΠΈΡΠ° 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 | | | |
| ----------------------------------------|
ΠΠ°ΠΏΡΠΎΡΠΈΠ², Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π²ΠΎ podSelector
ΠΈΠ»ΠΈ namespaceSelector
ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π°Ρ ΡΠΎ Π»ΠΎΠ³ΠΈΡΠΊΠΈ Π. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΠΌΠ΅ΡΡΠ½ΠΊΠΈ ΡΡΠΎ Π³ΠΈ ΠΈΠΌΠ°Π°Ρ Π΄Π²Π΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ, role=db
Π version=v2
:
podSelector:
matchLabels:
role: db
version: v2
ΠΡΡΠ°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π°ΠΆΠΈ Π·Π° ΡΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ: ΠΈΠ·Π±ΠΈΡΠ°ΡΠΈ Π½Π° ΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΈΠ·Π±ΠΈΡΠ°ΡΠΈ Π½Π° pod ΠΈ ΠΈΠ·Π±ΠΈΡΠ°ΡΠΈ Π½Π° ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ.
ΠΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ (IPBlocks)
ΠΠ°ΡΡΠΈΡΠ½ΠΈΡΠ΅ ΡΠΈΠ΄ΠΎΠ²ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ VLAN, IP Π°Π΄ΡΠ΅ΡΠΈ ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°.
ΠΠΎ Kubernetes, IP-Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π½Π° pods ΠΈ ΠΌΠΎΠΆΠ΅ ΡΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ, ΡΠ°ΠΊΠ° ΡΡΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ Π½Π° pods ΠΈ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΠΈ Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ.
ΠΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ (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
ΠΡΠ°Π·Π½ΠΈΠΎΡ ΠΈΠ·Π±ΠΈΡΠ°Ρ Π½Π° pod Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π½Π°ΡΠΈ βΠΈΠ·Π±Π΅ΡΠΈ Π³ΠΈ ΡΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ° Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡβ.
ΠΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏ ΡΠ°ΠΌΠΎ Π΄ΠΎ 8.8.8.8; ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΄ΠΎ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³Π° IP Π°Π΄ΡΠ΅ΡΠ° Π΅ Π·Π°Π±ΡΠ°Π½Π΅Ρ. ΠΠ½Π°ΡΠΈ, Π²ΠΎ ΡΡΡΡΠΈΠ½Π°, Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π²ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΄ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ»ΡΠ³Π° Kubernetes DNS. ΠΠΊΠΎ ΡΓ¨ ΡΡΡΠ΅ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅, Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΎΠ²Π° Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ.
ΠΠ±ΠΈΡΠ½ΠΎ ipBlocks
ΠΈ podSelectors
ΠΌΠ΅ΡΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΡΠ²Π°Π°Ρ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ Π½Π° pods Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ipBlocks
. Π‘ΠΎ ΡΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈ IP ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ, Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π²ΡΡΠΊΠΈ Π΄ΠΎ/ΠΎΠ΄ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ ΡΠΎ ΠΎΠ²ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠΈ. ΠΠΎ ΠΏΡΠ°ΠΊΡΠ°, Π½Π΅ΠΌΠ° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠΎΡΠ° 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
), ΠΎΠ²Π° Π·Π½Π°ΡΠΈ ΡΠΈΡΠ΅ ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΡΠ°.
ΠΠ°ΡΠ΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°: ΠΠ΅ ΠΏΠΎΡΠΏΠΈΡΠ°ΡΡΠ΅ ΡΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΡΡΠΎ Π²ΠΈ ΡΡΠ΅Π±Π° Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ.
ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΠΌΠΎΡΠ° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄-ΠΏΠΎΡΡΠΈ, Π° Π½Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠΈ (ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ²Π° Π²ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΠ°ΡΡΡ).
ΠΠ°Π»ΠΈ ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³ΠΈ?
ΠΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΎ, ΠΏΠΎΠ΄ΠΎΠ²ΠΈΡΠ΅ Π²ΠΎ Kubernetes ΠΏΡΠΈΡΡΠ°ΠΏΡΠ²Π°Π°Ρ ΠΌΠ΅ΡΡΡΠ΅Π±Π½ΠΎ ΠΏΡΠ΅ΠΊΡ ΡΡΠ»ΡΠ³Π° - Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ Π±Π°Π»Π°Π½ΡΠΈΡΠ°Ρ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΡ Π³ΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΡΠ²Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΊΠΎΠ½ ΠΌΠ΅ΡΡΠ°ΡΠ° ΡΡΠΎ ΡΠ° ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°Π°Ρ ΡΡΠ»ΡΠ³Π°ΡΠ°. ΠΠΎΠΆΠ΅Π±ΠΈ ΠΌΠΈΡΠ»ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π°Ρ ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π½ΠΎ ΡΠΎΠ° Π½Π΅ Π΅ ΡΠ°ΠΊΠ°. ΠΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° ΠΏΠΎΠ΄-ΠΏΠΎΡΡΠΈ, Π° Π½Π΅ Π½Π° ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠΈ.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ° ΡΠ»ΡΡΠ° ΠΏΠΎΡΡΠ°ΡΠ° 80, Π½ΠΎ Π³ΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΡΠ²Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΊΠΎΠ½ ΠΏΠΎΡΡΠ°ΡΠ° 8080 ΠΎΠ΄ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ, ΠΌΠΎΡΠ° Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΡΠΎΡΠ½ΠΎ 8080 Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°.
Π’Π°ΠΊΠ²ΠΈΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ° Π·Π° Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½: Π°ΠΊΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° (ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠΈ ΡΠ»ΡΡΠ°Π°Ρ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ) ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°Π°Ρ.
ΠΠΎΠ² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Service Mesh (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΈΠ΄Π΅ΡΠ΅ Π·Π° ΠΡΡΠΈΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρ - ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π²ΠΎΠ΄.) Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°Π»ΠΈ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π°Ρ ΠΈ Ingress ΠΈ Egress?
ΠΡΠ°ΡΠΊΠΈΠΎΡ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π΅ Π΄Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° Π Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΡΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° Π, ΠΌΠΎΡΠ° Π΄Π° ΠΈ ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΡΠ΄ΠΎΠ²Π½Π° Π²ΡΡΠΊΠ° (Π·Π° ΠΎΠ²Π° ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΈΠ·Π»Π΅Π·), Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° Π ΠΌΠΎΡΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΡΠ°ΡΠΈ Π΄ΠΎΡΠ΄ΠΎΠ²Π½Π° Π²ΡΡΠΊΠ° ( Π·Π° ΠΎΠ²Π°, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π²ΠΈ Π΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° Π²Π»Π΅Π·).
ΠΠ΅ΡΡΡΠΎΠ°, Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΏΡΠ΅ΡΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π²ΡΡΠΊΠΈ Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ΡΠ΅ Π½Π°ΡΠΎΠΊΠΈ.
ΠΠΊΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΠ΄-ΠΈΠ·Π²ΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π»Π΅Π·-ΠΠΎΠ»ΠΈΡΠΈΡΠ°ΡΠΈΡΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΠΌΡ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠ½Π°Ρ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΡΡΠ²ΡΠ΄Π΅Π½ΠΈ ΡΠΎ Π½ΠΈΠ²Π½Π° Π΄ΠΈΡΡΡΠ½ΠΊΡΠΈΡΠ°. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΠ΅ ΡΡΠ΅Π±Π° Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° -Π½Π° Π°Π΄ΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡΠ° Π³ΡΡΠΏΠ° Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΎΠ΄ Π½Π΅ΠΊΠΎΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΏΠΎΡΠ΄ΠΎΠ²Π΅Π½ (ΠΈΠ·Π»Π΅Π·Π΅Π½) ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½.
Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, ΡΡΠ΄Π±ΠΈΠ½Π°ΡΠ° Π½Π° ΠΌΠ΅ΡΡΠ½ΠΎΡ Π΅Π°Π΄ΡΠ΅ΡΠ°Ρ, ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π°Π²Π»Π΅Π³ΡΠ²Π°ΡΠ΅-ΠΠΎΠ»ΠΈΡΠΈΡΠ°ΡΠΈΡΠ΅, ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠΎ Π½ΠΈΠ²Π½Π°ΡΠ° Π΄ΠΈΡΡΡΠ½ΠΊΡΠΈΡΠ°. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΌΠΎΡΠ° Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ Π΄Π° ΠΏΡΠΈΠΌΠ° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡΠ½Π°ΡΠ° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°. ΠΠΊΠΎ ΠΏΠΎΠ΄Π»ΠΎΠ³Π°ΡΠ° Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΎΠ΄ Π½ΠΈΡΡ Π΅Π΄Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΡΠ΅Π»ΠΈΠΎΡ Π²Π»Π΅Π·Π΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π·Π° Π½Π΅Π³ΠΎ Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½.
ΠΠΈΠ΄Π΅ΡΠ΅ Π΄ΡΠΆΠ°Π²ΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠ»ΠΈ Π±Π΅Π· Π΄ΡΠΆΠ°Π²ΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Ρ.
ΠΠ½Π΅Π²Π½ΠΈΡΠΈ
ΠΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° 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.
ΠΡΠΆΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±Π΅Π· Π΄ΡΠΆΠ°Π²ΡΠ°Π½ΡΡΠ²ΠΎ?
Π‘ΠΈΡΠ΅ Kubernetes CNI ΡΡΠΎ Π³ΠΈ ΡΡΠ΅ΡΠ½Π°Π² ΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Calico ΠΊΠΎΡΠΈΡΡΠΈ Linux conntrack). ΠΠ²Π° ΠΌΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° pod Π΄Π° ΠΏΡΠΈΠΌΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈ Π½Π° TCP ΠΊΠΎΠ½Π΅ΠΊΡΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»Π° Π±Π΅Π· Π΄Π° ΠΌΠΎΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ° Π²ΠΎΡΠΏΠΎΡΡΠ°Π²ΠΈ. ΠΠ°ΠΊΠΎ ΠΈ Π΄Π° Π΅, Π½Π΅ ΡΡΠΌ ΡΠ²Π΅ΡΠ΅Π½ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΡ ΠΊΠΎΡ Π±ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π» Π΄ΡΠΆΠ°Π²Π½ΠΎΡΡ.
ΠΠ°ΠΏΡΠ΅Π΄Π½ΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
ΠΠ²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ:
- ΠΡΡ
ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠ°ΡΠ° ΡΠ΅ΠΌΠ° Π½Π° Service Mesh ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π·Π° ΡΡΡΠ°Π½ΠΈΡΠ½Π° ΠΊΠΎΠ»Π° Π·Π° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π΄Π΅ΡΠ°Π»Π½Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°. ΠΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π·Π΅ΠΌΠ΅ΠΌΠ΅
ΠΡΡΠΈΠΎ . - ΠΠ΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ΄Π°Π²Π°ΡΠΈΡΠ΅ Π½Π° CNI Π³ΠΈ ΠΏΡΠΎΡΠΈΡΠΈΡΠ° ΡΠ²ΠΎΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ Π·Π° Π΄Π° Π³ΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes.
-
Π’ΡΡΠΈΠ½ ΠΡΠΊΠ° ΠΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ.
ΠΠ°ΠΊΠ΅ΡΠΎΡ Tufin Orca ΡΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes (ΠΈ Π΅ ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅).
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
-
ΠΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ ΠΎΠ΄ ΠΡ ΠΌΠ΅Ρ ΠΠ»ΠΏ ΠΠ°Π»ΠΊΠ°Π½ ΠΎΠ΄ ΠΠΠ ; -
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΎΠ΄ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ ; -
ΠΠΎΠ΄ΠΈΡ Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π·Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ ; -
Π‘ΠΊΡΠΈΠΏΡΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ .
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Kubernetes Π½ΡΠ΄Π°Ρ Π΄ΠΎΠ±Π°Ρ ΡΠ΅Ρ Π½Π° Π°Π»Π°ΡΠΊΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ, Π½ΠΎ ΡΠΈΠ΅ Π½Π΅ ΡΠ΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΈ ΠΈ ΠΈΠΌΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΡΡΠΏΡΠΈΠ»Π½ΠΎΡΡΠΈ. ΠΠΎΡΠ°Π΄ΠΈ ΠΎΠ²Π°Π° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ, Π²Π΅ΡΡΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΡΡΠΎΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ ΡΠ΅ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠΈ. ΠΠΎΠΆΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π·Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈ Π°Π»Π°ΡΠΊΠΈ Π·Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°.
Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΎΡ Π²ΠΎΠ΄ΠΈΡ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠ°ΡΠ½Π°Ρ Π½Π΅ΠΊΠΎΠΈ ΠΏΡΠ°ΡΠ°ΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΠΎΡΠΈΡΠ΅.
PS ΠΎΠ΄ ΠΏΡΠ΅Π²Π΅Π΄ΡΠ²Π°Ρ
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΈ Π½Π° Π½Π°ΡΠΈΠΎΡ Π±Π»ΠΎΠ³:
- βΠΠ°Π·Π°Π΄ ΠΊΠΎΠ½ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ ΡΠΎ ΠΡΡΠΈΠΎβ:
Π΄Π΅Π» 1 (Π²ΠΎΠ²Π΅Π΄ Π²ΠΎ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ) ,Π΄Π΅Π» 2 (ΠΌΠ°ΡΡΡΡΡΠ°, ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ) ,Π΄Π΅Π» 3 (Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ) ; - βΠΠ»ΡΡΡΡΠΈΡΠ°Π½ Π²ΠΎΠ΄ΠΈΡ Π·Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρβ:
Π΄Π΅Π»ΠΎΠ²ΠΈ 1 ΠΈ 2 (ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΌΠΎΠ΄Π΅Π», ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΠ΅Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ) ,Π΄Π΅Π» 3 (ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) ; - Β«
Docker ΠΈ Kubernetes Π²ΠΎ ΡΡΠ΅Π΄ΠΈΠ½ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ "; - Β«
9 ΠΠ°ΡΠ΄ΠΎΠ±ΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π·Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ "; - Β«
11 Π½Π°ΡΠΈΠ½ΠΈ Π΄Π° (Π½Π΅) ΡΡΠ°Π½Π΅ΡΠ΅ ΠΆΡΡΠ²Π° Π½Π° Ρ Π°ΠΊΠΈΡΠ°ΡΠ΅ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅Ρ ".
ΠΠ·Π²ΠΎΡ: www.habr.com