Vysvětlení tajných kódů Kubernetes

Dokončeno

Jedním z největších aspektů při práci s distribuovanými aplikacemi je správa citlivých informací, jako jsou hesla, připojení a podobná data. Kubernetes umožňuje zabezpečit tato data pomocí prostředku označovaného jako secret.

Pochopit tajemství

Tajné kódy v Kubernetes umožňují bezpečně ukládat citlivé informace než ve formátu prostého textu v podech a nasazeních. Tajné kódy jsou navržené tak, aby ukládaly hesla a další citlivá data.

Secrety Kubernetes kódují svá data ve formátu base64. I když base64 není šifrovací algoritmus, Kubernetes vidí, že informace jsou kódované a můžou tyto informace skrýt ve výstupech příkazů, jako je kubectl describe. K tomuto procesu nedojde při konfiguraci prostého textu. Tajné jsou vždy omezeny na jeden namespace, aby se zabránilo vystavení citlivých dat jiným pracovním zátěžím v clusteru.

Typy tajných kódů

Existují různé typy tajných kódů. Nejběžnějším a výchozím typem je Opaque, který obsahuje uživatelsky definovaná libovolná data. Mezi další běžné typy patří:

  • kubernetes.io/service-account-token: Definuje token účtu služby a automaticky se vytvoří při vytvoření nového účtu služby.
  • kubernetes.io/basic-auth: Přihlašovací údaje pro základní ověřování.
  • kubernetes.io/tls: Data TLS klienta nebo serveru, používaná například k poskytování připojení HTTPS z Ingress prostředku.

Spropitné

Další informace najdete v oficiální dokumentaci k tajným kódům Kubernetes .

Vytvoření a použití tajného kódu

Podle oficiální dokumentace tajných kódů Kubernetesmůžete tajný kód použít třemi různými způsoby:

  • Soubory jsou ve svazku připojeny ke kontejnerům uvnitř podu či nasazení.
  • Je uvedena jako proměnná prostředí ve specifikaci podu nebo nasazení.
  • Kubelet používá při načítání imagí z privátních registrů prostřednictvím klíče imagePullSecret ve specifikaci podu.

Tajné kódy můžete vytvářet stejně jako jakýkoli jiný prostředek Kubernetes pomocí souboru manifestu YAML nebo příkazu kubectl. Specifikace tajného kódu je následující:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

V případě tajného kódu s touto specifikací je nutné před vytvořením tajného kódu zakódovat hodnoty. Pokud chcete vytvořit tajný kód s hodnotou prostého textu a nechat ho Kubernetes automaticky zakódovat, místo datapoužijete stringData:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

Aplikace obdrží dekódovaný tajný řetězec jako hodnotu, která je jí předána, místo zakódovaného řetězce.

Aktualizace tajných kódů

Všechna tajemství, která jsou připojená jako svazky v rámci podu, se po změně jejich hodnoty automaticky aktualizují. K této změně nemusí dojít okamžitě kvůli konfiguraci Kubeletu, ale proběhne automaticky, takže není potřeba restartovat Pod.

V případech, kdy jsou Secrets svázány s proměnnými prostředí, se automaticky neaktualizují, je nutné restartovat Pod, aby se změny projevily.

Kontrola znalostí

1.

Proč jsou tajné kódy Kubernetes bezpečnější než hodnoty prostého textu?

2.

Jak můžete v aplikaci používat tajné kódy?

3.

Jak se base64 používá v tajných kódech?