ΠΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².: ΠΠ²ΡΠΎΡ ΡΡΠ°ΡΡΠΈ β Reuven Harrison β ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ 20 Π»Π΅Ρ ΠΎΠΏΡΡΠ° Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΎΠΌ ΠΈ ΡΠΎΡΡΡΠ΅Π΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Tufin, ΡΠΎΠ·Π΄Π°ΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Kubernetes ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠΎΡΠ½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅, ΠΎΠ½ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΈΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΠ°Π½Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» (Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠΌΠ½ΡΠΉ) ΠΏΡΠΈΠ·Π²Π°Π½ ΡΠ»ΡΡΡΠΈΡΡ ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ½Π½ΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² Π² ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΈ ΠΏΠΎΠΌΠΎΡΡ ΠΈΠΌ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π²ΡΠ΅ ΡΠ°ΡΠ΅ Π²ΡΠ±ΠΈΡΠ°ΡΡ 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
ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π² ΡΠ΅Π±Π΅ Π½ΡΠΆΠ½ΡΠΉ Π»Π΅ΠΉΠ±Π». ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ default
ΠΈ 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βΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ 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
Π² ΡΡΠΎΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ ΠΊ ΡΠ΅Π»Π΅Π²ΡΠΌ 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
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ to
β ΠΏΡΡΡΠΎΠΉ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ 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βΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ default
. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ Π΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ·ΠΈΡΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ Π½Π°Π±ΠΎΡΡ pod’ΠΎΠ² (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
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ Π²Π΅ΡΡ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ (ingress) Π ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ (egress) ΡΡΠ°ΡΠΈΠΊ, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π»ΡΠ±ΠΎΠΌΡ 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
β Π²ΡΠ±ΠΈΡΠ°Π΅Ρ podβΡ; -
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
). ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ 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βΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ default
ΠΏΠΎΠ»ΡΡΠ°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ pod’Π°ΠΌ postgres
Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ database
. ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΎΡΠΊΡΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ postgres
ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ pod’Π°ΠΌ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ default
?
Π€ΠΈΠ»ΡΡΡ ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½ Π 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
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΡΠ°ΠΊΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΠΠΠ?
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ podSelector
Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΄Π΅ΡΠΈΡΠ°. Π YAML ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ 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
:
| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A | HTTPS | Allow |
| 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’Π°ΠΌ ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ default
Π΄ΠΎΡΡΡΠΏ ΠΊ 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
ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π² Π±Π»ΠΎΠΊΠ΅ 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’ΠΎΠ², Π° Π½Π΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅).
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄Π»Ρ 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 <policy-name> -o yaml
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Kubernetes Π½Π΅ Π½Π΅ΠΏΠΎΠ³ΡΠ΅ΡΠΈΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΏΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
Kubernetes Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΡ API-ΡΠ»ΡΠ·ΠΎΠΌ, Π²ΠΎΠ·Π»Π°Π³Π°ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π° Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ Container Networking Interface (CNI). ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes Π±Π΅Π· Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ CNI Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΠΎΠΌ Π±Π΅Π· ΠΈΡ
ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΡ. ΠΡ ΡΠ°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² Π½Π°Π»ΠΈΡΠΈΠΈ Π΄ΠΎΡΡΠΎΠΉΠ½ΠΎΠ³ΠΎ CNI ΠΈΠ»ΠΈ, Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌ Kubernetes, ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΡΡ
Π² ΠΎΠ±Π»Π°ΠΊΠ΅ (ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Kubernetes Π½Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡ Π²Π°Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Π΄Π°Π΄ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ Π±Π΅Π· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ CNI.
Stateful ΠΈΠ»ΠΈ Stateless?
ΠΡΠ΅ CNI Kubernetes, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠ½Π΅ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ, Ρ ΡΠ°Π½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Calico ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Linux conntrack). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ podβΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡΠ²Π΅ΡΡ ΠΏΠΎ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΈΠΌ TCP-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΠ½Π΅ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ Kubernetes, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π» Π±Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (statefulness).
ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² Kubernetes:
- ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ Service Mesh ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° ΡΡΠ°ΡΠΈΠΊΠΎΠΌ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ
Istio . - ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² CNI Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ Π²ΡΡΠ»ΠΈ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Kubernetes.
-
Tufin Orca ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Kubernetes.
ΠΠ°ΠΊΠ΅Ρ Tufin Orca ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ Kubernetes (ΠΈ ΡΠ»ΡΠΆΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠΎΠ², ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅).
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
-
ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Ahmet Alp Balkan’ΠΎΠΌ ΠΈΠ· GKE ; -
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° Kubernetes ; -
Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Kubernetes ; -
Π‘ΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ .
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Kubernetes ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½Ρ ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΈΠ·-Π·Π° ΡΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ.
P.S. ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«ΠΠ°Π·Π°Π΄ ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ IstioΒ»:
ΡΠ°ΡΡΡ 1 (Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ) ,ΡΠ°ΡΡΡ 2 (ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ) ,ΡΠ°ΡΡΡ 3 (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ) ; - Β«ΠΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΡΠ΅ΡΠΈ Π² KubernetesΒ»:
ΡΠ°ΡΡΠΈ 1 ΠΈ 2 (ΡΠ΅ΡΠ΅Π²Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΠ²Π΅ΡΠ»Π΅ΠΉΠ½ΡΠ΅ ΡΠ΅ΡΠΈ) ,ΡΠ°ΡΡΡ 3 (ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ°ΡΠΈΠΊΠ°) ; - Β«
Docker ΠΈ Kubernetes Π² ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ Β»; - Β«
9 Π»ΡΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² Kubernetes Β»; - Β«
11 ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² (Π½Π΅) ΡΡΠ°ΡΡ ΠΆΠ΅ΡΡΠ²ΠΎΠΉ Π²Π·Π»ΠΎΠΌΠ° Π² Kubernetes Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com