Π¦Π΅Π»ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΎΡ ΡΠΎ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π²ΠΎ Kubernetes, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠΎ Π΄ΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ Calico ΠΎΠ΄ ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½Π° ΠΊΠΎΡ Π³ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠ° ΠΏΠ°ΡΠΎΡ, Π»Π΅ΡΠ½ΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈ Π½Π΅ΠΊΠΎΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ΅ ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Π°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΠ΄ Π½Π°ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ.
ΠΡΠ· Π²ΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΠΎΡ Π°ΠΏΠ°ΡΠ°Ρ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ
ΠΠ»Π°ΡΡΠ΅ΡΠΎΡ Kubernetes Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΌΠΈΡΠ»ΠΈ Π±Π΅Π· ΠΌΡΠ΅ΠΆΠ°. ΠΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈ Π·Π° Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈ: β
ΠΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° ΡΠ°ΠΌΠΈΠΎΡ K8s Π½Π΅ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΌΡΠ΅ΠΆΠ½ΠΎΡΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ΅: Π·Π° ΠΎΠ²Π°, ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ CNI ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ (ΠΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅). ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ²ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ Π½ΠΈΠ΅
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΡΡΠ΅ΡΡΠΈΠΎΡ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ Π΅
ΠΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ Π΅ ΠΈ βΠ½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ°β Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ
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 (ΠΈΠ»ΠΈ Π³ΡΡΠΏΠ° Π½Π° pods) ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΈΠ½Π° (Ρ.Π΅. ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ). ΠΠ°ΠΆΠ΅Π½ Π΄Π΅ΡΠ°Π»: Π΄Π²Π°ΡΠ° ΡΠΈΠΏΠ° Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΌΠΎΡΠ° Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠ° (Π΅ΡΠΈΠΊΠ΅ΡΠ° Π²ΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ°ΡΠ° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅Ρ) - ΡΠΎΠ° ΡΠ΅ ΠΎΠ½ΠΈΠ΅ ΡΠΎ ΠΊΠΎΠΈ ΠΎΠΏΠ΅ΡΠΈΡΠ°Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΡΠ°ΡΠΈΡΠ΅.
ΠΠΎΠΊΡΠ°Ρ ΠΊΠΎΠ½Π΅ΡΠ΅Π½ Π±ΡΠΎΡ Π½Π° ΠΈΠ·Π±ΠΈΡΠ°ΡΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅ΡΠΈ ΡΠΎ Π½Π΅ΠΊΠ°ΠΊΠ²Π° ΠΎΠ·Π½Π°ΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠ°ΠΊΠΎ βΠΠΎΠ·Π²ΠΎΠ»ΠΈ/ΠΎΠ΄Π±ΠΈ ΡΠ΅/ΡΠ΅ΠΊΠΎΡβ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π°ΡΠΈΡΠ°ΡΠΈΠΈ. ΠΠ° ΡΠ°Π° ΡΠ΅Π» ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ°:
podSelector: {}
ingress: []
policyTypes:
- Ingress
β Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ Π²ΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΠΎΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ. Π‘ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΡΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠ°:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
Π‘Π»ΠΈΡΠ½ΠΎ Π·Π° ΠΏΠΎΡΠ΄ΠΎΠ²Π½ΠΈ:
podSelector: {}
policyTypes:
- Egress
- Π΄Π° Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅. Π Π΅Π²Π΅ ΡΡΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
ΠΡΠ°ΡΠ°ΡΡΠΈ ΡΠ΅ Π½Π° ΠΈΠ·Π±ΠΎΡΠΎΡ Π½Π° CNI ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π·Π° ΠΊΠ»Π°ΡΡΠ΅Ρ, Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ΠΊΠΎΡ ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° NetworkPolicy. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΠΎΡ Flannel Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΊΠΎΠΈ
ΠΠ°ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠΎ ΠΠ°Π»ΠΈΠΊΠΎ: ΡΠ΅ΠΎΡΠΈΡΠ°
ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ Calico ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° ΡΠΎ Flannel (ΠΏΠΎΠ΄ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠ°ΠΊΠ²ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π°Π²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° K8s βboxedβ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ API ΡΠ΅ΡΠΎΡ ΠΎΠ΄ Calico?
ΠΠ²Π΅ ΡΡΠΎ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΎ Π²ΠΎ NetworkPolicy:
- ΠΏΠΎΠ»ΠΈΡΠΈΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΎΠ΄ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°;
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ Π½Π° ΠΌΠ΅ΡΡΠ½ΠΊΠΈΡΠ΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΡΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈ, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ;
- ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠ½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΏΠΎΡΡΠ°ΡΠ°.
ΠΠ²Π΅ ΠΊΠ°ΠΊΠΎ Calico Π³ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π° ΠΎΠ²ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ: ΠΏΠΎΠ΄, ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ;
- ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π°ΠΊΡΠΈΡΠ° (Π·Π°Π±ΡΠ°Π½Π°, Π΄ΠΎΠ·Π²ΠΎΠ»Π°, ΡΠ΅ΡΠ°);
- ΡΠ΅Π»ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΡΠ°, ΠΎΠΏΡΠ΅Π³ Π½Π° ΠΏΠΎΡΡΠΈ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, HTTP ΠΈΠ»ΠΈ ICMP Π°ΡΡΠΈΠ±ΡΡΠΈ, IP ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ° (ΡΠ΅ΡΠ²ΡΡΠ° ΠΈΠ»ΠΈ 4-ΡΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΠ°), ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ (ΡΠ°Π·Π»ΠΈ, Ρ ΠΎΡΡΠΎΠ²ΠΈ, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ);
- ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° DNAT ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ.
ΠΡΠ²ΠΈΡΠ΅ ΠΎΠ±Π²ΡΡΠΊΠΈ Π½Π° GitHub Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Calico Π΄Π°ΡΠΈΡΠ°Π°Ρ ΠΎΠ΄ ΡΡΠ»ΠΈ 2016 Π³ΠΎΠ΄ΠΈΠ½Π°, Π° Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎΠ΄ΠΎΡΠ½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π·Π°Π·Π΅Π΄Π΅ Π²ΠΎΠ΄Π΅ΡΠΊΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡΠ° Π²ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΎΡΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° Kubernetes - ΠΎΠ²Π° Π΅ ΠΏΠΎΡΠ²ΡΠ΄Π΅Π½ΠΎ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ΡΠΎ,
ΠΠ½ΠΎΠ³Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΡΠΎ K8, ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ
Π¨ΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π΄ΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅, ΠΎΠ²Π΄Π΅ ΡΠ΅ Π΅ ΠΎΠ΄Π»ΠΈΡΠ½ΠΎ. ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Π½ΠΈΠ²Π½ΠΈΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄, ΡΠΈΠΌΠΎΡ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° Calico ΠΏΠΎΠΊΠ°ΠΆΠ° Π°ΡΡΡΠΎΠ½ΠΎΠΌΡΠΊΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ, ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 50000 ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π½Π° 500 ΡΠΈΠ·ΠΈΡΠΊΠΈ ΡΠ°Π·Π»ΠΈ ΡΠΎ Π±ΡΠ·ΠΈΠ½Π° Π½Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΠ΄ 20 ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠ΅ Π±Π΅Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ ΡΠΊΠ°Π»ΠΈΡΠ°ΡΠ΅. ΠΠ°ΠΊΠ²ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ
ΠΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ, ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ°Π±ΠΎΡΠ° Π²ΠΎ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΡΠΏΡΠ°Π²ΡΠ²Π°Π½ΠΈ K8s, OpenShift, OpenStack, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Calico ΠΏΡΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ
ΠΠ΅ΠΆΠ±Π°ΡΡΠ΅ ΡΠΎ 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
ΠΠΎ ΡΡΡΡΠΈΠ½Π°, Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΠΌΠ΅ Π΄ΠΎΡΠ΄ΠΎΠ²Π΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ Π΄ΠΎ ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΡΠ΅ΡΠΎ Π Π΅Π΄ΠΈΡ ΠΎΠ΄ 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
.
ΠΠ·ΠΎΠ»Π°ΡΠΈΡΠ° ΡΠΏΠΎΡΠ΅Π΄ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°
Π‘Π΅Π³Π° Π·Π°ΠΌΠΈΡΠ»Π΅ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠ³Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ° Π΄Π΅Π»ΠΎΠ²Π½ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ Π²ΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ ΠΈ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΠΎΡΠ½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΡΠ°ΡΠ°Π½Π°. ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΠΎΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΈ. ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΡΠΊΡΠΈΠ΅ΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΡΡΠ±ΠΎΠΏΠΈΡΠ½ΠΈΡΠ΅ ΠΎΡΠΈ:
ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ, ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ΅ ΡΡΠ°Π²Π° Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π° ΠΎΠΏΠΊΡΡΠΆΡΠ²Π°ΡΠ΅ Π·Π° ΡΡΠ»ΡΠ³ΠΈ - Π²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ ΠΊΠ°ΠΊΠΎ ΠΎΠ²ΠΎΡ:
apiVersion: v1
kind: Namespace
metadata:
labels:
module: prometheus
name: kube-prometheus
ΡΡΠΎΠ»Π± metadata.labels
ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ»ΡΡΠ°ΡΠ½ΠΎ. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Π²ΠΌΠ΅ ΠΏΠΎΠ³ΠΎΡΠ΅, namespaceSelector
(ΠΊΠ°ΠΊΠΎ ΠΈ podSelector
) ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ. ΠΠ°ΡΠΎΠ°, Π·Π° Π΄Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ° ΠΎΠ΄ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΠΏΠΎΡΡΠ°, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡ Π²ΠΈΠ΄ ΠΎΠ·Π½Π°ΠΊΠ° (ΠΈΠ»ΠΈ Π΄Π° Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈΡΠ΅), Π° ΠΏΠΎΡΠΎΠ° Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΊΠ°ΠΊΠΎ:
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 ΠΎΠ±ΡΠ΅ΠΊΡΠΈ
ΠΠΎΠ·Π²ΠΎΠ»Π΅ΡΠ΅ ΠΌΠΈ Π΄Π° Π²Π΅ ΠΏΠΎΡΡΠ΅ΡΠ°ΠΌ Π΄Π΅ΠΊΠ° ΠΏΡΠ΅ΠΊΡ ΠΏΡΠΎΡΠΈΡΠ΅Π½ΠΈΠΎΡ ΡΠ΅Ρ Π½Π° Calico API ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΡΠ΅Π³ΡΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΡΠΈ ΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈ. ΠΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ GlobalNetworkPolicy
ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠ° Π·Π° ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ ICMP Π±Π°ΡΠ°ΡΠ° Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π΅ Π·Π°ΡΠ²ΠΎΡΠ΅Π½Π° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΈΠ½Π³ ΠΎΠ΄ ΠΏΠΎΠ΄ Π΄ΠΎ ΡΠ°Π·ΠΎΠ», ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΠΎΠ²ΠΈ ΠΈΠ»ΠΈ ΠΎΠ΄ ΡΠ°Π·ΠΎΠ» Π΄ΠΎ IP ΠΏΠΎΠ΄Π»ΠΎΠ³Π°):
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 Π°Π΄ΡΠ΅ΡΠ°). - ΠΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ Π½Π° ΠΊΠΎΡ ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΠΈΠ»Π° ΠΌΠ΅ΡΡΠ½ΠΊΠ°ΡΠ° Π΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° Π½Π°ΡΠ°ΡΠ° ΠΏΡΠΈΠΊΠ°Π·Π½Π°. Π‘Π°ΠΌΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΡΡΡΠΎ Π΄Π° ΡΠ° βΠ·Π°ΠΊΠΎΠ²Π°ΡΠ΅β ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π° ΡΠ°Π·ΠΎΠ» ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠ°Π»Π° ΡΡΠ»ΡΠ³Π° Π·Π° ΡΡΡΠ°Π½ΠΈΡΠ½Π° Π»Π΅Π½ΡΠ° ΡΡΠΎ ΡΠ΅ ΡΠ° ΡΠ»Π΅Π΄ΠΈ ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° 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 ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΌΠΎΠ½ΡΡΡΡΠΎΠ·Π½ΠΎ Π²ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ Π½Π° ΡΠ°ΠΌΠ½Π° ΠΌΡΠ΅ΠΆΠ°... ΠΠ΅ΡΡΡΠΎΠ°, ΠΈΠ½Π°ΠΊΡ Π°Π»Π°ΡΠΊΠ°ΡΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄ΠΎΡΡΠ° ΠΎΡΡΠ²Π°ΡΠ»ΠΈΠ²Π° ΠΈ ΠΊΠΎΡΠΈΡΠ½Π° .
ΠΠ·ΠΎΠ»ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π·Π° Π΄Π° ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π°Ρ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈΡΠ΅ Π±Π°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΈΠ·Π²ΠΎΠ΄Π»ΠΈΠ²ΠΎ, ΠΈ ΡΠΎΠΊΠΌΡ ΡΡΠΊΠ° Calico (ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅) Π΄ΠΎΠ°ΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡ. ΠΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ (ΡΠΎ ΠΌΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈ) ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π²ΠΎ AWS.
PS
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΈ Π½Π° Π½Π°ΡΠΈΠΎΡ Π±Π»ΠΎΠ³:
- Β«
ΠΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΡΠΈ Π·Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ "; - βΠΠ»ΡΡΡΡΠΈΡΠ°Π½ Π²ΠΎΠ΄ΠΈΡ Π·Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρβ:
Π΄Π΅Π»ΠΎΠ²ΠΈ 1 ΠΈ 2 (ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΌΠΎΠ΄Π΅Π», ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΠ΅Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ) ,Π΄Π΅Π» 3 (ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) ; - Β«
ΠΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡΠΊΠΈ ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ (CNI) - ΠΌΡΠ΅ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π·Π° Linux ".
ΠΠ·Π²ΠΎΡ: www.habr.com