Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

ВсС Π²Π΅Ρ€Π½ΠΎ, послС Ρ€Π΅Π»ΠΈΠ·Π° Hashicorp Consul 1.5.0 Π² Π½Π°Ρ‡Π°Π»Π΅ мая 2019 Π³ΠΎΠ΄Π° Π² Consul ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ слуТб, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π² Kubernetes, Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ.

Π’ этом руководствС ΠΌΡ‹ шаг Π·Π° шагом создадим POC (ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ (Proof of concept, PoC β€” Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ [осущСствимости] ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².), продСмонстрировав эту Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠžΡ‚ вас ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ΡΡ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΎ Kubernetes ΠΈ Hashicorp’s Consul. И хотя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΎΠ±Π»Π°Ρ‡Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ срСду, Π² этом руководствС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Google’s Cloud Platform.

ΠžΠ±Π·ΠΎΡ€

Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Consul ΠΏΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π΅Π³ΠΎ назначСния ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π― Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСйчас я Π±ΡƒΠ΄Ρƒ всС это ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΈ Ρ€Π°Π·ΠΆΠ΅Π²Ρ‹Π²Π°Ρ‚ΡŒ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π‘Ρ…Π΅ΠΌΠ° 1: ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Consul

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Kubernetes.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ полСзная информация, Π½ΠΎ Π½Π΅Ρ‚ руководства ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ всС это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ любой здравомыслящий Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, Π²Ρ‹ прочСсываСтС Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π² поисках руководства. А потом… Π’Π΅Ρ€ΠΏΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ это исправим.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ созданию нашСго POC, Π΄Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся ΠΊ ΠΎΠ±Π·ΠΎΡ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Consul (Π‘Ρ…Π΅ΠΌΠ° 1) ΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ Π΅Π³ΠΎ Π² контСкстС Kubernetes.

АрхитСктура

Π’ этом руководствС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Consul-сСрвСр Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ машинС, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с кластСром Kubernetes с установлСнным ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Consul. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создадим нашС Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ наш настроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ для чтСния ΠΈΠ· нашСго Consul key/value Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Π‘Ρ…Π΅ΠΌΠ° Π½ΠΈΠΆΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ создаСм Π² этом руководствС, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ объяснСна ΠΏΠΎΠ·ΠΆΠ΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π‘Ρ…Π΅ΠΌΠ° 2: ΠžΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Kubernetes

НСбольшоС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Consul-сСрвСру Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΆΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ кластСра Kubernetes, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ. Но Π΄Π°, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Ρ‚Π°ΠΊ ΠΈ сяк.

Π˜Ρ‚Π°ΠΊ, взяв ΠΎΠ±Π·ΠΎΡ€Π½ΡƒΡŽ схСму Consul (Π‘Ρ…Π΅ΠΌΠ° 1) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΊ Π½Π΅ΠΉ Kubernetes, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ схСму Π²Ρ‹ΡˆΠ΅ (Π‘Ρ…Π΅ΠΌΠ° 2), ΠΈ Ρ‚ΡƒΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

  1. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° слуТСбная учСтная запись, содСрТащая Ρ‚ΠΎΠΊΠ΅Π½ JWT, сгСнСрированный ΠΈ извСстный Kubernetes. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ вставляСтся Π² ΠΏΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
  2. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сСрвис Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ…ΠΎΠ΄Π° Π² наш Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π’ запросС Π½Π° Π²Ρ…ΠΎΠ΄ Π² систСму Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ наш Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ созданного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (Ρ‚ΠΈΠΏΠ° Kubernetes). Π­Ρ‚ΠΎΡ‚ шаг β„– 2 соотвСтствуСт ΡˆΠ°Π³Ρƒ 1 схСмы Consul (Π‘Ρ…Π΅ΠΌΠ° 1).
  3. Наш Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ этот запрос Π½Π° наш Consul-сСрвСр.
  4. ΠœΠΠ“Π˜Π―! ИмСнно здСсь Consul-сСрвСр провСряСт ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ запроса, собираСт свСдСния ΠΎΠ± идСнтичности запроса ΠΈ сравниваСт ΠΈΡ… с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ассоциированными ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. НиТС Π±ΡƒΠ΄Π΅Ρ‚ другая схСма, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ шаг соотвСтствуСт шагам 3, 4 ΠΈ 5 ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΠΉ схСмы Consul (Π‘Ρ…Π΅ΠΌΠ° 1).
  5. Наш Consul-сСрвСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Consul Ρ‚ΠΎΠΊΠ΅Π½ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π°ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ) Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ личности Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ этот Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π­Ρ‚ΠΎ соотвСтствуСт ΡˆΠ°Π³Ρƒ 6 схСмы Consul (Π‘Ρ…Π΅ΠΌΠ° 1).
  6. Наш Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пСрСнаправляСт Ρ‚ΠΎΠΊΠ΅Π½ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ сСрвису.

НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сСрвис Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Consul Ρ‚ΠΎΠΊΠ΅Π½ для связи с нашими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Consul, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ привилСгиями Ρ‚ΠΎΠΊΠ΅Π½Π°.

