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 tajný klíč.

Vysvětlení tajných kódů

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.

Tajné kódy 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 před výstupy příkazů, jako kubectl describeje . K tomuto procesu nedojde při konfiguraci prostého textu. Tajné kódy jsou vždy vymezeny na jeden obor názvů, aby se zabránilo vystavení citlivých dat jiným úlohá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 klienta nebo serveru TLS, která slouží například k poskytování připojení HTTPS z prostředku příchozího přenosu dat.

Tip

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 ke tajným kódům Kubernetes můžete tajný kód použít třemi různými způsoby:

  • Připojené jako soubory ke svazku v rámci kontejnerů v podu nebo nasazení
  • Ve formě proměnné prostředí odkazované ve specifikaci podu nebo nasazení
  • V kubeletu při vyžadování imagí z privátních registrů, a to 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 kubectl YAML nebo příkazu. Pro tajný kód se používá následující specifikace:

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

U 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 Kubernetes ho automaticky kódovat, použijete stringData místo data:

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 předanou do ní místo zakódovaného řetězce.

Aktualizace tajných kódů

Všechny tajné kódy, které jsou připojené jako svazky uvnitř podu, se automaticky aktualizují, jakmile se jejich hodnota změní. K této změně nemusí dojít okamžitě kvůli konfiguraci Kubeletu, ale dojde k ní automaticky, takže pod nemusíte restartovat.

V případech, kdy jsou tajné kódy vázané na proměnné prostředí, se neaktualizují automaticky, takže je nutné restartovat pod, aby se změny projevily.

Prověřte si své znalosti

1.

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

2.

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

3.

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