Auto-generation ng mga lihim sa Helm

Auto-generation ng mga lihim sa Helm

Koponan Kubernetes aaS mula sa Mail.ru nagsalin ng maikling tala tungkol sa kung paano awtomatikong bumuo ng mga lihim ng Helm kapag nag-a-update. Ang sumusunod ay isang teksto mula sa may-akda ng artikulo - teknikal na direktor ng Intoware, isang kumpanya na bumubuo ng mga solusyon sa SaaS.

Ang mga lalagyan ay cool. Noong una ay anti-container ako (nahihiya akong aminin), ngunit ngayon ay lubos kong sinusuportahan ang paggamit ng teknolohiyang ito. Kung binabasa mo ito, sana ay matagumpay mong na-navigate ang mga dagat ng Docker, natanto ang mga benepisyo ng Kubernetes, at naging mas madali ang iyong buhay sa Helm.

Gayunpaman, ang ilang mga bagay ay malinaw na mas mahirap kaysa sa kailangan nila.

Paano awtomatikong bumuo ng mga lihim kapag nag-a-update?

Ang isang Kubernetes secret ay isang resource na naglalaman ng mga key/value pairs na gusto mong gamitin sa iyong code. Maaaring ito ay mga string ng koneksyon sa database, mga password sa email, at iba pa. Sa pamamagitan ng paggamit ng mga lihim, lumikha ka ng malinaw na paghihiwalay sa pagitan ng code at mga setting, na nagbibigay-daan sa iyong madaling i-customize ang iba't ibang deployment nang hindi binabago ang codebase.

Ang isang karaniwang sitwasyon ay kapag ang dalawang module ay dapat makipag-usap gamit ang isang karaniwang key. Walang sinuman sa labas ng cluster ang dapat makaalam ng key na ito, dahil nilayon ito para sa isa-sa-isang komunikasyon sa loob ng cluster.

Gumagawa ng mga sikreto

Karaniwan, upang lumikha ng isang lihim sa Helm kailangan mong:

  • ilarawan ang lihim sa file ng mga halaga;
  • muling tukuyin ito sa panahon ng pag-deploy;
  • sumangguni dito sa loob ng deployment/pod;
  • ... tubo!

Karaniwan itong mukhang ganito:

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

Isang simpleng lihim ng Kubernetes gamit ang mga value mula sa values.yml

Ngunit sabihin nating ayaw mong tukuyin ang iyong lihim sa file ng mga halaga.

Maraming mga opsyon kapag ang deployment ay nangangailangan ng shared key, na dapat mabuo sa panahon ng pag-install.

Sa halimbawa ng komunikasyon sa module-to-module sa itaas, hindi kanais-nais na ibahagi ang lihim sa labas ng deployment. Samakatuwid, lubos na kanais-nais na ang Helm ay may mga mekanismo upang awtomatikong makabuo ng isang lihim nang hindi kinakailangang direktang tukuyin ito.

Mga kawit

Binibigyang-daan ka ng Hooks na magpatakbo ng code sa mga partikular na lokasyon sa panahon ng proseso ng pag-install. Maaaring may trabaho sa pagsasaayos na kailangang patakbuhin pagkatapos ng unang pag-install, o marahil ay kailangang gawin ang paglilinis bago magsagawa ng anumang pag-update.

Upang malutas ang aming problema sa pagdaragdag ng isang key na nabuo sa panahon ng pag-install, ang mga pre-installation hook ay perpekto. Ngunit mayroong isang catch: hindi mo awtomatikong mabubuo ang lihim nang isang beses sa isang update. Gagana ang Hooks sa bawat update.

Kung nabuo mo na ang iyong sikreto at hindi pa nangyayari ang iyong unang pag-install pagkatapos ay ihinto ang pagbabasa, gagana ang pre-install na hook para sa iyo.

Ngunit kung ang sikreto ay bahagi ng isang pag-update (marahil isang bagong feature na wala doon sa panahon ng pag-install), nakakahiya na hindi ka makakagawa ng pre-installation hook na isang beses lang gumagana.

Pag-andar

Nagbibigay-daan sa iyo ang mga function ng helm na magdagdag ng iba't ibang elemento ng scripting sa iyong mga script sa pag-deploy.

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

Ipinapakita ng halimbawang ito na ang halaga ng apiKey secret ay ang bagong UUID na nabuo sa panahon ng pag-install.

Kasama sa Helm ang isang tunay na malawak na feature library na gumagamit ng kamangha-manghang mga feature ng GO template at feature library ng Sprig upang lumikha ng mga custom na deployment.

Function ng paghahanap

Idinagdag sa Helm 3.1 Function ng paghahanap, na nagbibigay-daan sa iyong humiling ng kasalukuyang deployment at:

  • suriin ang pagkakaroon ng mga mapagkukunan;
  • ibalik ang halaga ng isang umiiral na mapagkukunan para magamit sa ibang pagkakataon.

Gamit ang parehong mga kakayahan, maaari tayong lumikha ng isang beses, dynamic na nabuong lihim!

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

Sa tuwing may ilalapat na bagong update sa server, bubuo ang Helm ng bagong lihim na halaga (kung wala pang lihim) o muling gagamitin ang umiiral na halaga.

Good luck!

Ano pa ang mababasa sa paksa:

  1. Tatlong antas ng autoscaling sa Kubernetes at kung paano epektibong gamitin ang mga ito.
  2. Kubernetes sa diwa ng piracy na may template para sa pagpapatupad.
  3. Ang aming channel sa Paikot ng Kubernetes sa Telegram.

Pinagmulan: www.habr.com

Magdagdag ng komento