Informazioni sui segreti di Kubernetes

Completato

Una delle considerazioni più importanti quando si lavora con le applicazioni distribuite è come gestire le informazioni riservate, ad esempio password, connessioni e dati simili. Kubernetes ti consente di proteggere questi dati con una risorsa chiamata Segreto.

Informazioni sui segreti

In Kubernetes i segreti consentono di archiviare informazioni riservate in modo più sicuro rispetto al formato testo normale nei pod e nelle distribuzioni. I segreti sono progettati per archiviare password e altri dati sensibili.

I segreti Kubernetes codificano i dati in un formato base64. Anche se base64 non è un algoritmo di crittografia, Kubernetes può vedere che le informazioni sono codificate e possono nascondere queste informazioni dagli output dei comandi, ad esempio kubectl describe. Questo processo non avviene con la configurazione di testo normale. I segreti sono sempre assegnati a un singolo spazio dei nomi per evitare un’ulteriore esposizione dei dati sensibili ad altri carichi di lavoro nel cluster.

Tipi di segreti

Esistono diversi tipi di segreti. Il tipo più comune e predefinito è Opaque, che include i dati arbitrari definiti dall'utente. Gli altri tipi comuni includono:

  • kubernetes.io/service-account-token: Definisce un token di account del servizio, e viene creato automaticamente quando viene creato un nuovo account del servizio.
  • kubernetes.io/basic-auth: credenziali per l'autenticazione di base.
  • kubernetes.io/tls: dati del server o del client TLS, usati, ad esempio, per gestire le connessioni HTTPS da una risorsa Ingress.

Suggerimento

Per altre informazioni, vedi la documentazione ufficiale di Kubernetes.

Crea e usa un segreto

In base alla documentazione ufficiale di Kubernetes Secrets, puoi usare un segreto in tre modi diversi:

  • Montato come file in un volume nei contenitori all'interno di un pod o di una distribuzione.
  • Referenziato come variabile di ambiente nella specifica di un pod o di una distribuzione.
  • Usato da Kubelet durante il pull di immagini da registri privati tramite la chiave imagePullSecret nella specifica di un pod.

Puoi creare segreti come qualsiasi altra risorsa Kubernetes, usando un file manifesto YAML o un comando kubectl. La specifica di un segreto è la seguente:

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

Per un segreto con questa specifica, devi codificare i valori prima di creare il segreto. Per creare un segreto con il valore di testo normale e consentire a Kubernetes di codificarlo automaticamente, si usa stringData invece di data:

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

L'applicazione riceve la stringa del segreto decodificata come valore passato al posto di quella codificata.

Aggiornamenti dei segreti

Tutti i segreti che sonomontati come volumi all'interno di un pod vengono aggiornati automaticamente dopo la modifica del valore. Questa modifica potrebbe non verificarsi immediatamente a causa della configurazione di Kubelet, ma viene eseguita automaticamente, quindi non è necessario riavviare il pod.

Nei casi in cui i segreti sono associati alle variabili di ambiente che non vengono aggiornate automaticamente, rendendo necessario riavviare il pod per rendere effettive le modifiche.

Verificare le conoscenze

1.

Perché i segreti di Kubernetes sono più sicuri dei valori di testo normale?

2.

Come è possibile usare i segreti in un'applicazione?

3.

Come viene usata la codifica Base 64 nei segreti?