Salajaste automaatne genereerimine Helm'is

Salajaste automaatne genereerimine Helm'is

Meeskond Mail.ru Kubernetes aaS kuid on lühikese märkme tõlkis kuidas automaatselt genereerida Helm'i salasõnu uuendamisel. Edasi on autori tekst – Intoware'i tehnilise direktori, SaaS-lahenduste arendaja ettevõtte.

Konteinerid on ägedad. Alguses olin konteinerite vastane (häbi tunnistada), aga nüüd toetan selle tehnoloogia kasutamist täiesti. Kui te seda loete, siis loodetavasti olete edukalt ujunud Docker'i meredes, aru saanud Kubernetes'e eelistest ja teinud oma elu palju lihtsamaks Helm'iga.

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

Kuidas automaatselt genereerida salasõnu uuendamisel?

Kubernetes'i 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 jne. Salasid kasutades loote selge eraldatuse koodi ja seadistuste vahel, mis võimaldab hõlpsalt konfigureerida erinevaid juurutusi ilma koodibaasi muutmata.

Tavaliselt peab kaks moodulit suhtlema ühise võtme kaudu. Keegi klastrist väljas ei tohiks seda key teada, kuna see on mõeldud suhtlemiseks "ühelt teisele" klastris.

Saladuste loomine

Tavaliselt peab Helm'is saladuse loomiseks:

  • kirjeldama saladust väärtuste failis;
  • ülekirjutama selle juurutamise ajal;
  • viitama sellele juurutamises/paigalduses;
  • … kasu!

Tavaliselt näeb see välja umbes nii:

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

Lihtne Kubernetes'i saladus, kasutades väärtusi from values.yml

Aga oletame, et te ei soovi oma saladust väärtuste failis näidata.

On palju variante, kus juurutamiseks on vajalik ühine võti, mis tuleb genereerida installimise ajal.

Eeltoodud näites, kus moodulite vahel toimub suhtlemine, ei ole soovitatav saladust jagada juurutamisest väljaspool. Seetõttu on väga soovitav, et Helmil oleks mehhanismid saladuse automaatseks loomiseks ilma selle otse näitamise vajaduseta.

Haanikud

Hookid võimaldavad käivitada koodi teatud kohtades installimisprotsessis. Võib-olla on olemas seadistusülesanne, mille peate käivitama pärast esimest paigaldust, või on võib-olla vajalik puhastus enne igasuguste uuenduste tegemist.

Meie probleemi lahendamiseks, milleks on paigalduse ajal genereeritud võtme lisamine, sobivad ideaalselt eelinstallitud hookid. Kuid on üks aga: te ei saa automaatselt genereerida saladust uuenduse ajal. Hookid töötavad igas uuenduses.

Kui olete oma saladuse genereerinud ja teie esimene paigaldus veel ei toimunud, siis lõpetage lugemine – eelinstallitud hook on sel juhul teile suurepärane valik.

Kuid kui saladus on uuenduse osa (võib-olla uue funktsiooni tõttu, mida paigaldamise ajal ei olnud), siis on kahju, et ei ole võimalik luua eelinstallitud hooki, mis töötaks ainult üks kord.

Funktsioonid

Helmi funktsioonid võimaldavad lisada erinevaid skripti elemente juurutamisstsenaariumitesse.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Genereeri uus UUID ja tsiteeri see

Selles näites on apiKey salajase väärtuseks uhiuus UUID, mis genereeritakse paigaldamise ajal.

Helm sisaldab tõeliselt ulatuslikku funktsioonide teeki, mis kasutab imelisi GO mallifunktsioone ja Sprigi funktsiooniteeki, et luua kohandatud juurutusi.

Lookup funktsioon

Helm 3.1 toob kaasa Lookup funktsiooni, mis võimaldab küsida olemasolevat juurutust ja:

  • kontrollida ressursside olemasolu;
  • tagastada olemasoleva ressursi väärtus edasiseks kasutamiseks.

Kasutades mõlemaid neid võimalusi, saame luua ühekordse dünaamiliselt genereeritud salajase!

# 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 uuendus, genereerib Helm kas uue salajase väärtuse (kui salajast veel pole) või kasutab olemasolevat väärtust uuesti.

Edu!

Mida veel teemast lugeda:

  1. Kuberneteses on kolm taset automaatset skaleerimist ja kuidas neid tõhusalt kasutada.
  2. Kubernetes piraatluses juurutamise malliga.
  3. Meie kanal Kubernetesest Telegramis.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster