
Π¦Π΅Π»ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π΅ Π΄Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Ρ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π² Kubernetes, ΠΊΠ°ΠΊΡΠΎ ΠΈ Ρ Π²ΡΠ½ΡΠ½ΠΈΡ ΠΏΠ»ΡΠ³ΠΈΠ½ Calico, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. Π ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Π½ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π½ΡΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅Π· ΡΠ΅Π°Π»Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΡ Π½Π°ΡΠΈΡ ΠΎΠΏΠΈΡ.
ΠΡΡΠ·ΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π° Kubernetes
ΠΠ»ΡΡΡΠ΅ΡΡΡ Kubernetes Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π±Π΅Π· ΠΌΡΠ΅ΠΆΠ°. ΠΠ΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ ΠΌΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ Π·Π° ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠΌ: βΒ» ΠΈ «».
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ Π²ΡΠ·Π»ΠΈΡΠ΅ Π½Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΠΈΡΡ K8s: Π·Π° ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ CNI ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ (Container Networking Interface). ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π·Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π½ΠΈΠ΅ .
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΉ-ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡΡ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ β ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΡΠ»Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΡΠ΅Π· ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΡΡΠΎΠ²Π΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π», ΠΊΠ°ΡΠΎ ΠΌΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΡΠ»Π½Π°ΡΠ° ΠΈ Π½Π΅ΡΠ΅Π³ΡΠ»ΠΈΡΠ°Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°. ΠΠ° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° firewall-Π°. Π ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠΉ Π΅ ΠΎΡΡΠ°Π²Π΅Π½ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΡΠ°ΠΌΠΈΡ CNI, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π²ΡΠ½ΡΠ½ΠΈ Π½Π°ΠΌΠ΅ΡΠΈ Π² iptables ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΡΡΠ»ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½ΠΈ.
Π βΠΈΠ·Π²ΡΠ½ ΠΊΡΡΠΈΡΡΠ°β Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ . Π’ΠΎΠ·ΠΈ ΡΠ΅ΡΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·ΡΠΈΡΡΠ²Π° Π²ΡΡΡ Ρ ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΎΡ Π΅Π΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ Π΄ΡΡΠ³ΠΎ. Π’ΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ pod-ΠΎΠ²Π΅, ΡΡΠ΅Π΄ΠΈ (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡ ΠΈΠΌΠ΅Π½Π°) ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Ρ IP Π°Π΄ΡΠ΅ΡΠΈ:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: 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Π’ΠΎΠ·ΠΈ Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΠΌΠΎΠΆΠ΅ Π²Π΅Π΄Π½ΡΠΆ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° ΡΠ±ΠΈΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈβ¦
ΠΠΎΠ³ΠΈΡΠ½ΠΎ Π΅, ΡΠ΅ ΠΈΠΌΠ° 2 ΡΠΈΠΏΠ° ΡΡΠ°ΡΠΈΠΊ: Π²Ρ ΠΎΠ΄ΡΡ (Ingress) Π² pod ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ (Egress) ΠΎΡ Π½Π΅Π³ΠΎ.

Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ Π½Π° ΡΠ΅Π·ΠΈ 2 ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠ°ΡΠ° Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½ Π°ΡΡΠΈΠ±ΡΡ Π΅ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ; Π»ΠΈΡΠ΅ΡΠΎ, ΠΊΡΠΌ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ pod (ΠΈΠ»ΠΈ Π³ΡΡΠΏΠ° ΠΎΡ pod) ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ (Ρ.Π΅. namespace). ΠΠ°ΠΆΠ½Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡ: ΠΈ Π΄Π²Π°ΡΠ° ΡΠΈΠΏΠ° Π½Π° ΡΠ΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ Π΅ΡΠΈΠΊΠ΅Ρ (label Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° Kubernetes) β ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΡΡΡ ΠΎΠΏΠ΅ΡΠΈΡΠ°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅.
ΠΡΠ²Π΅Π½ ΠΊΡΠ°ΠΉΠ½ΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ Π½Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈΡΠ΅, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Ρ Π½ΡΠΊΠ°ΠΊΡΠ² Π΅ΡΠΈΠΊΠ΅Ρ, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠ°ΡΠΎ βΠΠΎΠ·Π²ΠΎΠ»ΠΈ/Π·Π°Π±ΡΠ°Π½ΠΈ Π²ΡΠΈΡΠΊΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈβ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π°ΡΠΈΠ°ΡΠΈΠΈ. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΡ Π²ΠΈΠ΄Π°:
podSelector: {}
ingress: []
policyTypes:
- Ingressβ Π² ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° Π²ΡΠΈΡΠΊΠΈ podβΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΡΠ΅ Π·Π°ΡΠ²Π°ΡΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ. ΠΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°ΡΠΎ Ρ ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ:
podSelector: {}
ingress:
- {}
policyTypes:
- IngressΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡ:
podSelector: {}
policyTypes:
- Egressβ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅. Π Π΅ΡΠΎ ΠΊΠ°ΠΊ Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅:
podSelector: {}
egress:
- {}
policyTypes:
- EgressΠΡΡΡΠ°ΠΉΠΊΠΈ ΡΠ΅ ΠΊΡΠΌ ΠΈΠ·Π±ΠΎΡΠ° Π½Π° CNI ΠΏΠ»ΡΠ³ΠΈΠ½ Π·Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΡΠ»Π΅Π΄Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π½Π΅ Π²ΡΠ΅ΠΊΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Ρ NetworkPolicy. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΡ Flannel Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π² ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. Π’Π°ΠΌ ΡΡΡΠΎ Π΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β Open Source ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΠΉΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ API Π½Π° Kubernetes ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ.

