Helmi saladuste automaatne genereerimine

Helmi saladuste automaatne genereerimine

Meeskond Kubernetes aaS Mail.ru-lt Tõlkisin lühikese märkuse kuidas automaatselt genereerida Helm'i saladusi uuendamisel. Edasi on tekst artikli autorilt — Intoware'i tehniliselt direktorilt, SaaS-lahenduste arendajafirmalt.

Konteinerid on vinge. Alguses olin konteinerite vastane (häbi tunnistada), kuid nüüd toetangi täielikult selle tehnoloogia kasutamist. Kui sa seda loed, siis loodan, et oled edukalt sealsete Dockerite meredes navigeerinud, tunnustanud Kubernetes'e eeliseid ja teinud oma elu palju lihtsamaks Helm'iga.

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

Kuidas automaatselt genereerida saladusi uuendamisel?

Kubernetes'e 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. Kasutades saladusi, loote selge eraldi koodist ja seadistustest, mis võimaldab kergesti konfigureerida erinevaid juurutusi ilma koodibaasi muutmata.

Sageli esinev olukord, kus kaks moodulit peavad suhtlema ühise võtme kaudu. Keegi väljaspool klastrit ei tohiks seda võtme teada, kuna see on mõeldud suhtlemiseks 'ühelt teisele' klastris.

Saladuste loomine

Tavaliselt, et luua saladus Helm'is, tuleb:

  • kirjeldada saladust väärtuste failis;
  • ületada see juurutamise protsessis;
  • viidata sellele juurutamises/pod'is;
  • … kasum!

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

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

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

Eelnevas näites moodulite vahelise suhtlemise osas ei ole soovitatav saladust jagada juurutamise välises teises. Seepärast on väga oluline, et Helm'il oleks mehhanismid automaatseks saladuse loomiseks ilma selle otsese näitamiseta.

Hook'id

Hookid võimaldavad koodi käivitada teatud kohtades paigaldamisprotsessi vältel. Võib-olla on konfiguratsiooniteenus, mis tuleb käivitada pärast esmast paigaldamist, või võib-olla tuleb enne igasuguste värskenduste tegemist midagi puhastada.

Meie probleemi lahendamiseks, kus paigaldamisel genereeritakse võtme, sobivad ideaalselt eelinstallimise hookid. Kuid on üks pisiasi: te ei saa automaatselt ühe korra salajast genereerida värskendamise käigus. Hookid toimivad iga värskenduse käigus.

Kuid kui olete juba oma salajase võtme genereerinud ja teie esmane paigaldamine pole veel toimunud, siis lõpetage lugemine, eelinstallimise hook sobib teile ideaalselt.

Kuid kui saladus on osa värskendusest (võib-olla uue funktsiooni osas, mida paigaldamise ajal polnud), siis on kahju, et ei saa luua eelinstallimise hooki, mis toimiks vaid korra.

Funktsioonid

Helmi funktsioonid võimaldavad lisada erinevaid skripte paigaldusstsenaariumitesse.

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

Selles näites on apiKey saladuse väärtus uus UUID, mis on genereeritud paigalduse käigus.

Helm sisaldab tõeliselt ulatuslikku funktsioonide raamatukogu, mis kasutab GO mallide hämmastavaid funktsioone ja Sprigi funktsiooniraamatukogu kohandatud paigalduste loomiseks.

Funktsioon Lookup

Helm 3.1 toob sisse funktsiooni Lookup, mis võimaldab pärida olemasolevat deploy'd ja:

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

Kasutades neid kahte võimalust, saame luua ühekordselt 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 värskendus, genereerib Helm kas uue salajase väärtuse (kui saladust veel ei ole) või kordab olemasoleva väärtuse kasutamist.

Edu!

Mida veel selle kohta lugeda:

  1. Kubernetes'is on kolm automaatskaalumise taset ja kuidas neid tõhusalt kasutada.
  2. 🥇Kuidas rahulikult magada, kui teil on pilveteenus: peamised arhitektuuri nõuanded | ProHoster.
  3. Meie Tee Kuberneetes kanal Telegrmis.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster