Helm-en sekretuak automatikoki sortzea

Helm-en sekretuak automatikoki sortzea

Team Kubernetes aaS Mail.ru-tik ohar labur bat itzuli zuen Helm sekretuak eguneratzean automatikoki sortzeari buruz. Artikuluaren egilearen testu bat da honakoa: Intoware-ko zuzendari teknikoa, SaaS soluzioak garatzen dituen enpresa.

Ontziak freskoak dira. Hasieran edukiontziaren aurkakoa nintzen (lotsa ematen dit aitortzeak), baina orain teknologia honen erabilera guztiz onartzen dut. Hau irakurtzen ari bazara, espero dugu Docker-eko itsasoetan arrakastaz nabigatu izana, Kubernetesen onurak konturatu eta Helm-ekin bizitza asko erraztu duzula.

Hala ere, argi dago gauza batzuk behar baino zailagoak direla.

Nola sortu automatikoki sekretuak eguneratzean?

Kubernetes sekretua zure kodean erabili nahi dituzun gako/balio bikoteak dituen baliabidea da. Hauek izan daitezke datu-basearen konexio-kateak, posta elektronikoko pasahitzak eta abar. Sekretuak erabiliz, kodearen eta ezarpenen arteko bereizketa argia sortzen duzu, eta, beraz, inplementazio desberdinak erraz pertsonaliza ditzakezu kode-oinarria aldatu gabe.

Egoera arrunta da bi modulu gako komun bat erabiliz komunikatu behar direnean. Klusterretik kanpoko inork ez luke gako hau ezagutu behar, kluster barruko bakarkako komunikaziorako pentsatuta baitago.

Sekretuak egitea

Normalean, Helm-en sekretu bat sortzeko:

  • deskribatu sekretua balioen fitxategian;
  • birdefinitu inplementazioan zehar;
  • aipatu hedapen/pod barruan;
  • ... irabazi!

Normalean honelako itxura du:

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

Kubernetes sekretu sinple bat values.yml-ko balioak erabiliz

Baina demagun ez duzula zure sekretua balioen fitxategian zehaztu nahi.

Aukera asko daude inplementazioak partekatutako gako bat behar duenean, instalazioan sortu behar dena.

Goiko modulutik modulu komunikazio adibidean, ez da desiragarria inplementaziotik kanpo sekretua partekatzea. Horregatik, oso desiragarria da Helm-ek sekretu bat automatikoki sortzeko mekanismoak izatea, zuzenean zehaztu beharrik gabe.

Amuak

Hook-ek instalazio-prozesuan zehar kode zehatzetan exekutatzeko aukera ematen dute. Baliteke lehen instalazioaren ondoren exekutatu behar den konfigurazio-lan bat egotea, edo agian garbiketa bat egin behar da edozein eguneraketa egin aurretik.

Instalazioan sortutako giltza gehitzeko dugun arazoa konpontzeko, instalazioaren aurretiko kako egokiak dira. Baina bada harrapaketa bat: ezin duzu sekretua automatikoki sortu behin eguneraketa batean. Hooks eguneraketa guztietan funtzionatuko du.

Zure sekretua sortu baduzu eta zure lehen instalazioa oraindik gertatu ez bada, utzi irakurtzeari, aurrez instalatzeko kakoa oso ondo funtzionatuko dizu.

Baina sekretua eguneratze baten parte bada (agian instalazioan egon ez zen funtzio berri bat), orduan pena da behin bakarrik funtzionatzen duen aurre-instalazioko kakorik ezin izatea.

funtzio

Helm funtzioek hainbat script-elementu gehi ditzakezu zure inplementazio-scriptei.

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

Adibide honek erakusten du apiKey sekretuaren balioa instalazioan sortutako UUID berria izango dela.

Helm-ek GO txantiloiaren ezaugarri harrigarriak eta Sprig-en eginbideen liburutegia inplementazio pertsonalizatuak sortzeko aprobetxatzen dituen funtzio liburutegi benetan zabala du.

Bilaketa funtzioa

Helm 3.1-en gehitua Bilaketa funtzioa, lehendik dagoen inplementazioa eskatzeko eta:

  • baliabideen existentzia egiaztatu;
  • lehendik dagoen baliabide baten balioa itzuli geroago erabiltzeko.

Bi gaitasun hauek erabiliz, dinamikoki sortutako sekretu bakarra sor dezakegu!

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

Zerbitzariari eguneratze berri bat aplikatzen zaion bakoitzean, Helm-ek balio sekretu berri bat sortuko du (oraindik sekreturik ez badago) edo lehendik dagoen balioa berrerabiliko du.

Good Luck!

Zer gehiago irakurri gaiari buruz:

  1. Kubernetesen hiru autoeskalatze maila eta nola erabili eraginkortasunez.
  2. Kubernetes pirateria izpirituan inplementatzeko txantiloi batekin.
  3. Gure kanala Around Kubernetes Telegram-en.

Iturria: www.habr.com

Gehitu iruzkin berria