Sjálfvirk myndun leyndarmála í Helm

Sjálfvirk myndun leyndarmála í Helm

Team Kubernetes aaS frá Mail.ru þýddi stutta athugasemd um hvernig á að búa til Helm leyndarmál sjálfkrafa við uppfærslu. Eftirfarandi er texti frá höfundi greinarinnar - tæknistjóra Intoware, fyrirtækis sem þróar SaaS lausnir.

Ílát eru flott. Í fyrstu var ég gegn gámum (ég skammast mín fyrir að viðurkenna það), en núna styð ég fullkomlega notkun þessarar tækni. Ef þú ert að lesa þetta hefurðu vonandi siglt um hafið Docker með góðum árangri, áttað þig á kostum Kubernetes og gert líf þitt miklu auðveldara með Helm.

Sumt er þó greinilega erfiðara en það þarf að vera.

Hvernig á að búa til leyndarmál sjálfkrafa við uppfærslu?

Kubernetes leyndarmál er auðlind sem inniheldur lykil/gildi pör sem þú vilt nota í kóðanum þínum. Þetta gætu verið gagnagrunnstengingarstrengir, lykilorð fyrir tölvupóst og svo framvegis. Með því að nota leyndarmál skaparðu skýran aðskilnað á milli kóða og stillinga, sem gerir þér kleift að sérsníða mismunandi dreifingar auðveldlega án þess að breyta kóðagrunninum.

Algeng staða er þegar tvær einingar verða að hafa samskipti með sameiginlegum lykli. Enginn utan klasans ætti að þekkja þennan lykil þar sem hann er ætlaður fyrir einstaklingssamskipti innan klasans.

Að búa til leyndarmál

Venjulega, til að búa til leyndarmál í Helm þarftu að:

  • lýstu leyndarmálinu í gildisskránni;
  • endurskilgreina það meðan á dreifingu stendur;
  • vísa til þess inni í dreifingunni/belgnum;
  • ... gróði!

Það lítur venjulega einhvern veginn svona út:

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

Einfalt Kubernetes leyndarmál með því að nota gildi frá values.yml

En segjum að þú viljir ekki tilgreina leyndarmál þitt í gildisskránni.

Það eru margir möguleikar þegar uppsetning krefst sameiginlegs lykils, sem verður að búa til við uppsetningu.

Í samskiptadæminu á milli eininga hér að ofan er ekki æskilegt að deila leyndarmálinu utan dreifingarinnar. Þess vegna er mjög æskilegt að Helm hafi kerfi til að búa til leyndarmál sjálfkrafa án þess að þurfa að tilgreina það beint.

Krókar

Krókar gera þér kleift að keyra kóða á tilteknum stöðum meðan á uppsetningarferlinu stendur. Það kann að vera stillingarverk sem þarf að keyra eftir fyrstu uppsetningu, eða kannski þarf að hreinsa áður en uppfærsla er framkvæmd.

Til að leysa vandamál okkar við að bæta við lykli sem myndast við uppsetningu eru krókar fyrir uppsetningu tilvalin. En það er galli: þú getur ekki sjálfkrafa búið til leyndarmálið einu sinni við uppfærslu. Krókar munu virka á hverri uppfærslu.

Ef þú hefur búið til leyndarmálið þitt og fyrsta uppsetningin þín hefur ekki átt sér stað ennþá skaltu hætta að lesa, foruppsetningarkrókurinn mun virka frábærlega fyrir þig.

En ef leyndarmálið er hluti af uppfærslu (kannski nýr eiginleiki sem var ekki til staðar við uppsetningu), þá er synd að þú getur ekki búið til foruppsetningarkrók sem virkar bara einu sinni.

Aðgerðir

Hjálparaðgerðir gera þér kleift að bæta ýmsum forskriftarþáttum við dreifingarforskriftirnar þínar.

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

Þetta dæmi sýnir að gildi apiKey leyndarmálsins verður nýja UUID sem myndast við uppsetningu.

Helm inniheldur sannarlega umfangsmikið eiginleikasafn sem nýtir ótrúlega GO sniðmátareiginleikana og eiginleikasafn Sprig til að búa til sérsniðna dreifingu.

Uppflettingaraðgerð

Bætt við í Helm 3.1 Uppflettingaraðgerð, sem gerir þér kleift að biðja um núverandi dreifingu og:

  • athuga hvort auðlindir séu til;
  • skila gildi núverandi tilföngs til síðari nota.

Með því að nota báða þessa möguleika getum við búið til eitt sinn, kraftmikið leyndarmál!

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

Alltaf þegar ný uppfærsla er sett á netþjóninn mun Helm annað hvort búa til nýtt leyndarmál (ef það er ekkert leyndarmál ennþá) eða endurnota núverandi gildi.

Good Luck!

Hvað annað að lesa um efnið:

  1. Þrjú stig sjálfvirkrar mælingar í Kubernetes og hvernig á að nota þau á áhrifaríkan hátt.
  2. Kubernetes í anda sjóræningjastarfsemi með sniðmáti fyrir útfærslu.
  3. Rásin okkar Around Kubernetes í Telegram.

Heimild: www.habr.com

Bæta við athugasemd