Certificats PKI et exigences

Certificats PKI et exigences

Kubernetes nécessite des certificats PKI pour l’authentification via TLS. Si vous installez Kubernetes avec kubeadm, les certificats requis par votre cluster sont générés automatiquement. Vous pouvez également générer vos propres certificats — par exemple, pour mieux sécuriser vos clés privées en évitant de les stocker sur le serveur API. Cette page explique les certificats nécessaires à votre cluster.

Utilisation des certificats par votre cluster

Kubernetes utilise la PKI pour les opérations suivantes :

Certificats serveur

  • Certificat serveur pour le point de terminaison du serveur API
  • Certificat serveur pour le serveur etcd
  • Certificats serveur pour chaque kubelet (chaque nœud exécute un kubelet)
  • Certificat serveur optionnel pour le front-proxy

Certificats client

  • Certificats client pour chaque kubelet, utilisés pour s’authentifier auprès du serveur API en tant que client de l’API Kubernetes
  • Certificat client pour chaque serveur API, utilisé pour s’authentifier auprès d’etcd
  • Certificat client pour le controller manager afin de communiquer de manière sécurisée avec le serveur API
  • Certificat client pour le scheduler afin de communiquer de manière sécurisée avec le serveur API
  • Certificats client, un pour chaque nœud, pour que kube-proxy s’authentifie auprès du serveur API
  • Certificats client optionnels pour les administrateurs du cluster afin de s’authentifier auprès du serveur API
  • Certificat client optionnel pour le front-proxy

Certificats serveur et client du kubelet

Pour établir une connexion sécurisée et s’authentifier auprès du kubelet, le serveur API nécessite une paire certificat/clé client.

Dans ce scénario, deux approches sont possibles :

  • Certificats partagés : le kube-apiserver peut utiliser la même paire certificat/clé que celle utilisée pour authentifier ses clients. Cela signifie que les certificats existants, comme apiserver.crt et apiserver.key, peuvent être utilisés pour communiquer avec les serveurs kubelet.

  • Certificats distincts : le kube-apiserver peut générer une nouvelle paire certificat/clé client pour s’authentifier auprès des serveurs kubelet. Dans ce cas, un certificat distinct nommé kubelet-client.crt ainsi que sa clé privée kubelet-client.key sont créés.

Note:

Les certificats front-proxy sont requis uniquement si vous utilisez kube-proxy pour prendre en charge un serveur d’API d’extension.

etcd implémente également le TLS mutuel pour authentifier les clients et les pairs.

Emplacement des certificats

Si vous installez Kubernetes avec kubeadm, la plupart des certificats sont stockés dans /etc/kubernetes/pki. Tous les chemins de cette documentation sont relatifs à ce répertoire, à l’exception des certificats des comptes utilisateurs que kubeadm place dans /etc/kubernetes.

Configuration manuelle des certificats

Si vous ne souhaitez pas que kubeadm génère les certificats requis, vous pouvez les créer en utilisant une seule autorité de certification (CA) racine ou en fournissant tous les certificats. Voir Certificats pour plus de détails. Voir également Gestion des certificats avec kubeadm.

CA racine unique

Vous pouvez créer une CA racine unique, contrôlée par un administrateur. Cette CA peut ensuite créer plusieurs CA intermédiaires.

CA requises :

CheminCN par défautDescription
ca.crt,keykubernetes-caCA Kubernetes générale
etcd/ca.crt,keyetcd-caPour toutes les opérations liées à etcd
front-proxy-ca.crt,keykubernetes-front-proxy-caPour le front-proxy

En plus des autorités de certification mentionnées ci-dessus, il est également nécessaire d'obtenir une paire de clés publique/privée pour la gestion des comptes de service : les fichiers sa.key et sa.pub. L'exemple suivant illustre les fichiers de clé et de certificat de l'autorité de certification présentés dans le tableau précédent :

/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-ca.key

Tous les certificats

Vous pouvez générer tous les certificats vous-même si vous ne souhaitez pas copier les clés privées de la CA.

Certificats requis :

