Comprendre les secrets Kubernetes

Effectué

Une des principales considérations rencontrées lors de l’utilisation d’applications distribuées est la gestion des informations sensibles, comme les mots de passe, les connexions et les données similaires. Kubernetes vous permet de sécuriser ces données avec une ressource appelée secret.

Comprendre les secrets

Dans Kubernetes, les secrets vous permettent de stocker des informations sensibles de manière plus sûre que le format texte brut dans les pods et les déploiements. Les secrets sont conçus pour stocker des mots de passe et d’autres données sensibles.

Les secrets Kubernetes encodent leurs données dans un format base64. Bien que base64 ne soit pas un algorithme de chiffrement, Kubernetes peut voir que les informations sont encodées et peuvent masquer ces informations à partir de sorties de commande telles que kubectl describe. Ce processus ne se produit pas avec la configuration de texte brut. Les secrets sont toujours délimités à un seul espace de noms pour éviter une exposition supplémentaire de données sensibles à d’autres charges de travail du cluster.

Types de secrets

Il existe différents types de secrets. Le type le plus courant et par défaut est Opaque, qui contient des données arbitraires définies par l’utilisateur. Les autres types courants sont les suivants :

  • kubernetes.io/service-account-token : Définit un jeton de compte de service, qui est créé automatiquement lors de la création d’un compte de service.
  • kubernetes.io/basic-auth : Informations d’identification pour l’authentification de base.
  • kubernetes.io/tls : Données du client ou du serveur TLS, utilisées pour traiter les connexions HTTPS, par exemple à partir d’une ressource d’entrée.

Conseil

Pour plus d’informations, consultez la documentation officielle des secrets Kubernetes.

Créer et utiliser un secret

Selon la Documentation officielle relative aux secrets Kubernetes, vous pouvez utiliser un secret de trois façons différentes :

  • Monté en tant que fichiers dans un volume sur des conteneurs à l’intérieur d’un pod ou d’un déploiement.
  • Référencé en tant que variable d’environnement dans la spécification du pod ou du déploiement.
  • Utilisé par Kubelet lors de l’extraction d’images à partir de registres privés via la clé imagePullSecret dans la spécification du pod.

Vous pouvez créer des secrets comme n’importe quelle autre ressource Kubernetes, en utilisant un fichier manifeste YAML ou une commande kubectl. La spécification du secret se fait comme suit :

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

Pour un secret avec cette spécification, vous devez encoder les valeurs avant d’avoir créé le secret. Si vous voulez créer un secret avec la valeur en texte brut et laisser Kubernetes l’encoder automatiquement, vous utilisez stringData au lieu de data :

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

L’application reçoit comme valeur passée la chaîne du secret décodée au lieu de la chaîne encodée.

Mises à jour des secrets

Tous les secrets qui sont montés en tant que volumes à l’intérieur d’un pod sont automatiquement mis à jour quand leur valeur est modifiée. Cette modification peut ne pas se produire immédiatement en raison de la configuration de Kubelet, mais elle se produit automatiquement ; il n’est par conséquent pas nécessaire de redémarrer le pod.

Dans les cas où les secrets sont liés aux variables d’environnement, ils ne sont pas automatiquement mis à jour, ce qui rend nécessaire le redémarrage du pod pour que les modifications prennent effet.

Vérifiez vos connaissances

1.

Pourquoi les secrets Kubernetes sont plus sûrs que les valeurs en texte brut ?

2.

Comment pouvez-vous utiliser des secrets dans une application ?

3.

Comment Base64 est-il utilisé dans les secrets ?