
Π¦Π΅Π»ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π΅ Π΄Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Ρ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π² 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 ΡΠΈΠΏΠ° ΡΡΠ°ΡΠΈΠΊ: Π²Ρ ΠΎΠ΄ΡΡ Π² pod (Ingress) ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ (Egress).

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

ΠΠ°ΠΏΠΎΠ·Π½Π°Π²Π°ΠΌΠ΅ ΡΠ΅ Ρ Calico: ΡΠ΅ΠΎΡΠΈΡ
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ Calico ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Flannel (ΠΏΠΎΠ΄ΠΏΡΠΎΠ΅ΠΊΡ ) ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ, ΠΎΠ±Ρ Π²Π°ΡΠ°ΠΉΠΊΠΈ ΠΊΠ°ΠΊΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ, ΡΠ°ΠΊΠ° ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΠ°.
ΠΠ°ΠΊΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° "ΠΊΡΡΠΈΡ" ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ K8s ΠΈ Π½Π°Π±ΠΎΡ ΠΎΡ API ΠΎΡ Calico?
ΠΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ Π² NetworkPolicy:
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π΄ΠΎ ΡΡΠ΅Π΄Π°ΡΠ°;
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ pod-ΠΎΠ²Π΅, ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ pod-ΠΎΠ²Π΅, ΡΡΠ΅Π΄ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, Π½ΠΎΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π½ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π° ΠΏΠΎΡΡΠΎΠ²Π΅.
Π Π΅ΡΠΎ ΠΊΠ°ΠΊ Calico ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ: pod, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ;
- ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (Π·Π°Π±ΡΠ°Π½Π°, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π»ΠΎΠ³Π²Π°Π½Π΅);
- ΠΠ°ΡΠΎ ΡΠ΅Π» ΠΈΠ»ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΡ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ ΠΏΠΎΡΡΠΎΠ²Π΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, HTTP ΠΈΠ»ΠΈ ICMP Π°ΡΡΠΈΠ±ΡΡΠΈ, IP ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΌΠ΅ΡΠΊΠ° (4 ΠΈΠ»ΠΈ 6 ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅), Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ (Π²ΡΠ·Π»ΠΈ, Ρ ΠΎΡΡΠΎΠ²Π΅, ΡΡΠ΅Π΄ΠΈ);
- ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ DNAT ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΡΡΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΈΡΠΈ Π½Π° GitHub Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Calico Π΄Π°ΡΠΈΡΠ°Ρ ΠΎΡ ΡΠ»ΠΈ 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 ΠΈ ΠΏΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΌΠ°ΡΡΡΡΡΠΈ ΠΊΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° podβΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΡΠ»ΡΠ³ΠΈΡΠ΅. ΠΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ push-Π²Π°Ρ ΠΈΠ·ΡΡΠ»ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π·Π°Π³ΡΠ±Π° Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π°Π΄ΡΠ΅ΡΠΈ.
ΠΠΎΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½, ΠΊΠΎΠ΅ΡΠΎ Π½Π°Π»Π°Π³Π° Π½ΡΠΊΠΎΠΈ Π½ΡΠ°Π½ΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΏΡΠ΅Π½Π°ΡΡΠ½Π΅ΡΠΎ ΠΌΡ Π² Kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² AWS LoadBalancer Π·Π° UDP ΡΡΠ°Π½Π° Π½Π°Π»ΠΈΡΠ΅Π½ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π² ΠΊΡΠ°Ρ Π½Π° ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠΏΠΈΡΡΠΊ Ρ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ, Π° NodePort Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠΎΠ±ΠΈΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ° Ρ ΠΎΠ³Π»Π΅Π΄ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ΅ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·Π±ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅β¦
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- PodβΡΠ΅ Ρ VPN ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ Π½Π° Π²ΡΠ·Π΅Π» Π² ΡΠ΅ΠΆΠΈΠΌ
hostNetwork, Ρ.Π΅. Π½Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ IP. - Π£ΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° Π½Π°Π²ΡΠ½ ΡΡΠ΅Π·
ClusterIP. ΠΠ° Π²ΡΠ·Π΅Π»Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΏΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π°Π²ΡΠ½ Ρ ΠΌΠ°Π»ΠΊΠΈ ΡΠ³ΠΎΠ²ΠΎΡΠΊΠΈ (ΡΡΠ»ΠΎΠ²Π½ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠ΅Π°Π»Π΅Π½ IP Π°Π΄ΡΠ΅Ρ). - ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π°, Π½Π° ΠΊΠΎΠΉΡΠΎ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ pod, Π΅ ΠΈΠ·Π²ΡΠ½ Π½Π°ΡΠ΅ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅. Π©Π΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ 'ΠΏΡΠΈΠ±ΠΈΠ΅' ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ²ΡΡΠ΄ΠΎ ΠΊΡΠΌ Π²ΡΠ·Π΅Π»Π° ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΠΌΠ°Π»ΡΠΊ sidecar-ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ ΡΠ΅ΠΊΡΡΠΈΡ 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
