Samodejno ustvarjanje skrivnosti v Helmu

Samodejno ustvarjanje skrivnosti v Helmu

Ekipa Kubernetes aaS iz Mail.ru prevedel kratek zapis o tem, kako samodejno ustvariti skrivnosti Helm pri posodabljanju. Sledi besedilo avtorja članka - tehničnega direktorja podjetja Intoware, ki razvija SaaS rešitve.

Posode so kul. Sprva sem bil proti zabojniku (sram me je priznati), zdaj pa popolnoma podpiram uporabo te tehnologije. Če berete to, upamo, da ste uspešno krmarili po morju Dockerja, spoznali prednosti Kubernetesa in si s Helmom precej olajšali življenje.

Vendar pa so nekatere stvari očitno težje, kot bi morale biti.

Kako samodejno ustvariti skrivnosti pri posodabljanju?

Skrivnost Kubernetes je vir, ki vsebuje pare ključ/vrednost, ki jih želite uporabiti v svoji kodi. To so lahko povezovalni nizi baze podatkov, gesla za e-pošto itd. Z uporabo skrivnosti ustvarite jasno ločitev med kodo in nastavitvami, kar vam omogoča enostavno prilagajanje različnih uvedb brez spreminjanja kodne baze.

Običajna situacija je, ko morata dva modula komunicirati z uporabo skupnega ključa. Nihče zunaj gruče ne sme poznati tega ključa, saj je namenjen komunikaciji ena na ena znotraj gruče.

Ustvarjanje skrivnosti

Običajno morate za ustvarjanje skrivnosti v Helmu:

  • opišite skrivnost v datoteki vrednosti;
  • na novo ga določite med uvajanjem;
  • sklicevati se na to znotraj razmestitve/poda;
  • ... dobiček!

Ponavadi je videti nekako takole:

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

Preprosta skrivnost Kubernetes z uporabo vrednosti iz values.yml

Toda recimo, da ne želite podati svoje skrivnosti v datoteki vrednosti.

Obstaja veliko možnosti, ko uvedba zahteva skupni ključ, ki ga je treba ustvariti med namestitvijo.

V zgornjem primeru komunikacije med moduli ni zaželeno deliti skrivnosti zunaj uvedbe. Zato je zelo zaželeno, da ima Helm mehanizme za samodejno ustvarjanje skrivnosti, ne da bi jo morali neposredno določiti.

Kljuke

Kavlji vam omogočajo zagon kode na določenih lokacijah med postopkom namestitve. Morda obstaja konfiguracijsko opravilo, ki ga je treba zagnati po prvi namestitvi, ali pa je treba izvesti čiščenje, preden izvedete katero koli posodobitev.

Za rešitev naše težave z dodajanjem ključa, ustvarjenega med namestitvijo, so idealne zanke pred namestitvijo. Vendar obstaja ulov: skrivnosti ne morete samodejno ustvariti ob posodobitvi. Trnke bodo delovale pri vsaki posodobitvi.

Če ste ustvarili svojo skrivnost in vaša prva namestitev še ni bila izvedena, potem nehajte brati, prednamestitveni kavelj vam bo odlično služil.

Če pa je skrivnost del posodobitve (morda nova funkcija, ki je med namestitvijo ni bilo), potem je škoda, da ne morete ustvariti kljuke pred namestitvijo, ki bi delovala samo enkrat.

Funkcije

Funkcije Helm vam omogočajo dodajanje različnih skriptnih elementov vašim skriptom za uvajanje.

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

Ta primer kaže, da bo vrednost skrivnosti apiKey novi UUID, ustvarjen med namestitvijo.

Helm vključuje resnično obsežno knjižnico funkcij, ki izkorišča neverjetne funkcije predloge GO in Sprigovo knjižnico funkcij za ustvarjanje uvedb po meri.

Funkcija iskanja

Dodano v Helm 3.1 Funkcija iskanja, ki vam omogoča, da zahtevate obstoječo uvedbo in:

  • preverite obstoj sredstev;
  • vrne vrednost obstoječega vira za kasnejšo uporabo.

Z uporabo obeh teh zmožnosti lahko ustvarimo enkratno, dinamično generirano skrivnost!

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

Kadarkoli je na strežniku uporabljena nova posodobitev, bo Helm ustvaril novo skrivno vrednost (če skrivnosti še ni) ali ponovno uporabi obstoječo vrednost.

Srečno!

Kaj še prebrati na to temo:

  1. Tri ravni samodejnega skaliranja v Kubernetesu in kako jih učinkovito uporabljati.
  2. Kubernetes v duhu piratstva s predlogo za implementacijo.
  3. Naš kanal Around Kubernetes v Telegramu.

Vir: www.habr.com

Dodaj komentar