Titkok automatikus generálása Helmben

Titkok automatikus generálása Helmben

Csapat Kubernetes aaS a Mail.ru webhelyről lefordított egy rövid jegyzetet arról, hogyan lehet automatikusan létrehozni Helm-titkokat frissítéskor. Az alábbi szöveg a cikk szerzőjétől - az Intoware, egy SaaS megoldásokat fejlesztő cég műszaki igazgatójától származik.

A konténerek menők. Eleinte konténerellenes voltam (szégyellem bevallani), de most már teljes mértékben támogatom ennek a technológiának a használatát. Ha ezt olvassa, remélhetőleg sikeresen navigált a Docker tengerein, felismerte a Kubernetes előnyeit, és sokkal könnyebbé tette az életét a Helmmel.

Néhány dolog azonban egyértelműen nehezebb a kelleténél.

Hogyan lehet automatikusan titkokat generálni frissítéskor?

A Kubernetes-titok egy olyan erőforrás, amely a kódjában használni kívánt kulcs/érték párokat tartalmaz. Ezek lehetnek adatbázis-kapcsolati karakterláncok, e-mail jelszavak és így tovább. A titkok használatával világosan elválasztja egymástól a kódot és a beállításokat, így könnyen testreszabhatja a különböző telepítéseket a kódbázis megváltoztatása nélkül.

Gyakori helyzet az, amikor két modulnak közös kulccsal kell kommunikálnia. A fürtön kívül senki sem ismerheti ezt a kulcsot, mivel a fürtön belüli egy-egy kommunikációra szolgál.

Titkok készítése

Általában egy titok létrehozásához a Helmben a következőkre van szüksége:

  • írja le a titkot az értékek fájlban;
  • újradefiniálja a telepítés során;
  • hivatkozzon rá a telepítés/pod belsejében;
  • ... profit!

Általában valahogy így néz ki:

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

Egy egyszerű Kubernetes-titok a Values.yml-ből származó értékek használatával

De tegyük fel, hogy nem szeretné megadni a titkát az értékek fájlban.

Számos lehetőség kínálkozik arra az esetre, ha a központi telepítés megosztott kulcsot igényel, amelyet a telepítés során kell előállítani.

A fenti, modulok közötti kommunikációs példában nem kívánatos a titok megosztása a telepítésen kívül. Ezért nagyon kívánatos, hogy a Helm rendelkezzen olyan mechanizmusokkal, amelyek automatikusan generálnak egy titkot anélkül, hogy azt közvetlenül meg kellene adni.

Horgok

A horgok lehetővé teszik a kód futtatását meghatározott helyeken a telepítési folyamat során. Előfordulhat, hogy egy konfigurációs feladatot le kell futtatni az első telepítés után, vagy esetleg egy tisztítást kell végezni a frissítés végrehajtása előtt.

A telepítés során generált kulcs hozzáadásával kapcsolatos problémánk megoldására a telepítés előtti horgok ideálisak. De van egy bökkenő: nem tudod automatikusan generálni a titkot egy frissítéskor. A horgok minden frissítésnél működni fognak.

Ha létrehozta a titkát, és az első telepítés még nem történt meg, akkor hagyja abba az olvasást, az előtelepítési horog nagyszerűen fog működni.

De ha a titok egy frissítés része (esetleg egy új funkció, ami nem volt ott a telepítés során), akkor kár, hogy nem lehet olyan előtelepítési horgot létrehozni, ami csak egyszer működik.

függvények

A Helm funkciók lehetővé teszik, hogy különféle szkriptelemeket adjon hozzá a telepítési szkriptekhez.

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

Ez a példa azt mutatja, hogy az apiKey titkos értéke a telepítés során generált új UUID lesz.

A Helm egy igazán kiterjedt szolgáltatáskönyvtárat tartalmaz, amely a lenyűgöző GO-sablon-funkciókat és a Sprig szolgáltatáskönyvtárát használja az egyéni telepítések létrehozásához.

Keresés funkció

Hozzáadva a Helm 3.1-hez Keresés funkció, amely lehetővé teszi, hogy kérjen egy meglévő telepítést, és:

  • ellenőrizze a források meglétét;
  • visszaadja egy meglévő erőforrás értékét későbbi felhasználásra.

Mindkét képességet kihasználva létrehozhatunk egy egyszeri, dinamikusan generált titkot!

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

Amikor új frissítés kerül alkalmazásra a kiszolgálón, a Helm vagy létrehoz egy új titkos értéket (ha még nincs titok), vagy újra felhasználja a meglévő értéket.

Sok szerencsét!

Mit kell még olvasni a témában:

  1. Az automatikus skálázás három szintje a Kubernetesben és azok hatékony használata.
  2. Kubernetes a kalózkodás jegyében egy sablonnal a megvalósításhoz.
  3. A Kubernetes körüli csatornánk a Telegramban.

Forrás: will.com

Hozzászólás