Π’ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ раскрыто!

Для Ρ‚Π΅Ρ… ΠΈΠ· вас, ΠΊΡ‚ΠΎ Π½Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ всСго лишь ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ· ΡˆΠ»ΡΠΏΡ‹ ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это работаСт… ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ Β«ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, насколько Π³Π»ΡƒΠ±ΠΎΠΊΠ° ΠΊΡ€ΠΎΠ»ΠΈΡ‡ΡŒΡ Π½ΠΎΡ€Π°Β».

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, наш «магичСский» шаг (Π‘Ρ…Π΅ΠΌΠ° 2: Π¨Π°Π³ 4) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Consul-сСрвСр провСряСт ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ запроса, собираСт свСдСния ΠΎΠ± запросС ΠΈ сравниваСт ΠΈΡ… с Π»ΡŽΠ±Ρ‹ΠΌΠΈ ассоциированными ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ шаг соотвСтствуСт шагам 3, 4 ΠΈ 5 ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΠΉ схСмы Consul (Π‘Ρ…Π΅ΠΌΠ° 1). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° схСма (Π‘Ρ…Π΅ΠΌΠ° 3), Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ наглядно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ происходит ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Kubernetes.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π‘Ρ…Π΅ΠΌΠ° 3: Π’ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ раскрыто!

  1. Π’ качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, наш Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пСрСнаправляСт запрос Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π° наш Consul-сСрвСр с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи Kubernetes ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ инстанса ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎΡ‚ шаг соотвСтствуСт ΡˆΠ°Π³Ρƒ 3 Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ объяснСнии схСмы.
  2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Consul-сСрвСру (ΠΈΠ»ΠΈ Π»ΠΈΠ΄Π΅Ρ€Ρƒ) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с кластСром Kubernetes (Ρ‡Π΅Ρ€Π΅Π· Consul-ΠΊΠ»ΠΈΠ΅Π½Ρ‚) ΠΈ, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΌΡ‹ выясним, являСтся Π»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, ΠΈ ΠΊΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚.
  3. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ запрос возвращаСтся ΠΊ Consul-Π»ΠΈΠ΄Π΅Ρ€Ρƒ, ΠΈ Π½Π° сСрвСрС Consul выполняСтся поиск инстанса ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ· запроса Π½Π° Π²Ρ…ΠΎΠ΄ Π² систСму (ΠΈ Ρ‚ΠΈΠΏΠ° Kubernetes).
  4. Consul-Π»ΠΈΠ΄Π΅Ρ€ опрСдСляСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ инстанс ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (Ссли ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½) ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» привязки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ эти ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ сравниваСт ΠΈΡ… с ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ идСнтичности.
  5. Π’Π°Π΄Π°! ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡˆΠ°Π³Ρƒ 5 Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ объяснСнии схСмы.

ЗапуститС Consul-server Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° я Π² основном Π±ΡƒΠ΄Ρƒ Π΄Π°Π²Π°Ρ‚ΡŒ инструкции ΠΏΠΎ созданию этого POC, часто Π² ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ…, Π±Π΅Π· ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GCP для создания всСй инфраструктуры, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ инфраструктуру Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

  • ЗапуститС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ (инстанс / сСрвСр).

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для firewall (Π³Ρ€ΡƒΠΏΠΏΠ° бСзопасности Π² AWS):
  • МнС нравится ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ ΠΈ сСтСвому Ρ‚Π΅Π³Ρƒ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Β«skywiz-consul-server-pocΒ».
  • НайдитС IP-адрСс вашСго локального ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² список исходных IP-адрСсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ интСрфСйсу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (UI).
  • ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠΎΡ€Ρ‚ 8500 для UI. НаТмитС Create (Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ). ΠœΡ‹ скоро ΠΎΠΏΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ этот firewall [ссылка].
  • Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для firewall ΠΊ инстансу. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π½Π° панСль ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° VM Π½Π° Consul-сСрвСрС ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Β«skywiz-consul-server-pocΒ» Π² ΠΏΠΎΠ»Π΅ сСтСвых Ρ‚Π΅Π³ΠΎΠ². НаТмитС Save (Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ).

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

  • УстановитС 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Β».

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

  • Как ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅, Π²ΠΎΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ руководство, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я столкнулся ΠΏΡ€ΠΈ настройкС 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.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

  • ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ Consul UI, ΠΈ Ρ‡Π΅Ρ€Π΅Π· нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ наш кластСр появится Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π½ΠΎΠ΄.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

Настройка ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ 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) ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ Ρ€ΠΎΠ»ΠΈ для Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ. ΠœΡ‹ сдСлаСм привязки ΠΏΠΎΠ·ΠΆΠ΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Hashicorp Consul’s Kubernetes ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ тСст пространства ΠΈΠΌΠ΅Π½:

  • Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ нашС собствСнноС пространство ΠΈΠΌΠ΅Π½:

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.

Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своСй Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· систСмы.

Π’Π°ΠΊΠΆΠ΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com