Default CNParent CAO (in Subject)kindhosts (SAN)
kube-etcdetcd-caserver, client<hostname>, <Host_IP>, localhost, 127.0.0.1
kube-etcd-peeretcd-caserver, client<hostname>, <Host_IP>, localhost, 127.0.0.1
kube-etcd-healthcheck-clientetcd-caclient
kube-apiserver-etcd-clientetcd-caclient
kube-apiserverkubernetes-caserver<hostname>, <Host_IP>, <advertise_IP>1
kube-apiserver-kubelet-clientkubernetes-casystem:mastersclient
front-proxy-clientkubernetes-front-proxy-caclient

Note:

Au lieu d'utiliser le groupe de super-utilisateurs system:masters pour kube-apiserver-kubelet-client, un groupe moins privilégié peut être utilisé. kubeadm utilise le groupe kubeadm:cluster-admins à cette fin.

kind correspond à une ou plusieurs utilisations de la clé x509, également documentées dans le fichier .spec.usages d'une CertificateSigningRequest type :

kindKey usage
serverdigital signature, key encipherment, server auth
clientdigital signature, key encipherment, client auth

Note:

Les hôtes/SAN listés ci-dessus sont ceux recommandés pour obtenir un cluster fonctionnel ; si nécessaire pour une configuration spécifique, il est possible d’ajouter des SAN supplémentaires à tous les certificats serveur.

Note:

Pour les utilisateurs de kubeadm uniquement :

  • Le scénario dans lequel vous copiez dans votre cluster les certificats de l’autorité de certification (CA) sans les clés privées est appelé CA externe dans la documentation kubeadm.
  • Si vous comparez la liste ci-dessus avec une PKI générée par kubeadm, notez que les certificats kube-etcd, kube-etcd-peer et kube-etcd-healthcheck-client ne sont pas générés dans le cas d’un etcd externe.

Chemins des certificats

Les certificats doivent être placés dans un chemin recommandé (comme utilisé par kubeadm). Les chemins doivent être spécifiés à l’aide des arguments indiqués, quel que soit leur emplacement.

DefaultCNrecommendedkeypathrecommendedcertpathcommandkeyargumentcertargument
etcd-caetcd/ca.keyetcd/ca.crtkube-apiserver--etcd-cafile
kube-apiserver-etcd-clientapiserver-etcd-client.keyapiserver-etcd-client.crtkube-apiserver--etcd-keyfile--etcd-certfile
kubernetes-caca.keyca.crtkube-apiserver--client-ca-file
kubernetes-caca.keyca.crtkube-controller-manager--cluster-signing-key-file--client-ca-file,--root-ca-file,--cluster-signing-cert-file
kube-apiserverapiserver.keyapiserver.crtkube-apiserver--tls-private-key-file--tls-cert-file
kube-apiserver-kubelet-clientapiserver-kubelet-client.keyapiserver-kubelet-client.crtkube-apiserver--kubelet-client-key--kubelet-client-certificate
front-proxy-cafront-proxy-ca.keyfront-proxy-ca.crtkube-apiserver--requestheader-client-ca-file
front-proxy-cafront-proxy-ca.keyfront-proxy-ca.crtkube-controller-manager--requestheader-client-ca-file
front-proxy-clientfront-proxy-client.keyfront-proxy-client.crtkube-apiserver--proxy-client-key-file--proxy-client-cert-file
etcd-caetcd/ca.keyetcd/ca.crtetcd--trusted-ca-file,--peer-trusted-ca-file
kube-etcdetcd/server.keyetcd/server.crtetcd--key-file--cert-file
kube-etcd-peeretcd/peer.keyetcd/peer.crtetcd--peer-key-file--peer-cert-file
etcd-caetcd/ca.crtetcdctl--cacert
kube-etcd-healthcheck-clientetcd/healthcheck-client.keyetcd/healthcheck-client.crtetcdctl--key--cert

Les mêmes considérations s’appliquent à la paire de clés des comptes de service :

private key pathpublic key pathcommandargument
sa.keykube-controller-manager--service-account-private-key-file
sa.pubkube-apiserver--service-account-key-file

L’exemple suivant illustre les chemins des fichiers issus des tableaux précédents que vous devez fournir si vous générez vous-même l’ensemble de vos clés et certificats :

