Auto-generazione di sicreti in Helm

Auto-generazione di sicreti in Helm

squadra Kubernetes aaS da Mail.ru traduttu una breve nota circa cumu generà automaticamente i secreti Helm quandu aghjurnà. U seguente hè un testu di l'autore di l'articulu - direttore tecnicu di Intoware, una cumpagnia chì sviluppa soluzioni SaaS.

I cuntenituri sò freschi. À u principiu era anti-container (sò vergogna d'admettellu), ma avà sustene cumplettamente l'usu di sta tecnulugia. Se leghjite questu, avete speratu chì hà navigatu cù successu in i mari di Docker, hà realizatu i benefici di Kubernetes è hà resu a vostra vita assai più faciule cù Helm.

Tuttavia, certe cose sò chjaramente più difficili di ciò chì deve esse.

Cumu generà automaticamente secreti quandu aghjurnà?

Un sicretu Kubernetes hè una risorsa chì cuntene coppie chjave / valore chì vulete usà in u vostru codice. Quessi puderanu esse strings di cunnessione di basa di dati, password di email, è cusì. Utilizendu sicreti, crea una separazione chjara trà u codice è i paràmetri, chì vi permette di persunalizà facilmente e diverse implementazioni senza cambià a basa di codice.

Una situazione cumuna hè quandu dui moduli devenu cumunicà cù una chjave cumuna. Nimu fora di u cluster ùn deve cunnosce sta chjave, postu chì hè destinata à una cumunicazione unu à unu in u cluster.

Fendu sicreti

Di genere, per creà un sicretu in Helm avete bisognu di:

  • discrivi u sicretu in u schedariu di valori;
  • ridefinisce durante l'implementazione;
  • riferite à questu in u deployment / pod;
  • ... prufittu !

Di solitu pare qualcosa cusì:

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

Un sicretu Kubernetes simplice utilizendu valori da values.yml

Ma dicemu chì ùn vulete micca specificà u vostru sicretu in u schedariu di valori.

Ci hè parechje opzioni quandu a implementazione richiede una chjave spartuta, chì deve esse generata durante a stallazione.

In l'esempiu di cumunicazione modulu à modulu quì sopra, ùn hè micca desideratu di sparte u sicretu fora di a implementazione. Dunque, hè assai desideratu chì Helm hà miccanismi per generà automaticamente un sicretu senza avè da specificà direttamente.

Ganci

I ganci permettenu di eseguisce codice in locu specifichi durante u prucessu di stallazione. Ci pò esse un travagliu di cunfigurazione chì deve esse eseguitu dopu a prima installazione, o forsi una pulizia deve esse fatta prima di fà qualsiasi aghjurnamentu.

Per risolve u nostru prublema di aghjunghje una chjave generata durante a stallazione, i ganci di pre-installazione sò ideali. Ma ci hè una cattura: ùn pudete micca generà automaticamente u sicretu una volta nantu à una aghjurnazione. Hooks funzionerà in ogni aghjurnamentu.

Se avete generatu u vostru sicretu è a vostra prima installazione ùn hè micca accaduta ancu allora cessate di leghje, u ganciu di pre-installazione hà da travaglià bè per voi.

Ma se u sicretu hè parte di una aghjurnazione (forse una nova funzione chì ùn era micca quì durante a stallazione), allora hè una vergogna chì ùn pudete micca creà un ganciu di pre-installazione chì funziona solu una volta.

Funzioni

E funzioni Helm vi permettenu di aghjunghje diversi elementi di scrittura à i vostri script di implementazione.

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

Questu esempiu mostra chì u valore di u sicretu apiKey serà u novu UUID generatu durante a stallazione.

Helm include una biblioteca di funzioni veramente estensiva chì sfrutta l'incredibili funzioni di mudelli GO è a biblioteca di funzioni di Sprig per creà implementazioni persunalizati.

Funzione di ricerca

Aggiuntu in Helm 3.1 Funzione di ricerca, chì vi permette di dumandà una implementazione esistente è:

  • verificate l'esistenza di risorse;
  • rinvià u valore di una risorsa esistente per un usu più tardi.

Utilizendu e duie capacità, pudemu creà un sicretu generatu dinamicamente una volta!

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

Ogni volta chì una nova aghjurnazione hè appiicata à u servitore, Helm hà da generà un novu valore secretu (se ùn ci hè ancu un sicretu) o riutilizà u valore esistente.

Bona furtuna!

Chì altru à leghje nantu à u tema:

  1. Trè livelli di autoscaling in Kubernetes è cumu aduprà in modu efficace.
  2. Kubernetes in u spiritu di pirateria cù un mudellu per l'implementazione.
  3. U nostru canale Intornu à Kubernetes in Telegram.

Source: www.habr.com

Add a comment