ΠΠ°ΠΏΠΎΠ·Π½Π°ΠΉΡΠ΅ ΡΠ΅ Ρ Calico: ΡΠ΅ΠΎΡΠΈΡ
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ Calico ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Flannel (ΠΏΠΎΠ΄ΠΏΡΠΎΠ΅ΠΊΡ ) ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ, ΠΏΠΎΠΊΡΠΈΠ²Π°ΠΉΠΊΠΈ ΠΊΠ°ΠΊΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ, ΡΠ°ΠΊΠ° ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΠ°.
ΠΠ°ΠΊΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° βΠΊΡΡΠΈΡβ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ K8s ΠΈ Π½Π°Π±ΠΎΡΠ° ΠΎΡ API Π½Π° Calico?
ΠΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ Π² NetworkPolicy:
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π΄ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ;
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ podβΠΈ, ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΊΡΠΌ podβΠΈ, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ½ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π° ΠΏΠΎΡΡΠΎΠ²Π΅.
Π Π΅ΡΠΎ ΠΊΠ°ΠΊ Calico ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ: pod, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ;
- ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (Π·Π°Π±ΡΠ°Π½Π°, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π»ΠΎΠ³Π²Π°Π½Π΅);
- ΠΠ°ΡΠΎ ΡΠ΅Π» ΠΈΠ»ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΡ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ ΠΏΠΎΡΡΠΎΠ²Π΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, HTTP ΠΈΠ»ΠΈ ICMP Π°ΡΡΠΈΠ±ΡΡΠΈ, IP ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ° (4 ΠΈΠ»ΠΈ 6 ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ), Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ (Π²ΡΠ·Π»ΠΈ, Ρ ΠΎΡΡΠΎΠ²Π΅, ΡΡΠ΅Π΄ΠΈ);
- ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ DNAT ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΡΡΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈ Π² GitHub Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π‘alico ΡΠ° Π΄Π°ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ»ΠΈ 2016 Π³., Π° Π²Π΅ΡΠ΅ ΡΠ»Π΅Π΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π·Π°Π΅ΠΌΠ° Π²ΠΎΠ΄Π΅ΡΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ Π½Π° Kubernetes β Π·Π° ΡΠΎΠ²Π° Π³ΠΎΠ²ΠΎΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΡΡΠ²Π°Π½Π΅ΡΠΎ, :

ΠΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ managed ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ K8s, ΠΊΠ°ΡΠΎ , , ΠΈ Π΄ΡΡΠ³ΠΈ, Π·Π°ΠΏΠΎΡΠ½Π°Ρ
Π° Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°Ρ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
Π©ΠΎ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΡΠ΄Π΅ΡΠ½ΠΎ. ΠΡΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠΈ Π΅ΠΊΠΈΠΏΡΡ Π½Π° Calico Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° Π°ΡΡΡΠΎΠ½ΠΎΠΌΠΈΡΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ, ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΠΊΠΈ Π½Π°Π΄ 50000 ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° 500 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·Π΅Π»Π° ΡΡΡ ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ ΠΎΡ 20 ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΈ. Π’Π°ΠΊΠΈΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π²Π΅ΡΠ΅ ΠΏΡΠΈ Π°Π½ΠΎΠ½ΡΠ° Π½Π° ΠΏΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ, Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΠΈ ΠΎΠ±Π΅ΠΌΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ, ΡΡΡΠΎ ΠΏΠΎΡΠ²ΡΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Calico, ΠΊΠΎΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΎΡΡΡΡΠΏΠ²Π° Π½Π° Flannel. :

ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ·ΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ managed K8s, OpenShift, OpenStack, ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Calico ΠΏΡΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° , ΡΡΠ΅ΡΠ°Ρ ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Π²Π°Π½ΠΈΡ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Service Mesh ΠΌΡΠ΅ΠΆΠΈ ( Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Istio).
ΠΡΠ°ΠΊΡΠΈΠΊΠ° Ρ Calico
Π ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²Π°Π½ΠΈΠ»ΠΎΠ² Kubernetes, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° CNI ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π° Π΄ΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π° calico.yaml, , Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° kubectl apply -f.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π°ΠΊΡΡΠ°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½Π° Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ 2-3 ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Kubernetes: ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π² ΠΏΠΎ-ΡΡΠ°ΡΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ ΡΠ΅ ΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅ ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°. Π‘ΠΏΠΎΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅, Calico ΡΠ°Π±ΠΎΡΠΈ Π½Π° Linux ΡΠ΄ΡΠΎ Π½Π°Π΄ 3.10 ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° CentOS 7, Ubuntu 16 ΠΈΠ»ΠΈ Debian 8, Π²ΡΡΡ Ρ iptables ΠΈΠ»ΠΈ IPVS.
ΠΠ·ΠΎΠ»Π°ΡΠΈΡ Π²ΡΡΡΠ΅ Π² ΡΡΠ΅Π΄Π°ΡΠ°
ΠΠ° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΡΡ ΡΠ»ΡΡΠ°ΠΉ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π² Π½ΠΎΡΠ°ΡΠΈΡΡΠ° Π½Π° Calico ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΊΡΠΌ ΡΡΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΡΡΡ Π½Π°ΡΠ° ΡΠ΅ΡΠ»ΠΈΠ²ΠΎΡΡ ΠΈ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅:

