Saladuste automaatne genereerimine Helmis

Saladuste automaatne genereerimine Helmis

Meeskond Kubernetes aaS saidilt Mail.ru tõlkinud lühikese märkuse selle kohta, kuidas värskendamisel automaatselt luua Helmi saladusi. Järgneb tekst artikli autorilt – SaaS-lahendusi arendava ettevõtte Intoware tehniliselt direktorilt.

Konteinerid on lahedad. Algul olin konteinerivastane (mul on piinlik seda tunnistada), kuid nüüd toetan täielikult selle tehnoloogia kasutamist. Kui te seda loete, olete loodetavasti edukalt Dockeri merel navigeerinud, mõistnud Kubernetese eeliseid ja muutnud oma elu Helmiga palju lihtsamaks.

Mõned asjad on aga ilmselgelt raskemad, kui vaja.

Kuidas värskendamisel automaatselt saladusi genereerida?

Kubernetese saladus on ressurss, mis sisaldab võtme/väärtuse paare, mida soovite oma koodis kasutada. Need võivad olla andmebaasi ühenduse stringid, e-posti paroolid ja nii edasi. Saladusi kasutades loote koodi ja sätete vahel selge vahe, võimaldades teil hõlpsasti kohandada erinevaid juurutusi ilma koodibaasi muutmata.

Levinud on olukord, kus kaks moodulit peavad suhtlema ühise võtme abil. Keegi väljaspool klastrit ei tohiks seda võtit teada, kuna see on mõeldud klastrisiseseks üks-ühele suhtluseks.

Saladuste tegemine

Tavaliselt on Helmis saladuse loomiseks vaja:

  • kirjeldage väärtuste failis saladust;
  • määrake see juurutamise ajal uuesti;
  • viita sellele juurutuse/kassi sees;
  • ... kasum!

Tavaliselt näeb see välja umbes selline:

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

Lihtne Kubernetese saladus, mis kasutab väärtusi failist Values.yml

Kuid oletame, et te ei soovi väärtuste failis oma saladust täpsustada.

Kui juurutamiseks on vaja ühisvõtit, mis tuleb installimise ajal genereerida, on palju võimalusi.

Ülaltoodud moodulitevahelise suhtluse näites ei ole soovitav jagada saladust väljaspool juurutamist. Seetõttu on väga soovitav, et Helmil oleks mehhanismid saladuse automaatseks genereerimiseks ilma seda otse täpsustamata.

Konksud

Konksud võimaldavad teil installiprotsessi ajal käivitada koodi kindlates kohtades. Võimalik, et pärast esimest installimist tuleb käivitada konfiguratsioonitöö või võib-olla tuleb enne värskenduste tegemist puhastada.

Paigaldamise käigus genereeritud võtme lisamise probleemi lahendamiseks sobivad ideaalselt paigalduseelsed konksud. Kuid sellel on konks: te ei saa värskenduse ajal automaatselt saladust genereerida. Konksud töötavad iga värskenduse korral.

Kui olete oma saladuse loonud ja teie esimene installimine pole veel toimunud, siis lõpetage lugemine, eelinstalli konks töötab teie jaoks suurepäraselt.

Aga kui saladus on osa uuendusest (võib-olla mõni uus funktsioon, mida installimise ajal polnud), siis on kahju, et te ei saa luua eelinstallikonksu, mis töötab ainult üks kord.

Funktsioonid

Helmi funktsioonid võimaldavad teil juurutusskriptidele lisada erinevaid skriptielemente.

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

See näide näitab, et apiKey saladuse väärtus on installimise ajal loodud uus UUID.

Helm sisaldab tõeliselt ulatuslikku funktsiooniteeki, mis kasutab kohandatud juurutuste loomiseks hämmastavaid GO mallifunktsioone ja Sprig funktsiooniteeki.

Otsimise funktsioon

Lisatud Helm 3.1 Otsimise funktsioon, mis võimaldab teil taotleda olemasolevat juurutamist ja:

  • kontrollida ressursside olemasolu;
  • tagastab olemasoleva ressursi väärtuse hilisemaks kasutamiseks.

Kasutades mõlemat võimalust, saame luua ühekordse dünaamiliselt genereeritud saladuse!

# 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 }}

Iga kord, kui serverile rakendatakse uus värskendus, loob Helm uue salajase väärtuse (kui saladust veel pole) või kasutab olemasolevat väärtust uuesti.

Õnn kaasa!

Mida muud selle teema kohta lugeda:

  1. Kolm automaatse skaleerimise taset Kubernetes ja kuidas neid tõhusalt kasutada.
  2. Kubernetes piraatluse vaimus koos rakenduse malliga.
  3. Meie kanal Kubernetese ümber Telegramis.

Allikas: www.habr.com

Lisa kommentaar