Saladuste automaatne genereerimine Helmis

Saladuste automaatne genereerimine Helmis

Meeskond Kubernetes aaS saidilt Mail.ru tõlkis lühikese märkuse Kuidas Helmi saladusi värskenduste ajal automaatselt genereerida. Järgnev tekst pärineb autorilt, SaaS-arendaja Intoware'i tehnoloogiajuhilt.

Konteinerid on suurepärased. Alguses olin konteinerite vastane (piinlik tunnistada), aga nüüd olen selle tehnoloogia täielik toetaja. Kui sa seda loed, siis loodan, et oled edukalt Dockeri meredes navigeerinud, Kubernetes'i eeliseid mõistnud ja Helmiga oma elu palju lihtsamaks teinud.

Siiski on mõned asjad selgelt keerulisemad, kui nad peaksid olema.

Kuidas värskenduse ajal automaatselt saladusi genereerida?

Kubernetesi salakood on ressurss, mis sisaldab võtme/väärtuse paare, mida soovite oma koodis kasutada. Need võivad olla andmebaasi ühendusstringid, e-posti paroolid jne. Salakoodide kasutamine loob selge eristuse koodi ja konfiguratsiooni vahel, võimaldades teil hõlpsalt konfigureerida erinevaid juurutusi ilma koodibaasi muutmata.

Levinud olukord on see, kui kaks moodulit peavad suhtlema jagatud võtme abil. Keegi väljaspool klastrit ei tohiks seda võtit teada, kuna see on mõeldud klastri siseseks "üks-ühele" suhtluseks.

Saladuste loomine

Tavaliselt peate Helmis salajase koodi loomiseks tegema järgmist:

  • kirjeldage väärtuste failis olevat saladust;
  • tühistada see juurutamise ajal;
  • viita sellele juurutuse/podi sees;
  • ... kasumit!

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 Kubernetesi saladus, mis kasutab väärtusi failist values.yml

Aga oletame, et te ei soovi oma saladust väärtuste failis määrata.

On palju stsenaariume, kus juurutamine nõuab jagatud võtit, mis tuleb installimise ajal genereerida.

Ülaltoodud podidevahelise suhtluse näites on salajase võtme jagamine väljaspool juurutust ebasoovitav. Seetõttu oleks väga soovitav, et Helmil oleksid mehhanismid salajase võtme automaatseks genereerimiseks ilma seda otseselt määramata.

Konksud

Konksud võimaldavad teil koodi installiprotsessi teatud punktides käivitada. Võib-olla on pärast esialgset installimist vaja käivitada installimisülesanne või enne värskendusi tuleb teha puhastusülesanne.

Installieelsed konksud sobivad ideaalselt meie probleemi lahendamiseks, mis seisneb installimise ajal genereeritud võtme lisamises. Siiski on üks konks: saladust ei saa automaatselt genereerida ainult üks kord värskenduse ajal. Konksud käivituvad iga värskenduse korral.

Kui oled oma salakoodi genereerinud ja esimene install pole veel toimunud, siis lõpeta lugemine, eelinstallimise konks on sinu jaoks ideaalne.

Aga kui saladus on osa uuendusest (võib-olla uus funktsioon, mida installimise ajal polnud), siis on kahju, et pole võimalik luua eelinstalli konksu, mis käivituks 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äärtuseks on installimise ajal genereeritud uus UUID.

Helm sisaldab tõeliselt ulatuslikku funktsioonide teeki, mis kasutab GO hämmastavaid mallimisfunktsioone ja Sprigi funktsioonide teeki kohandatud juurutuste loomiseks.

Otsingufunktsioon

Lisatud Helm 3.1-s Otsingufunktsioon, mis võimaldab teil päringuid teha olemasoleva juurutuse kohta ja:

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

Mõlema funktsiooni abil 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, genereerib Helm kas uue salajase väärtuse (kui salajane väärtus pole veel olemas) 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

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster