Automātiska noslēpumu ģenerēšana Helmā

Automātiska noslēpumu ģenerēšana Helmā

Komanda Kubernetes aaS no Mail.ru iztulkoja īsu piezīmi par to, kā atjaunināšanas laikā automātiski ģenerēt Helm noslēpumus. Tālāk teksts no raksta autora - SaaS risinājumu izstrādes uzņēmuma Intoware tehniskā direktora.

Konteineri ir forši. Sākumā es biju pret konteineru (man ir neērti to atzīt), bet tagad es pilnībā atbalstu šīs tehnoloģijas izmantošanu. Ja lasāt šo, cerams, ka esat veiksmīgi orientējies Docker jūrās, sapratis Kubernetes priekšrocības un padarījis savu dzīvi daudz vieglāku ar Helmu.

Tomēr dažas lietas acīmredzami ir grūtākas, nekā tām vajadzētu būt.

Kā automātiski ģenerēt noslēpumus atjaunināšanas laikā?

Kubernetes noslēpums ir resurss, kas satur atslēgu/vērtību pārus, kurus vēlaties izmantot savā kodā. Tās varētu būt datu bāzes savienojuma virknes, e-pasta paroles un tā tālāk. Izmantojot noslēpumus, jūs izveidojat skaidru atdalīšanu starp kodu un iestatījumiem, ļaujot viegli pielāgot dažādus izvietojumus, nemainot kodu bāzi.

Bieži sastopama situācija, kad diviem moduļiem ir jāsazinās, izmantojot kopīgu atslēgu. Nevienam ārpus klastera nevajadzētu zināt šo atslēgu, jo tā ir paredzēta savstarpējai saziņai klasterī.

Noslēpumu veidošana

Parasti, lai Helm izveidotu noslēpumu, jums ir nepieciešams:

  • aprakstiet noslēpumu vērtību failā;
  • no jauna definējiet to izvietošanas laikā;
  • atsaukties uz to izvietošanas/podā;
  • ... peļņa!

Parasti tas izskatās apmēram šādi:

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ .Values.MyApiKeySecret | quote }}

Vienkāršs Kubernetes noslēpums, izmantojot vērtības no vērtības.yml

Bet pieņemsim, ka nevēlaties norādīt savu noslēpumu vērtību failā.

Ir daudz iespēju, kad izvietošanai ir nepieciešama koplietojama atslēga, kas jāģenerē instalēšanas laikā.

Iepriekš minētajā saziņas piemērā starp moduļiem nav vēlams kopīgot noslēpumu ārpus izvietošanas. Tāpēc ir ļoti vēlams, lai Helm būtu mehānismi, kas automātiski ģenerē noslēpumu, nenorādot to tieši.

Āķi

Āķi ļauj palaist kodu noteiktās vietās instalēšanas procesa laikā. Iespējams, ka pēc pirmās instalēšanas ir jāpalaiž konfigurācijas darbs, vai arī pirms atjaunināšanas ir jāveic tīrīšana.

Lai atrisinātu mūsu problēmu saistībā ar instalēšanas laikā ģenerētas atslēgas pievienošanu, pirmsinstalēšanas āķi ir ideāli piemēroti. Taču ir kāds āķis: jūs nevarat automātiski ģenerēt noslēpumu vienu reizi atjaunināšanas laikā. Āķi darbosies katrā atjauninājumā.

Ja esat ģenerējis savu noslēpumu un jūsu pirmā instalēšana vēl nav notikusi, pārtrauciet lasīt, pirmsinstalēšanas āķis jums lieliski noderēs.

Bet, ja noslēpums ir daļa no atjauninājuma (iespējams, jauna funkcija, kuras instalēšanas laikā nebija), tad žēl, ka nevarat izveidot pirmsinstalācijas āķi, kas darbojas tikai vienu reizi.

Funkcijas

Helm funkcijas ļauj izvietošanas skriptiem pievienot dažādus skriptu elementus.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it

Šis piemērs parāda, ka apiKey noslēpuma vērtība būs jaunais UUID, kas ģenerēts instalēšanas laikā.

Helm ietver patiesi plašu funkciju bibliotēku, kas izmanto pārsteidzošās GO veidņu funkcijas un Sprig funkciju bibliotēku, lai izveidotu pielāgotus izvietojumus.

Uzmeklēšanas funkcija

Pievienots Helm 3.1 Uzmeklēšanas funkcija, kas ļauj pieprasīt esošu izvietošanu un:

  • pārbaudīt resursu esamību;
  • atgriezt esošā resursa vērtību vēlākai lietošanai.

Izmantojot abas šīs iespējas, mēs varam izveidot vienreizēju, dinamiski ģenerētu noslēpumu!

# 1. Запросить существование секрета и вернуть в переменной $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
  name: some-awesome-secret
type: Opaque

# 2. Если секрет существует, взять его значение как apiKey (секрет использует кодирование Base64, так что используйте ключ "data")
{{ if $secret -}}
data:
  apiKey: {{ $secret.data.apiKey }}

# 3. Если секрет не существует — создать его (в этот раз используйте "stringData", так как будет обычное значение)!
{{ else -}}
stringData:
  apiKey: {{ uuidv4 | quote }}
{{ end }}

Ikreiz, kad serverim tiek lietots jauns atjauninājums, Helm vai nu ģenerēs jaunu slepeno vērtību (ja vēl nav noslēpuma), vai atkārtoti izmantos esošo vērtību.

Veiksmi!

Ko vēl lasīt par tēmu:

  1. Trīs automātiskās mērogošanas līmeņi programmā Kubernetes un to efektīva izmantošana.
  2. Kubernetes pirātisma garā ar veidni ieviešanai.
  3. Mūsu kanāls Ap Kubernetes telegrammā.

Avots: www.habr.com

Pievieno komentāru