Vysvětlení tajných kódů Kubernetes
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.
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 data
použ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.