Renouvelez tous les certificats de nœud d'un ACK dedicated cluster via la console, kubectl ou des jobs Kubernetes manuels.
ACK met automatiquement à jour les certificats des nœuds maîtres d'un ACK managed cluster. Aucune intervention manuelle n'est nécessaire.
Mettre à jour tous les certificats de nœud dans la console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
-
Cliquez sur Update Certificate à côté du cluster dont le certificat arrive à expiration. La page Update Certificate s'ouvre.
RemarqueLe bouton Update Certificate apparaît pour les clusters dont les certificats expirent dans environ deux mois.
Dans la liste des clusters, cliquez sur Update Certificate dans la colonne Actions.
-
Sur la page Update Certificate, cliquez sur Update Certificate et suivez les instructions.
Après la mise à jour :
La page Update Certificate affiche un message de réussite tel que The certificate has been updated..
Sur la page Clusters, l'invite Update Certificate associée au cluster disparaît.
Mettre à jour automatiquement tous les certificats de nœud avec kubectl
Mettre à jour les certificats
Sur n'importe quel nœud maître, mettez à jour tous les certificats de nœud :
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash
Vérifier le résultat
Assurez-vous d'être connecté au cluster avec kubectl. Consultez Se connecter à un cluster Kubernetes à l'aide de kubectl .
-
Consultez l'état des nœuds maîtres et de travail.
kubectl get nodes[root@xxx ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION cn-hangzhou.xxx Ready <none> 23d v1.11.2 cn-hangzhou.xxx Ready <none> 23d v1.11.2 cn-hangzhou.xxx Ready master 47d v1.11.2 cn-hangzhou.xxx Ready master 47d v1.11.2 cn-hangzhou.xxx Ready master 47d v1.11.2 cn-hangzhou.xxx Ready <none> 47d v1.11.2 cn-hangzhou.xxx Ready <none> 47d v1.11.2 [root@xxx ~]# -
Vérifiez l'état des jobs. La mise à jour est terminée lorsque le champ COMPLETIONS de chaque job de nœud maître est défini sur 1/1 et que le nombre de complétions des jobs des nœuds de travail correspond au nombre total de worker node du cluster.
kubectl -n kube-system get job[root@ ~]# kubectl get job -nkube-system NAME COMPLETIONS DURATION AGE aliyun-cert-renew-master-1 1/1 46s 4m49s aliyun-cert-renew-master-2 1/1 28s 4m19s aliyun-cert-renew-master-3 1/1 26s 3m48s aliyun-cert-renew-worker 6/6 46s 3m18s ingress-nginx-admission-create 1/1 29s 3d ingress-nginx-admission-patch 1/1 43s 3d kube-eventer-init-1.5-5e0e7cl-aliyun 1/1 31s 3d
Mettre à jour manuellement les certificats des nœuds maîtres
-
Dans n'importe quel répertoire, créez un fichier job-master.yml contenant le code suivant.
apiVersion: batch/v1 kind: Job metadata: name: ${jobname} namespace: kube-system spec: backoffLimit: 0 completions: 1 parallelism: 1 template: spec: activeDeadlineSeconds: 3600 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - ${hostname} containers: - command: - /renew/upgrade-k8s.sh - --role - master image: registry.cn-hangzhou.aliyuncs.com/acs/cert-rotate:v1.0.0 imagePullPolicy: Always name: ${jobname} securityContext: privileged: true volumeMounts: - mountPath: /alicoud-k8s-host name: ${jobname} hostNetwork: true hostPID: true restartPolicy: Never schedulerName: default-scheduler securityContext: {} tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master volumes: - hostPath: path: / type: Directory name: ${jobname} -
Récupérez le nombre et les noms des nœuds maîtres du cluster.
-
Méthode 1 : Utiliser la ligne de commande
Exécutez la commande suivante :
kubectl get nodes[root@xxx ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION cn-hangzhou.ixxx Ready <none> 22d v1.11.2 cn-hangzhou.ixxx Ready <none> 22d v1.11.2 cn-hangzhou.ixxx Ready master 46d v1.11.2 cn-hangzhou.ixxx Ready master 46d v1.11.2 cn-hangzhou.ixxx Ready master 46d v1.11.2 cn-hangzhou.ixxx Ready <none> 46d v1.11.2 cn-hangzhou.ixxx Ready <none> 46d v1.11.2 [root@xxx ~]# -
Méthode 2 : Utiliser la console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche de la page de gestion du cluster, sélectionnez pour afficher le nombre de nœuds maîtres, leurs noms, adresses IP et ID d'instance.
-
-
Remplacez les variables ${jobname} et ${hostname} dans le fichier job-master.yml.
sed 's/${jobname}/cert-job-2/g; s/${hostname}/hostname/g' job-master.yml > job-master2.ymlParamètres :
${jobname} : nom du job. Dans cet exemple, définissez-le sur cert-job-2.
${hostname} : nom d'un nœud maître. Remplacez hostname par le nom obtenu à l'étape 2.
-
Créez le job.
kubectl create -f job-master2.yml -
Vérifiez l'état du job. Le certificat est mis à jour lorsque le champ COMPLETIONS indique 1/1.
kubectl get job -nkube-system -
Répétez les étapes 3 à 5 pour chaque nœud maître restant.
[root@xxx ~]# kubectl get job -nkube-system NAME COMPLETIONS DURATION AGE cert-job-2 1/1 46s 22m cert-job-3 1/1 28s 2m cert-job-4 1/1 26s 1m [root@xxx ~]#
Mettre à jour manuellement les certificats des nœuds de travail
-
Dans n'importe quel répertoire, créez un fichier job-node.yml contenant le code suivant.
apiVersion: batch/v1 kind: Job metadata: name: ${jobname} namespace: kube-system spec: backoffLimit: 0 completions: ${nodesize} parallelism: ${nodesize} template: spec: activeDeadlineSeconds: 3600 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: job-name operator: In values: - ${jobname} topologyKey: kubernetes.io/hostname containers: - command: - /renew/upgrade-k8s.sh - --role - node - --rootkey - ${key} image: registry.cn-hangzhou.aliyuncs.com/acs/cert-rotate:v1.0.0 imagePullPolicy: Always name: ${jobname} securityContext: privileged: true volumeMounts: - mountPath: /alicoud-k8s-host name: ${jobname} hostNetwork: true hostPID: true restartPolicy: Never schedulerName: default-scheduler securityContext: {} volumes: - hostPath: path: / type: Directory name: ${jobname}RemarqueSi un nœud de travail possède un Taint, ajoutez une tolérance
tolerationscorrespondante au fichier job-node.yml. Ajoutez le contenu suivant entresecurityContext: {}etvolumes:(si vous avez n nœuds de travail avec des Taints, copiez cette section n fois) :tolerations: - effect: NoSchedule key: ${key} operator: Equal value: ${value}Pour obtenir ${key} et ${value} :
-
Dans n'importe quel répertoire, créez un fichier taint.tml contenant le code suivant.
{{printf "%-50s %-12s\n" "Node" "Taint"}} {{- range .items}} {{- if $taint := (index .spec "taints") }} {{- .metadata.name }}{{ "\t" }} {{- range $taint }} {{- .key }}={{ .value }}:{{ .effect }}{{ "\t" }} {{- end }} {{- "\n" }} {{- end}} {{- end}} -
Interrogez ${name} et ${value} du nœud de travail comportant un Taint.
kubectl get nodes -o go-template-file="taint.tml"[root@xxx ~]# kubectl get nodes -o go-template-file="taint.tml" Node Taint cn-hangzhou.i-xxx key1=value1:NoSchedule cn-hangzhou.i-xxx node-role.kubernetes.io/master=<no value>:NoSchedule cn-hangzhou.i-xxx node-role.kubernetes.io/master=<no value>:NoSchedule cn-hangzhou.i-xxx node-role.kubernetes.io/master=<no value>:NoSchedule
-
-
Récupérez la clé CA du cluster.
sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0 -
Remplacez les variables ${jobname}, ${nodesize} et ${key} dans le fichier job-node.yml.
sed 's/${jobname}/cert-node-2/g; s/${nodesize}/nodesize/g; s/${key}/key/g' job-node.yml > job-node2.ymlParamètres :
${jobname} : nom du job. Dans cet exemple, définissez-le sur cert-node-2.
${nodesize} : nombre de nœuds de travail. Reportez-vous à l'étape 2 de la section Mettre à jour manuellement les certificats des nœuds maîtres pour obtenir ce nombre. Remplacez nodesize par la valeur réelle.
${key} représente la clé CA du cluster. Remplacez key par la clé CA obtenue à l'étape 2 de la section Mettre à jour manuellement les certificats des nœuds de travail.
-
Créez le job.
kubectl create -f job-node2.yml -
Vérifiez l'état du job. Les certificats sont mis à jour lorsque le champ COMPLETIONS correspond au nombre de nœuds de travail.
kubectl get job -nkube-system[root@xxx ~]# kubectl get job -nkube-system NAME COMPLETIONS DURATION AGE cert-job-2 1/1 46s 1h cert-job-3 1/1 28s 47m cert-job-4 1/1 26s 46m cert-node-2 4/4 46s 1m [root@xxx ~]#