/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/apiserver-etcd-client.key
/etc/kubernetes/pki/apiserver-etcd-client.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/apiserver.key
/etc/kubernetes/pki/apiserver.crt
/etc/kubernetes/pki/apiserver-kubelet-client.key
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-client.key
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/etcd/server.key
/etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/etcd/peer.key
/etc/kubernetes/pki/etcd/peer.crt
/etc/kubernetes/pki/etcd/healthcheck-client.key
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/sa.key
/etc/kubernetes/pki/sa.pub

Configuration des certificats pour les comptes utilisateurs

Vous devez configurer manuellement les comptes administrateurs et les comptes de service :

FilenameCredential nameDefault CNO (in Subject)
admin.confdefault-adminkubernetes-admin<admin-group>
super-admin.confdefault-super-adminkubernetes-super-adminsystem:masters
kubelet.confdefault-authsystem:node:<nodeName> (see note)system:nodes
controller-manager.confdefault-controller-managersystem:kube-controller-manager
scheduler.confdefault-schedulersystem:kube-scheduler

Note:

La valeur de <nodeName> pour kubelet.conf doit correspondre exactement à la valeur du nom du nœud fournie par le kubelet lors de son enregistrement auprès de l’API server. Pour plus de détails, consultez Node Authorization.

Note:

Dans l’exemple ci-dessus, <admin-group> dépend de l’implémentation. Certains outils signent le certificat dans le fichier admin.conf par défaut afin qu’il fasse partie du groupe system:masters. system:masters est un groupe super-utilisateur de type break-glass qui peut contourner la couche d’autorisation de Kubernetes, comme RBAC. De plus, certains outils ne génèrent pas de fichier super-admin.conf distinct avec un certificat associé à ce groupe super-utilisateur.

kubeadm génère deux certificats administrateur distincts dans des fichiers kubeconfig. L’un se trouve dans admin.conf et possède Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin. kubeadm:cluster-admins est un groupe personnalisé associé au ClusterRole cluster-admin. Ce fichier est généré sur toutes les machines du plan de contrôle gérées par kubeadm.

Un autre se trouve dans super-admin.conf et possède Subject: O = system:masters, CN = kubernetes-super-admin. Ce fichier est généré uniquement sur le nœud où la commande kubeadm init a été exécutée.

  1. Pour chaque configuration, générez une paire certificat/clé x509 avec le Common Name (CN) et l’Organization (O) indiqués.

  2. Exécutez kubectl comme suit pour chaque configuration :

    KUBECONFIG=<filename> kubectl config set-cluster default-cluster --server=https://<host ip>:6443 --certificate-authority <path-to-kubernetes-ca> --embed-certs
    KUBECONFIG=<filename> kubectl config set-credentials <credential-name> --client-key <path-to-key>.pem --client-certificate <path-to-cert>.pem --embed-certs
    KUBECONFIG=<filename> kubectl config set-context default-system --cluster default-cluster --user <credential-name>
    KUBECONFIG=<filename> kubectl config use-context default-system
    

    Ces fichiers sont utilisés comme suit :

FilenameCommandCommentaire
admin.confkubectlConfigure l’utilisateur administrateur du cluster
super-admin.confkubectlConfigure l’utilisateur super-administrateur du cluster
kubelet.confkubeletUn fichier requis pour chaque nœud du cluster.
controller-manager.confkube-controller-managerDoit être ajouté au manifest manifests/kube-controller-manager.yaml
scheduler.confkube-schedulerDoit être ajouté au manifest manifests/kube-scheduler.yaml

Les fichiers suivants illustrent les chemins complets des fichiers listés dans le tableau précédent :

/etc/kubernetes/admin.conf
/etc/kubernetes/super-admin.conf
/etc/kubernetes/kubelet.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf

  1. toute autre adresse IP ou nom DNS utilisé pour accéder à votre cluster (tel qu’utilisé par kubeadm, incluant l’adresse IP stable du load balancer et/ou le nom DNS, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster, kubernetes.default.svc.cluster.local↩︎

Dernière modification May 05, 2026 at 7:37 PM PST: [fr] : Add certificates.md (c69cf8f557)