Otomatis-generasi Rahasia di Helm

Otomatis-generasi Rahasia di Helm

regu Kubernetes aaS ti Mail.ru narjamahkeun catetan pondok ngeunaan cara otomatis ngahasilkeun Rahasia Helm nalika ngamutahirkeun. Ieu mangrupikeun téks ti panulis tulisan - diréktur téknis Intoware, perusahaan anu ngembangkeun solusi SaaS.

Wadahna tiis. Mimitina mah anti-wadahna (Isin ngaku), tapi ayeuna mah sapinuhna ngadukung pamakéan téknologi ieu. Upami anjeun maca ieu, mugia anjeun parantos suksés nganapigasi sagara Docker, sadar mangpaat Kubernetes, sareng ngajantenkeun hirup anjeun langkung gampang sareng Helm.

Sanajan kitu, sababaraha hal anu jelas leuwih hese ti aranjeunna kedah.

Kumaha sacara otomatis ngahasilkeun rusiah nalika ngamutahirkeun?

Rahasia Kubernetes mangrupikeun sumber daya anu ngandung pasangan konci / nilai anu anjeun hoyong dianggo dina kode anjeun. Ieu bisa jadi string sambungan database, sandi email, jeung saterusna. Ku ngagunakeun Rahasia, anjeun nyiptakeun pamisahan anu jelas antara kode sareng setélan, ngamungkinkeun anjeun gampang ngaluyukeun panyebaran anu béda tanpa ngarobih basis kode.

Kaayaan umum nyaéta nalika dua modul kedah komunikasi nganggo konci umum. Taya sahijieun di luar klaster kudu nyaho konci ieu, sabab dimaksudkeun pikeun komunikasi hiji-ka-hiji dina klaster.

Nyieun rusiah

Ilaharna, pikeun nyieun rusiah dina Helm anjeun kedah:

  • ngajelaskeun rusiah dina file nilai;
  • redefine eta salila deployment;
  • tingal eta jero deployment / pod;
  • ... kauntungan!

Biasana katingali sapertos kieu:

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

Rahasia Kubernetes basajan ngagunakeun nilai tina values.yml

Tapi hayu urang nyebutkeun anjeun teu hayang nangtukeun rusiah anjeun dina file nilai.

Aya loba pilihan lamun deployment merlukeun konci dibagikeun, nu kudu dihasilkeun salila instalasi.

Dina conto komunikasi modul-to-modul di luhur, teu desirable babagi rusiah luar deployment nu. Ku alatan éta, éta kacida desirable yén Helm boga mékanisme pikeun otomatis ngahasilkeun rusiah tanpa kudu nangtukeun eta langsung.

Kait

Hooks ngidinan Anjeun pikeun ngajalankeun kode di lokasi husus salila prosés instalasi. Panginten aya padamelan konfigurasi anu kedah dijalankeun saatos pamasangan anu munggaran, atanapi panginten ngabersihkeun kedah dilakukeun sateuacan ngalaksanakeun apdet.

Pikeun ngabéréskeun masalah urang pikeun nambahkeun konci dihasilkeun nalika instalasi, kait pre-instalasi anu idéal. Tapi aya anu nyekel: anjeun moal tiasa sacara otomatis ngahasilkeun rusiah sakali dina pembaruan. Hooks bakal dianggo dina unggal update.

Upami anjeun parantos nyiptakeun rusiah anjeun sareng pamasangan munggaran anjeun henteu acan kajantenan teras lirén maca, pancing anu tos dipasang bakal tiasa dianggo pikeun anjeun.

Tapi upami rusiahna mangrupikeun bagian tina pembaruan (panginten fitur énggal anu henteu aya nalika pamasangan), éta éra yén anjeun moal tiasa nyiptakeun hook pre-instalasi anu ngan ukur tiasa dianggo sakali.

fungsi

Fungsi Helm ngidinan Anjeun pikeun nambahkeun rupa elemen scripting kana Aksara deployment Anjeun.

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

Conto ieu nunjukkeun yén nilai rahasia apiKey bakal UUID anyar anu dihasilkeun nalika instalasi.

Helm ngawengku perpustakaan fitur sabenerna éksténsif nu leverages fitur GO template endah tur perpustakaan fitur Sprig pikeun nyieun deployments custom.

Fungsi pilarian

Ditambahkeun dina Helm 3.1 Fungsi pilarian, anu ngamungkinkeun anjeun nyuhunkeun panyebaran anu tos aya sareng:

  • pariksa ayana sumberdaya;
  • ngabalikeun nilai sumberdaya nu aya pikeun pamakéan engké.

Ngagunakeun duanana kamampuhan ieu, urang bisa nyieun hiji-waktos, dinamis dihasilkeun rusiah!

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

Iraha waé pembaruan énggal diterapkeun ka server, Helm bakal ngahasilkeun nilai rahasia énggal (upami teu aya rusiah) atanapi nganggo deui nilai anu tos aya.

Ayaan!

Naon deui maca dina topik:

  1. Tilu tingkat autoscaling di Kubernetes sareng cara ngagunakeunana sacara efektif.
  2. Kubernetes dina sumanget piracy kalawan template pikeun palaksanaan.
  3. Saluran kami Kira-kira Kubernetes di Telegram.

sumber: www.habr.com

Tambahkeun komentar