Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Kubernetes Service (AKS) utilise des certificats pour l’authentification avec un grand nombre de ses composants. Vous devez faire pivoter régulièrement ces certificats pour des raisons de sécurité ou de stratégie. Cet article vous montre comment fonctionne la rotation des certificats dans votre cluster AKS.
Prerequisites
Cet article nécessite la version 2.0.77 ou ultérieure d’Azure CLI. Vérifiez votre version en utilisant la commande
az --version. Si vous devez installer ou mettre à niveau, consultez Installer Azure CLI.Configurez
kubectlpour vous connecter à votre cluster AKS à l’aide de laaz aks get-credentialscommande :az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Certificats AKS, autorités de certification et comptes de service
AKS génère et utilise les certificats, autorités de certification et comptes de service suivants :
- Le serveur d’API AKS crée une autorité de certification appelée autorité de certification de cluster, qui signe des certificats pour la communication unidirectionnelle du serveur d’API vers kubelet.
- Chaque kubelet crée une demande de signature de certificat (CSR), que l’autorité de certification de cluster signe, pour la communication du kubelet vers le serveur d’API.
- L’agrégation d’API utilise l’autorité de certification de cluster pour émettre des certificats destinés à la communication avec d’autres API. L’agrégation d’API peut également disposer de sa propre autorité de certification pour émettre ces certificats, mais elle utilise actuellement l’autorité de certification de cluster.
- Chaque nœud d’agent utilise un jeton SA, que l’autorité de certification du cluster signe.
- Le client
kubectldispose d’un certificat pour communiquer avec le cluster AKS.
Microsoft gère tous les certificats mentionnés dans cette section, à l’exception du certificat de cluster.
Dates d’expiration du certificat
Important
La date d’expiration de vos certificats dépend de la création de votre cluster AKS :
- Les clusters AKS créés avant le mois de mai 2019 possèdent des certificats qui expirent au bout de deux ans.
- Les clusters AKS créés après le mois de mai 2019 possèdent des certificats qui expirent au bout de 30 ans.
Vous pouvez vérifier quand votre cluster a été créé à l’aide de la kubectl get nodes commande, qui vous montre les Age nœuds de votre agent.
Vérifier la date d’expiration du certificat du cluster
Vérifiez la date d’expiration du certificat de cluster à l’aide de la commande
kubectl config view.kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Vérifier la date d’expiration du certificat du serveur d’API
Vérifiez la date d’expiration du certificat de serveur d’API à l’aide de la commande suivante
curl:curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Vérifier la date d’expiration du certificat de nœud de l’agent de machine virtuelle
Vérifiez la date d’expiration du certificat de nœud de l’agent de machine virtuelle à l’aide de la
az vm run-command invokecommande.Paramètres clés dans cette commande :
--resource-group <node-resource-group>- Groupe de ressources qui contient le nœud de l’agent de machine virtuelle. ---name <vm-name>: nom du nœud de l’agent de machine virtuelle. ---scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate": script qui récupère la date d’expiration du certificat de serveur d’API situé à/etc/kubernetes/certs/apiserver.crt.az vm run-command invoke --resource-group <node-resource-group> --name <vm-name> --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
Vérifier l’expiration du certificat pour le nœud de l’agent Azure Virtual Machine Scale Set
Vérifiez la date d’expiration du certificat de nœud de l’agent Azure Virtual Machine Scale Set à l’aide de la
az vmss run-command invokecommande.Paramètres clés dans cette commande :
--resource-group <node-resource-group>- Groupe de ressources qui contient le nœud de l’agent Azure Virtual Machine Scale Set. ---name <vmss-name>: Nom du groupe de machines virtuelles identiques Azure. ---instance-id 1: ID d’instance du nœud agent de l'ensemble de machines virtuelles Azure. ---scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate": script qui récupère la date d’expiration du certificat client kubelet situé à/var/lib/kubelet/pki/kubelet-client-current.pem.az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
Procéder à la rotation manuelle de vos certificats de cluster
Effectuez une rotation de tous les certificats, autorités de certification et comptes de service sur votre cluster à l’aide de la commande
az aks rotate-certs.az aks rotate-certs --resource-group <resource-group> --name <cluster-name>Important
La commande
az aks rotate-certsrecrée tous vos nœuds d’agent, vos Virtual Machine Scale Sets Azure et vos disques. Cette commande peut également entraîner jusqu’à 30 minutes de temps d’arrêt pour votre cluster AKS. Si la commande échoue avant la fin, utilisez la commande [az aks show][az-aks-show] pour vérifier que l’état du cluster estCertificate Rotating. Si le cluster est dans un état d’échec, réexécutez laaz aks rotate-certscommande pour faire pivoter à nouveau vos certificats.Vérifiez que les anciens certificats ne sont plus valides à l’aide d’une
kubectlcommande. L’exemple suivant utilise lakubectl get nodescommande :kubectl get nodesSi vous n’avez pas mis à jour les certificats utilisés par
kubectl, vous voyez une erreur similaire à l’exemple de sortie suivant :Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")Mettez à jour le certificat utilisé
kubectlà l’aide de la commandeaz aks get-credentialsavec l’indicateur--overwrite-existing.az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existingVérifiez que les certificats sont mis à jour à l’aide de la
kubectl getcommande.kubectl get nodes
Si vous avez des services qui s’exécutent sur AKS, vous devrez peut-être également mettre à jour leurs certificats.
Renouveler le certificat de serveur kubelet
Lorsque vous faites pivoter le certificat de service kubelet, AKS autorise le démarrage TLS (Transport Layer Security) du serveur kubelet, à la fois pour le démarrage et la rotation des certificats de service signés par l'autorité de certification (CA) du cluster.
Limitations pour la rotation des certificats de serveur kubelet
- Pris en charge sur Kubernetes version 1.27 et ultérieures.
- Il n’est pas pris en charge lorsque le pool de nœuds utilise un instantané de pool de nœuds basé sur une image de nœud antérieure à
202501.12.0. - Vous ne pouvez pas activer cette fonctionnalité manuellement. Kubelet servant la rotation des certificats est activé par défaut sur les pools de nœuds existants lorsqu’ils effectuent leur première mise à niveau vers une version Kubernetes 1.27 ou ultérieure. La rotation des certificats Kubelet est activée par défaut sur les nouveaux pools de nœuds avec Kubernetes version 1.27 ou plus. Pour voir si la rotation des certificats de service kubelet est activée dans votre région, vérifiez les versions AKS.
Vérifier que la rotation des certificats de service kubelet est activée
Chaque nœud avec la fonctionnalité activée est automatiquement attribué à l’étiquette kubernetes.azure.com/kubelet-serving-ca=cluster.
Vérifiez que les étiquettes sont définies à l’aide de la
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-cacommande.kubectl get nodes -L kubernetes.azure.com/kubelet-serving-caLa sortie doit afficher l’étiquette
kubernetes.azure.com/kubelet-serving-caavec la valeurclusterde chaque nœud d’agent.
Vérifier que kubelet TLS Bootstrapping fonctionne
Vérifiez que le processus de démarrage a lieu à l’aide de la
kubectl getcommande.kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-servingDans la sortie, toutes les demandes de CSR doivent être dans l’état
Approved,Issued, ce qui indique que la demande a été approuvée et qu’un certificat signé a été émis. Les CSR de service ont le nom dukubernetes.io/kubelet-servingsignataire . Par exemple:NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-1ab2c 113s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:uoxr9r none Approved,Issued csr-defgh 111s kubernetes.io/kubelet-serving system:node:akswinp7000000 none Approved,Issued csr-ij3kl 46m kubernetes.io/kubelet-serving system:node:akswinp6000000 none Approved,Issued csr-mn4op 46m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:ho7zyu none Approved,Issued
Vérifier que kubelet utilise un certificat obtenu à partir du démarrage TLS du serveur
Vérifiez que kubelet utilise un certificat de service signé par l’autorité de certification de cluster à l’aide de la
kubectl debugcommande.kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pemSi un
kubelet-server-current.pemlien symbolique existe, le kubelet a démarré/renouvelé son propre certificat de serveur et l'AC du cluster l'a signé.
Désactiver la rotation des certificats kubelet de service
Désactivez la rotation des certificats de kubelet en mettant à jour le pool de nœuds à l’aide de la commande
az aks nodepool updateavec la baliseaks-disable-kubelet-serving-certificate-rotation=true.az aks nodepool update --cluster-name <cluster-name> --resource-group <resource-group> --name <node-pool-name> --tags aks-disable-kubelet-serving-certificate-rotation=true
- Réimagez vos nœuds à l’aide d’une mise à niveau d'image de nœud ou en mettant à l’échelle le pool sur zéro instances, puis ramenez-les à la valeur souhaitée.
Autorotation de certificat
Gardez à l'esprit les considérations suivantes lors de l'utilisation des rotations automatiques de certificat :
- Si vous disposez d’un cluster existant, vous devez mettre à niveau ce cluster pour activer l’autorotation de certificat.
- Ne désactivez pas le démarrage TLS pour activer l’autorotation du certificat.
- Si le cluster est dans un état arrêté pendant l’autorotation de certificat, seuls les certificats du plan de contrôle sont affectés. Dans ce cas, vous devez recréer le pool de nœuds après la rotation des certificats pour lancer la rotation des certificats du pool de nœuds.
- Pour tous les clusters AKS créés ou mis à niveau après mars 2022, AKS fait pivoter automatiquement les certificats non-CA sur les nœuds du plan de contrôle et de l'agent dans les 80 % de la durée de validité du certificat client avant leur expiration, sans interruption pour le cluster.
Vérifier que le TLS Bootstrapping est activé sur le pool de nœuds de l'agent actuel.
Vérifiez que l'amorçage TLS est activé pour votre cluster en accédant à l’un des chemins suivants :
-
Sur un nœud Linux :
/var/lib/kubelet/bootstrap-kubeconfigou/host/var/lib/kubelet/bootstrap-kubeconfig -
Sur un nœud Windows :
C:\k\bootstrap-config
Pour plus d’informations, consultez Se connecter à des nœuds de cluster Azure Kubernetes Service (AKS) pour la maintenance ou la résolution des problèmes.
Remarque
Le chemin d’accès au fichier peut changer à mesure que les versions de Kubernetes évoluent.
-
Sur un nœud Linux :
Une fois qu’une région est configurée, créez un cluster ou mettez à niveau un cluster existant pour définir l’autorotation de certificat pour le certificat de cluster. Vous devez mettre à niveau le plan de contrôle et le pool de nœuds pour activer cette fonctionnalité.