ΠΡΠ΅ Π²Π΅ΡΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π»ΠΈΠ·Π°
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°Π³ Π·Π° ΡΠ°Π³ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ
ΠΠ±Π·ΠΎΡ
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ
Π‘Ρ Π΅ΠΌΠ° 1: ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±Π·ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Consul
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π²
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΌ Π΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½ΠΎ Π½Π΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ΅ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠΉ Π·Π΄ΡΠ°Π²ΠΎΠΌΡΡΠ»ΡΡΠΈΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, Π²Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ²Π°Π΅ΡΠ΅ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°. Π ΠΏΠΎΡΠΎΠΌβ¦ Π’Π΅ΡΠΏΠΈΡΠ΅ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊ Π±ΡΠ²Π°Π΅Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ POC, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΎΠ±Π·ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Consul (Π‘Ρ Π΅ΠΌΠ° 1) ΠΈ ΡΡΠΎΡΠ½ΠΈΠΌ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Kubernetes.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Consul-ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ Kubernetes Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Consul. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π°ΡΠ΅ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½Π°Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ Consul key/value Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°.
Π‘Ρ Π΅ΠΌΠ° Π½ΠΈΠΆΠ΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΡΠ½Π΅Π½Π° ΠΏΠΎΠ·ΠΆΠ΅.
Π‘Ρ Π΅ΠΌΠ° 2: ΠΠ±Π·ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² Kubernetes
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Consul-ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΆΠΈΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Kubernetes, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠΎ Π΄Π°, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈ ΡΠ°ΠΊ ΠΈ ΡΡΠΊ.
ΠΡΠ°ΠΊ, Π²Π·ΡΠ² ΠΎΠ±Π·ΠΎΡΠ½ΡΡ ΡΡ Π΅ΠΌΡ Consul (Π‘Ρ Π΅ΠΌΠ° 1) ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΠΊ Π½Π΅ΠΉ Kubernetes, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡ Π΅ΠΌΡ Π²ΡΡΠ΅ (Π‘Ρ Π΅ΠΌΠ° 2), ΠΈ ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ:
- Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π° ΡΠ»ΡΠΆΠ΅Π±Π½Π°Ρ ΡΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΎΠΊΠ΅Π½ JWT, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ Kubernetes. ΠΡΠΎΡ ΡΠΎΠΊΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ΄ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
- ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄Π° ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Ρ ΠΎΠ΄Π° Π² Π½Π°Ρ Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ. Π Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π° Π²Ρ ΠΎΠ΄ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ Π½Π°Ρ ΡΠΎΠΊΠ΅Π½ ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (ΡΠΈΠΏΠ° Kubernetes). ΠΡΠΎΡ ΡΠ°Π³ β 2 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π³Ρ 1 ΡΡ Π΅ΠΌΡ Consul (Π‘Ρ Π΅ΠΌΠ° 1).
- ΠΠ°Ρ Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ Π½Π° Π½Π°Ρ Consul-ΡΠ΅ΡΠ²Π΅Ρ.
- ΠΠΠΠΠ―! ΠΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ Consul-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°, ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΡ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡΠ΄Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ. ΠΠΈΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³Π°Ρ ΡΡ Π΅ΠΌΠ°, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎΡ ΡΠ°Π³ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π³Π°ΠΌ 3, 4 ΠΈ 5 ΠΎΠ±Π·ΠΎΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΡ Consul (Π‘Ρ Π΅ΠΌΠ° 1).
- ΠΠ°Ρ Consul-ΡΠ΅ΡΠ²Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Consul ΡΠΎΠΊΠ΅Π½ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π½Π°ΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ) Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π»ΠΈΡΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΠΎΡΠΏΡΠ°Π²ΠΈΡ ΡΡΠΎΡ ΡΠΎΠΊΠ΅Π½ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π³Ρ 6 ΡΡ Π΅ΠΌΡ Consul (Π‘Ρ Π΅ΠΌΠ° 1).
- ΠΠ°Ρ Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΊΠ΅Π½ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ.
ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Consul ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ Ρ Π½Π°ΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Consul, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌΠΈ ΡΠΎΠΊΠ΅Π½Π°.
ΠΠΎΠ»ΡΠ΅Π±ΡΡΠ²ΠΎ ΡΠ°ΡΠΊΡΡΡΠΎ!
ΠΠ»Ρ ΡΠ΅Ρ ΠΈΠ· Π²Π°Ρ, ΠΊΡΠΎ Π½Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΊΡΠΎΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ· ΡΠ»ΡΠΏΡ ΠΈ Ρ ΠΎΡΠ΅Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ¦ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ Β«ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³Π»ΡΠ±ΠΎΠΊΠ° ΠΊΡΠΎΠ»ΠΈΡΡΡ Π½ΠΎΡΠ°Β».
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π½Π°Ρ Β«ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉΒ» ΡΠ°Π³ (Π‘Ρ Π΅ΠΌΠ° 2: Π¨Π°Π³ 4) Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Consul-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°, ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± Π·Π°ΠΏΡΠΎΡΠ΅ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΡ Ρ Π»ΡΠ±ΡΠΌΠΈ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ. ΠΡΠΎΡ ΡΠ°Π³ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π³Π°ΠΌ 3, 4 ΠΈ 5 ΠΎΠ±Π·ΠΎΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΡ Consul (Π‘Ρ Π΅ΠΌΠ° 1). ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡ Π΅ΠΌΠ° (Π‘Ρ Π΅ΠΌΠ° 3), ΡΠ΅Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Kubernetes.
Π‘Ρ Π΅ΠΌΠ° 3: ΠΠΎΠ»ΡΠ΅Π±ΡΡΠ²ΠΎ ΡΠ°ΡΠΊΡΡΡΠΎ!
- Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π½Π°Ρ Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° Π²Ρ ΠΎΠ΄ Π½Π° Π½Π°Ρ Consul-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠΌ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Kubernetes ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΡΠ°Π½Π΅Π΅. ΠΡΠΎΡ ΡΠ°Π³ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π³Ρ 3 Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΈ ΡΡ Π΅ΠΌΡ.
- Π’Π΅ΠΏΠ΅ΡΡ Consul-ΡΠ΅ΡΠ²Π΅ΡΡ (ΠΈΠ»ΠΈ Π»ΠΈΠ΄Π΅ΡΡ) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΎΠΊΠΎΠ½ΡΡΠ»ΡΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ Kubernetes (ΡΠ΅ΡΠ΅Π· Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ) ΠΈ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΌΡ Π²ΡΡΡΠ½ΠΈΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠΎΠΊΠ΅Π½ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΡΠΌ, ΠΈ ΠΊΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ.
- ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Consul-Π»ΠΈΠ΄Π΅ΡΡ, ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Consul Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π²Ρ ΠΎΠ΄ Π² ΡΠΈΡΡΠ΅ΠΌΡ (ΠΈ ΡΠΈΠΏΠ° Kubernetes).
- Consul-Π»ΠΈΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½) ΠΈ ΡΠΈΡΠ°Π΅Ρ Π½Π°Π±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Ρ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΡΠΈΡΠ°Π΅Ρ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΠΈ.
- Π’Π°Π΄Π°! ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ°Π³Ρ 5 Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΈ ΡΡ Π΅ΠΌΡ.
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Consul-server Π½Π° ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅
Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π±ΡΠ΄Ρ Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ POC, ΡΠ°ΡΡΠΎ Π² ΠΏΡΠ½ΠΊΡΠ°Ρ , Π±Π΅Π· ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GCP Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΡΡ ΠΆΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅.
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ (ΠΈΠ½ΡΡΠ°Π½Ρ / ΡΠ΅ΡΠ²Π΅Ρ).
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ firewall (Π³ΡΡΠΏΠΏΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² AWS):
- ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΈΠΌΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠΌΡ ΡΠ΅Π³Ρ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Β«skywiz-consul-server-pocΒ».
- ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ IP-Π°Π΄ΡΠ΅Ρ Π²Π°ΡΠ΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ IP-Π°Π΄ΡΠ΅ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (UI).
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠΎΡΡ 8500 Π΄Π»Ρ UI. ΠΠ°ΠΆΠΌΠΈΡΠ΅ Create (Π‘ΠΎΠ·Π΄Π°ΡΡ). ΠΡ ΡΠΊΠΎΡΠΎ ΠΎΠΏΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΡΠΎΡ firewall [
ΡΡΡΠ»ΠΊΠ° ]. - ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ firewall ΠΊ ΠΈΠ½ΡΡΠ°Π½ΡΡ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ Π½Π° ΠΏΠ°Π½Π΅Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° VM Π½Π° Consul-ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Β«skywiz-consul-server-pocΒ» Π² ΠΏΠΎΠ»Π΅ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠ΅Π³ΠΎΠ². ΠΠ°ΠΆΠΌΠΈΡΠ΅ Save (Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ).
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Consul Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π·Π΄Π΅ΡΡ. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π²Π΅ΡΡΠΈΡ Consul β₯ 1.5 [ΡΡΡΠ»ΠΊΠ°]
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ single node Consul β ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ.
groupadd --system consul
useradd -s /sbin/nologin --system -g consul consul
mkdir -p /var/lib/consul
chown -R consul:consul /var/lib/consul
chmod -R 775 /var/lib/consul
mkdir /etc/consul.d
chown -R consul:consul /etc/consul.d
- ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Consul ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠ· 3 Π½ΠΎΠ΄ ΡΠΌ.
Π·Π΄Π΅ΡΡ . - Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» /etc/consul.d/agent.json ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ [
ΡΡΡΠ»ΠΊΠ° ]:
### /etc/consul.d/agent.json
{
"acl" : {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true
}
}
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π½Π°Ρ Consul-ΡΠ΅ΡΠ²Π΅Ρ:
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
- ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ββ¦ update blocked by ACLsβ.
- ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠΉ IP-Π°Π΄ΡΠ΅Ρ Consul-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π±ΡΠ°ΡΠ·Π΅Ρ Ρ ΡΡΠΈΠΌ IP-Π°Π΄ΡΠ΅ΡΠΎΠΌ Π½Π° ΠΏΠΎΡΡΡ 8500. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ UI.
- ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ Consul-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ACL ΠΈ Π·Π°ΠΏΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°.
- ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ Π½Π° Consul-ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π», ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
consul acl bootstrap
- ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Β«SecretIDΒ» ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ UI. ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«ACLΒ» Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΊΠ΅Π½Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ SecretID Π΅ΡΠ΅ ΠΊΡΠ΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ, ΠΎΠ½ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΠΌ ΠΏΠΎΠ·ΠΆΠ΅.
- Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ POC Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: ΠΊΠ»ΡΡ: Β«custom-ns/test_keyΒ», Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Β«Iβm in the custom-ns folder!Β»
ΠΠ°ΠΏΡΡΠΊ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Consul-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Daemonset
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ K8s (Kubernetes). ΠΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΠΎΠΉ ΠΆΠ΅ Π·ΠΎΠ½Π΅, ΡΡΠΎ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ, Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡ ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ IP-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ. ΠΡ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Β«skywiz-app-with-consul-client-pocΒ».
- ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅, Π²ΠΎΡ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ POC Consul-ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ Consul Connect.
- ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Hashicorp helm chart Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠΉΡΠ΅ Helm. Π¨Π°Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding
--clusterrole=cluster-admin --serviceaccount=kube-system:tiller
./helm init --service-account=tiller
./helm update
- helm chart:
https://www.consul.io/docs/platform/k8s/helm.html - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Ρ ΠΎΡΠΊΠ»ΡΡΠΈΠ»):
### poc-helm-consul-values.yaml
global:
enabled: false
image: "consul:latest"
# Expose the Consul UI through this LoadBalancer
ui:
enabled: false
# Allow Consul to inject the Connect proxy into Kubernetes containers
connectInject:
enabled: false
# Configure a Consul client on Kubernetes nodes. GRPC listener is required for Connect.
client:
enabled: true
join: ["<PRIVATE_IP_CONSUL_SERVER>"]
extraConfig: |
{
"acl" : {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true
}
}
# Minimal Consul configuration. Not suitable for production.
server:
enabled: false
# Sync Kubernetes and Consul services
syncCatalog:
enabled: false
- ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ helm chart:
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
- ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ°, Π΅ΠΌΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Consul-ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°ΠΊ ΡΡΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ .
- ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Β«Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π°Π΄ΡΠ΅ΡΠΎΠ² PodΒ», ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π½Π° ΠΏΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»Ρ Π΄Π»Ρ firewall Β«skywiz-consul-server-pocΒ».
- ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π°Π΄ΡΠ΅ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π° Π² ΡΠΏΠΈΡΠΎΠΊ IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠΎΡΡΡ 8301 ΠΈ 8300.
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ Consul UI, ΠΈ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ Π½Π°Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π½ΠΎΠ΄.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Consul Ρ Kubernetes
- ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Consul-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅:
export CONSUL_HTTP_TOKEN=<SecretID>
- ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° auth:
- kubernetes-host
kubectl get endpoints | grep kubernetes
- kubernetes-service-account-jwt
kubectl get sa <helm_deployment_name>-consul-client -o yaml | grep "- name:"
kubectl get secret <secret_name_from_prev_command> -o yaml | grep token:
- Π’ΠΎΠΊΠ΅Π½ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ Π² base64, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΡΡΠΈΡΡΡΠΉΡΠ΅ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ Π»ΡΠ±ΠΈΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° [
ΡΡΡΠ»ΠΊΠ° ] - kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
- ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ βca.crtβ (ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ base64) ΠΈ Π²ΠΏΠΈΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ°ΠΉΠ» βca.crtβ.
- Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° auth, Π·Π°ΠΌΠ΅Π½ΠΈΠ² placeholders Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ.
consul acl auth-method create
-type "kubernetes"
-name "auth-method-skywiz-consul-poc"
-description "This is an auth method using kubernetes for the cluster skywiz-app-with-consul-client-poc"
-kubernetes-host "<k8s_endpoint_retrieved earlier>"
[email protected]
-kubernetes-service-account-
jwt="<decoded_token_retrieved_earlier>"
- ΠΠ°Π»Π΅Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ Π΅Π³ΠΎ ΠΊ Π½ΠΎΠ²ΠΎΠΉ ΡΠΎΠ»ΠΈ. ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Consul UI, Π½ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ.
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ
### kv-custom-ns-policy.hcl
key_prefix "custom-ns/" {
policy = "write"
}
- ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ
consul acl policy create
-name kv-custom-ns-policy
-description "This is an example policy for kv at custom-ns/"
-rules @kv-custom-ns-policy.hcl
- ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ, ΠΈΠ· Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ»Ρ Ρ Π½ΠΎΠ²ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΠΌ.
consul acl role create
-name "custom-ns-role"
-description "This is an example role for custom-ns namespace"
-policy-id <policy_id>
- Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ²ΡΠΆΠ΅ΠΌ Π½Π°ΡΡ Π½ΠΎΠ²ΡΡ ΡΠΎΠ»Ρ Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° auth. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ»Π°Π³ Β«ΡΠ΅Π»Π΅ΠΊΡΠΎΡΒ» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ Π½Π°Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° Π²Ρ
ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΡ ΡΠΎΠ»Ρ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π·Π΄Π΅ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°:
https://www.consul.io/docs/acl/auth-methods/kubernetes.html#trusted-identity-attributes
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-ns-role'
-selector='serviceaccount.namespace=="custom-ns"'
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄Π°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Consul Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π° ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ»ΡΠΆΠ±Ρ K8s.
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ» ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅
[ΡΡΡΠ»ΠΊΡ] :
###skywiz-poc-consul-server_rbac.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: review-tokens
namespace: default
subjects:
- kind: ServiceAccount
name: skywiz-app-with-consul-client-poc-consul-client
namespace: default
roleRef:
kind: ClusterRole
name: system:auth-delegator
apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: service-account-getter
namespace: default
rules:
- apiGroups: [""]
resources: ["serviceaccounts"]
verbs: ["get"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: get-service-accounts
namespace: default
subjects:
- kind: ServiceAccount
name: skywiz-app-with-consul-client-poc-consul-client
namespace: default
roleRef:
kind: ClusterRole
name: service-account-getter
apiGroup: rbac.authorization.k8s.io
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°
kubectl create -f skywiz-poc-consul-server_rbac.yaml
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Consul Client
- ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ
Π·Π΄Π΅ΡΡ , Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ daemonset, Π½ΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΠΎΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ: - ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» [
ΡΡΡΠ»ΠΊΠ° ].
### poc-consul-client-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: consul-ds-client
spec:
selector:
app: consul
chart: consul-helm
component: client
hasDNS: "true"
release: skywiz-app-with-consul-client-poc
ports:
- protocol: TCP
port: 80
targetPort: 8500
- ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ configmap [
ΡΡΡΠ»ΠΊΠ° ]. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΡΡΡΠ»Π°Π΅ΠΌΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π³ΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
labels:
addonmanager.kubernetes.io/mode: EnsureExists
name: kube-dns
namespace: kube-system
data:
stubDomains: |
{"consul": ["$(kubectl get svc consul-ds-client -o jsonpath='{.spec.clusterIP}')"]}
EOF
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ auth-ΠΌΠ΅ΡΠΎΠ΄Π°
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΌΠ°Π³ΠΈΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ!
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΠ°ΠΏΠΎΠΊ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΡΡΠΎΠΌ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (Ρ. Π΅. <new_folder>/sample_key) ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ Π²ΡΠ±ΠΎΡΡ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ ΡΠΎΠ»ΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΡΡΠ΅ΠΉ. ΠΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½:
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½:
kubectl create namespace custom-ns
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ΄ Π² Π½Π°ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π°.
###poc-ubuntu-custom-ns.yaml
apiVersion: v1
kind: Pod
metadata:
name: poc-ubuntu-custom-ns
namespace: custom-ns
spec:
containers:
- name: poc-ubuntu-custom-ns
image: ubuntu
command: ["/bin/bash", "-ec", "sleep infinity"]
restartPolicy: Never
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄:
kubectl create -f poc-ubuntu-custom-ns.yaml
- ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡΡ, Π·Π°ΠΉΠ΄ΠΈΡΠ΅ ΡΡΠ΄Π° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ curl.
kubectl exec poc-ubuntu-custom-ns -n custom-ns -it /bin/bash
apt-get update && apt-get install curl -y
- Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ Π·Π°ΠΏΡΠΎΡ Π½Π° Π²Ρ
ΠΎΠ΄ Π² Consul, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅ [
ΡΡΡΠ»ΠΊΠ° ]. - Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½ ΠΈΠ· ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ»ΡΠΆΠ±Ρ:
cat /run/secrets/kubernetes.io/serviceaccount/token
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π² ΡΠ°ΠΉΠ» Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
### payload.json
{
"AuthMethod": "auth-method-test",
"BearerToken": "<jwt_token>"
}
- Login!
curl
--request POST
--data @payload.json
consul-ds-client.default.svc.cluster.local/v1/acl/login
- Π§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΎΠ²), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
echo "{
"AuthMethod": "auth-method-skywiz-consul-poc",
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)"
}"
| curl
--request POST
--data @-
consul-ds-client.default.svc.cluster.local/v1/acl/login
- Π Π°Π±ΠΎΡΠ°Π΅Ρ! ΠΠΎΠ»ΠΆΠ½ΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ SecretID ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ»ΡΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏ.
curl
consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header βX-Consul-Token: <SecretID_from_prev_response>β
- ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Β«ValueΒ» base64 ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² custom-ns/test_key Π² UI. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅, Π²Π°ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.
Π’Π΅ΡΡ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ServiceAccount Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ [
ΡΡΡΠ»ΠΊΠ° ].
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: custom-sa
EOF
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π²ΠΊΠ»ΡΡΠΈΠ» ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ curl Π΄Π»Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΡΡΡΠ΄Π° π
###poc-ubuntu-custom-sa.yaml
apiVersion: v1
kind: Pod
metadata:
name: poc-ubuntu-custom-sa
namespace: default
spec:
serviceAccountName: custom-sa
containers:
- name: poc-ubuntu-custom-sa
image: ubuntu
command: ["/bin/bash","-ec"]
args: ["apt-get update && apt-get install curl -y; sleep infinity"]
restartPolicy: Never
- ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
kubectl exec -it poc-ubuntu-custom-sa /bin/bash
- Login!
echo "{
"AuthMethod": "auth-method-skywiz-consul-poc",
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)"
}"
| curl
--request POST
--data @-
consul-ds-client.default.svc.cluster.local/v1/acl/login
- Permission denied. Π, ΠΌΡ Π·Π°Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΏΡΠ°Π²ΠΈΠ» Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ.
ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ Π²ΡΡΠ΅:
Π°) Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΠΠΎΠ»ΠΈΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° Β«custom-sa/Β».
Π±) Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Role, Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ Β«custom-sa-roleΒ»
Π²) ΠΡΠΈΠΊΡΠ΅ΠΏΠΈΡΠ΅ ΠΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΊ Role.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Rule-Binding (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· cli / api). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°.
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-sa-role'
-selector='serviceaccount.name=="custom-sa"'
- ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ Π²Ρ ΠΎΠ΄ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Β«poc-ubuntu-custom-saΒ». Success!
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΠΏΡΡΠΈ custom-sa/.
curl
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header βX-Consul-Token: <SecretID>β
- ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΠΎΠΊΠ΅Π½ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ kv Π² Β«custom-ns/Β». ΠΡΠΎΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΌΠ΅Π½Ρ Β«custom-saΒ» Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡ Β«custom-nsΒ».
Permission denied.
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ²Π΅ΡΠ»Π΅Ρ:
- Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ rule-binding Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΡΠΎΠΊΠ΅Π½ Ρ ΡΡΠΈΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ.
- ΠΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Β«poc-ubuntu-custom-saΒ» Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β ΡΠ°ΠΊ ΡΡΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ rule-binding.
- ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
Π°) Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΠΠΎΠ»ΠΈΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΊΠ»ΡΡΠ° Β«default/Β».
Π±) Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Role, Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ βdefault-ns-roleβ
Π²) ΠΡΠΈΠΊΡΠ΅ΠΏΠΈΡΠ΅ ΠΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΊ Role. - Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Rule-Binding (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· cli / api)
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='default-ns-role'
-selector='serviceaccount.namespace=="default"'
- ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Β«poc-ubuntu-custom-saΒ» ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΡΠΈ Β«default/Β» kv.
- Permission denied.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π° Π² UI Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ACL > Tokens. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠΎΠΊΠ΅Π½Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° Β«custom-sa-roleΒ». Π’ΠΎΠΊΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΠΎΡΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈ ΡΠΎΠ³Π΄Π° Π±ΡΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ rule-binding, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ³Π΄Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ½ΠΎΠ²Π° Π²ΠΎΠΉΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Π½. - Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ Β«custom-sa/Β», ΡΠ°ΠΊ ΠΈ Β«default/Β» kv.
Success!
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°Ρ Β«poc-ubuntu-custom-saΒ» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°ΠΌ ΠΏΡΠ°Π²ΠΈΠ» Β«custom-saΒ» ΠΈ Β«default-nsΒ».
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
TTL token mgmt?
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ TTL Π΄Π»Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎ Π±ΡΠ»Π° Π±Ρ ΡΠ°Π½ΡΠ°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ β ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Consul.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΊΠ΅Π½ Ρ TTL:
https://www.consul.io/docs/acl/acl-system.html#acl-tokens
Expiration Time (ΠΡΠ΅ΠΌΡ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ) β Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠΎΠΊΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ·Π²Π°Π½. (ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ; Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² Consul 1.5.0)- Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ / ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
https://www.consul.io/api/acl/tokens.html#expirationtime
ΠΠ°Π΄Π΅ΡΡΡ, Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠΎΠΊΠ΅Π½Ρ (Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ), ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ TTL.
ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ.
https://www.consul.io/api/acl/acl.html#logout-from-auth-method https://www.consul.io/docs/acl/acl-auth-methods.html#overall-login-process
Π’Π°ΠΊΠΆΠ΅ ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
Π ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ²Π΅Π»Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Ρ ClickHouse Π±Π΅Π· Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ClickHouse Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ GitLab CI/CD Π’ΡΠΈ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Docker-ΠΎΠ±ΡΠ°Π·ΠΎΠ² Traefik ΠΊΠ°ΠΊ Ingress-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π΄Π»Ρ K8S Π Π΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΡ web-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Telegram-Π±ΠΎΡ Π΄Π»Ρ Redmine. ΠΠ°ΠΊ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΡΠ΅Π±Π΅ ΠΈ Π»ΡΠ΄ΡΠΌ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com