Π ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΠ° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ 2 Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: Π½Π° Node.js ΠΈ PHP, β Π΅Π΄Π½ΠΎ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Redis. ΠΠ° Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Redis ΠΎΡ PHP, ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ Ρ Node.js, Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-redis-nodejs
spec:
podSelector:
matchLabels:
service: redis
ingress:
- from:
- podSelector:
matchLabels:
service: nodejs
ports:
- protocol: TCP
port: 6379ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ Π½Π° ΠΏΠΎΡΡΠ° Π½Π° Redis ΠΎΡ Node.js. Π―ΡΠ½ΠΎ Π½Π΅ Π·Π°Π±ΡΠ°Π½ΠΈΡ ΠΌΠ΅ Π½ΠΈΡΠΎ Π΄ΡΡΠ³ΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ NetworkPolicy, Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ, ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ Π² Π½Π΅Π³ΠΎ, Π·Π°ΠΏΠΎΡΠ²Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Ρ, Π°ΠΊΠΎ Π½Π΅ Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π΄ΡΡΠ³ΠΎ. ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π΅ Π²Π°ΠΆΠ°Ρ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΏΠΎΠΊΡΠΈΡΠΈ ΠΎΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° apiVersion Kubernetes βΠΈΠ·Π²ΡΠ½ ΠΊΡΡΠΈΡΡΠ°β, Π½ΠΎ Π½ΠΈΡΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° . Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ ΡΠ°ΠΌ Π΅ ΠΏΠΎ-ΡΠ°Π·ΡΠΈΡΠ΅Π½, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π² ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄:
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: allow-redis-nodejs
spec:
selector: service == 'redis'
ingress:
- action: Allow
protocol: TCP
source:
selector: service == 'nodejs'
destination:
ports:
- 6379 Π‘ΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ Π·Π°Π±ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΡ ΡΡΠ°ΡΠΈΠΊ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ NetworkPolicy API ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΈ Π·Π° Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΡΠ½Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΡ ΡΠΊΠΎΠ±ΠΊΠΈ. Π ΡΠ»ΡΡΠ°Ρ Ρ Calico, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° Π·Π°ΡΠΈΡΠ½Π° ΡΡΠ΅Π½Π° Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΠΎ, Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠΌΠ΅Π½ΠΈΠΌ action: Allow Π½Π° action: Deny.
ΠΠ·ΠΎΠ»Π°ΡΠΈΡ ΠΏΠΎ ΡΡΠ΅Π΄ΠΈ
Π‘Π΅Π³Π° Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π±ΠΈΠ·Π½Π΅Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π² Prometheus ΠΈ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Ρ Grafana. Π Π΅ΠΊΡΠΏΠΎΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΈΡΡΡΡΠ²Π°Ρ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π²ΡΠ΅ΠΎΠ±ΡΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅. ΠΠ΅ΠΊΠ° Π·Π°ΡΠΈΡΠΈΠΌ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΡΠ°Π½Π½ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄ΠΈ:

Prometheus, ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅ ΠΈΠ·Π½Π΅ΡΠ΅Π½ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΠΎ ΡΡΠ΅Π΄ΠΈΡΠ΅ β Π² ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ namespace ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄:
apiVersion: v1
kind: Namespace
metadata:
labels:
module: prometheus
name: kube-prometheus ΠΠΎΠ»Π΅ metadata.labels ΡΡΠΊ ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ, namespaceSelector (ΠΊΠ°ΠΊΡΠΎ ΠΈ podSelector) ΠΎΠΏΠ΅ΡΠΈΡΠ° Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π·Π° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ pod'ΠΎΠ²Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡΡ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²Π° Π΅ΡΠΈΠΊΠ΅ΡΠ° (ΠΈΠ»ΠΈ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅) ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠ°ΡΠΎ:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-metrics-prom
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
module: prometheus
ports:
- protocol: TCP
port: 9100Π Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Calico ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°ΠΊΡΠ²:
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: allow-metrics-prom
spec:
ingress:
- action: Allow
protocol: TCP
source:
namespaceSelector: module == 'prometheus'
destination:
ports:
- 9100ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ Π½ΡΠΆΠ΄ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΡΠΈΡΠΈΡΠ΅ ΠΎΡ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΈΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π°ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΠΏΠΎΡΠ΅Π΄ ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Calico, Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ βΠΠ°Π±ΡΠ°Π½ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΈ ΡΠ²Π½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΠΎβ, ΡΠΈΠΊΡΠΈΡΠ°Π½ Π² (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΏΠ°Π·Π²Π°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ β ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, Π² ).
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Calico
ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΡΡΠ΅Π· ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ API Calico ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅Π³ΡΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΠ° Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°ΡΠ΅ Π΄ΠΎ pod'ΠΎΠ²Π΅. Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° GlobalNetworkPolicy ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° ICMP Π·Π°ΡΠ²ΠΊΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΈΠ½Π³ ΠΎΡ pod Π² Π²ΡΠ·Π΅Π», ΠΌΠ΅ΠΆΠ΄Ρ pod'ΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΎΡ Π²ΡΠ·Π΅Π» Π΄ΠΎ IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° pod):
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: block-icmp
spec:
order: 200
selector: all()
types:
- Ingress
- Egress
ingress:
- action: Deny
protocol: ICMP
egress:
- action: Deny
protocol: ICMP Π ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡΡΠ°Π²Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΏΠΎ ICMP. Π ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ GlobalNetworkPolicy, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΊΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΠΎΡΠΎ HostEndpoint:
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: deny-icmp-kube-02
spec:
selector: "role == 'k8s-node'"
order: 0
ingress:
- action: Allow
protocol: ICMP
egress:
- action: Allow
protocol: ICMP
---
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
name: kube-02-eth0
labels:
role: k8s-node
spec:
interfaceName: eth0
node: kube-02
expectedIPs: ["192.168.2.2"]Π‘Π»ΡΡΠ°ΠΉ Ρ VPN
ΠΠ°ΠΊΡΠ°Ρ, ΡΠ΅ Π΄Π°ΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ΅Π°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π° Calico Π·Π° ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΠΊΠΎΠ»ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ΅Π½. ΠΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ VPN ΡΡΠ½Π΅Π», ΠΈ ΡΠΎΠ·ΠΈ Π΄ΠΎΡΡΡΠΏ Π΅ ΡΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΡΡΠ»ΡΠ³ΠΈ:

ΠΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ Ρ VPN ΠΏΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ UDP ΠΏΠΎΡΡ 1194 ΠΈ ΠΏΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΌΠ°ΡΡΡΡΡΠΈ ΠΊΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΡΠ»ΡΠ³ΠΈΡΠ΅. ΠΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Ρ ΠΈΠ·ΡΡΠ»ΠΎ, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ Π·Π°Π³ΡΠ±ΡΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΌΡΠ½Π° Π½Π° Π°Π΄ΡΠ΅ΡΠΈΡΠ΅.
ΠΠΎΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½, ΠΊΠΎΠ΅ΡΠΎ Π½Π°Π»Π°Π³Π° Π½ΡΠΊΠΎΠΈ Π½ΡΠ°Π½ΡΠΈ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² Kubernetes ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² AWS LoadBalancer Π·Π° UDP ΡΠΎΠΉ Π±Π΅ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅Π½ Π΅Π΄Π²Π° Π² ΠΊΡΠ°Ρ Π½Π° ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ, Π° NodePort Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠΎΠ±ΠΈΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ° Π±ΡΠΎΡΡ Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ° Ρ ΡΠ΅Π» ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·Π±ΡΠ°Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅...
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Ρ VPN ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ Π½Π° Π²ΡΠ·Π΅Π» Π² ΡΠ΅ΠΆΠΈΠΌ
hostNetwork, ΡΠΎΠ΅ΡΡ Π½Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ IP. - Π£ΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π½Π°Π²ΡΠ½ ΡΡΠ΅Π·
ClusterIP. ΠΠ° Π²ΡΠ·Π΅Π»Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ ΠΎΡΠ²Π°ΡΡ ΠΏΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΎΡΠ²ΡΠ½ Ρ ΠΌΠ°Π»ΠΊΠΈ ΡΠ³ΠΎΠ²ΠΎΡΠΊΠΈ (ΡΡΠ»ΠΎΠ²Π½ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠ΅Π°Π»Π΅Π½ IP Π°Π΄ΡΠ΅Ρ). - ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π°, Π½Π° ΠΊΠΎΠΉΡΠΎ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ ΠΏΠΎΠ΄ΡΡ, Π΅ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ°Π·ΠΊΠ°Π·Π²Π°Π½Π΅. Π©Π΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ βΠ·Π°ΠΊΡΠ΅ΠΏΠΈβ ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° Π²ΡΠ·Π΅Π»Π° ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΠΌΠ°Π»ΡΠΊ sidecar-service, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ ΡΠ΅ΠΊΡΡΠΈΡ IP Π°Π΄ΡΠ΅Ρ Π½Π° VPN ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° DNS Π·Π°ΠΏΠΈΡΠΈΡΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ β ΠΏΡΠΈ ΠΊΠΎΠ³ΠΎΡΠΎ ΡΠ°Π½ΡΠ°Π·ΠΈΡΡΠ° ΡΡΠΈΠ³Π°.
ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅Π΄Π²ΡΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° VPN ΠΏΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡ IP Π°Π΄ΡΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ ΠΎΡ VPN ΡΡΡΠ²Π΅ΡΠ°. ΠΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΡΠ°ΠΊΡΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ Π½Π° Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡ Redis:
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
name: vpnclient-eth0
labels:
role: vpnclient
environment: production
spec:
interfaceName: "*"
node: kube-02
expectedIPs: ["172.176.176.2"]
---
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: vpn-rules
spec:
selector: "role == 'vpnclient'"
order: 0
applyOnForward: true
preDNAT: true
ingress:
- action: Deny
protocol: TCP
destination:
ports: [6379]
- action: Allow
protocol: UDP
destination:
ports: [53, 67]Π’ΡΠΊ Π΅ ΡΡΡΠΎΠ³ΠΎ Π·Π°Π±ΡΠ°Π½Π΅Π½ Π΄ΠΎΡΡΡΠΏΡΡ Π΄ΠΎ ΠΏΠΎΡΡ 6379, Π½ΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° DNS ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΎΡΡΠ°Π²Π° Π·Π°ΠΏΠ°Π·Π΅Π½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ ΡΡΡΠ°Π΄Π° ΠΏΡΠΈ ΡΡΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠ°ΡΠΎΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ° ΠΌΡ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π·Π°Π±ΡΠ°Π½ΠΈΡΠ΅Π»Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ ΠΈΠ½Π°ΡΠ΅.
Π Π΅Π·ΡΠΌΠ΅
Π‘ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎΡΠΎ API Π½Π° Calico ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³ΡΠ²ΠΊΠ°Π²ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡΡΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ ΠΎΠΊΠΎΠ»ΠΎ Π½Π΅Π³ΠΎ. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π»ΡΠ½Π΅ Ρ ΠΏΡΡΠΊΠ° ΠΏΠΎ Π²ΡΠ°Π½ΠΈ, Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° L3 ΠΌΡΠ΅ΠΆΠ° Ρ BGP ΠΈ IP-IP ΡΡΠ½Π΅Π»ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠΎΠ½ΡΡΡΡΠΎΠ·Π½ΠΎ Π² ΠΏΡΠΎΡΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° Kubernetes Π² ΠΏΠ»ΠΎΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ°β¦ ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½.
ΠΠ·ΠΎΠ»Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΈ ΡΠΎΡΠ½ΠΎ Π² ΡΠ°ΠΊΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΠΏΠΎΠΌΠΎΡ ΠΈΠ΄Π²Π° Calico (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅). ΠΡΠΈΠΌΠ΅ΡΠΈΡΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈ Π² ΡΡΠ°ΡΠΈΡΡΠ° (Ρ ΠΌΠ°Π»ΠΊΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ), ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π² AWS.
P.S.
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «»;
- Β«ΠΠ»ΡΡΡΡΠΈΡΠ°Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΠΌΡΠ΅ΠΆΠΈ Π² KubernetesΒ»: , ;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
