Meeskond Kubernetes aaS saidilt Mail.rutõ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.
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.