Renove todos os certificados de nó em um cluster dedicado ACK pelo console, kubectl ou jobs manuais do Kubernetes.
O ACK atualiza automaticamente os certificados dos nós mestre em um cluster gerenciado ACK. Nenhuma operação manual é necessária.
Atualizar todos os certificados de nó no console
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
-
Clique em Update Certificate ao lado do cluster com certificado prestes a expirar. A página Update Certificate será aberta.
NotaO botão Update Certificate aparece para clusters cujos certificados expiram em aproximadamente dois meses.
Na lista de clusters, clique em Update Certificate na coluna Actions.
-
Na página Update Certificate, clique em Update Certificate e siga as instruções na tela.
Após a atualização:
A página Update Certificate exibe uma mensagem de sucesso, como The certificate has been updated..
Na página Clusters, o aviso de Update Certificate para o cluster desaparece.
Atualizar automaticamente todos os certificados de nó com kubectl
Atualizar certificados
Em qualquer nó mestre, atualize todos os certificados de nó:
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash
Verificar o resultado
Certifique-se de estar conectado ao cluster com kubectl. Consulte Conectar-se a um cluster Kubernetes usando kubectl .
-
Visualize o status dos nós mestre e worker.
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 ~]# -
Verifique o status dos jobs. A atualização estará concluída quando COMPLETIONS de cada job de nó mestre for 1/1 e as conclusões do job de nó worker corresponderem ao total de nós worker no 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
Atualizar manualmente os certificados dos nós mestre
-
Em qualquer diretório, crie um arquivo job-master.yml com o seguinte conteúdo.
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} -
Obtenha a quantidade e os nomes dos nós mestre no cluster.
-
Método 1: Linha de comando
Execute o seguinte comando:
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étodo 2: Console
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster de destino ou em Details na coluna Actions.
No painel de navegação à esquerda da página de gerenciamento do cluster, escolha para visualizar a quantidade, nomes, IPs e IDs das instâncias dos nós mestre.
-
-
Substitua as variáveis ${jobname} e ${hostname} no arquivo job-master.yml.
sed 's/${jobname}/cert-job-2/g; s/${hostname}/hostname/g' job-master.yml > job-master2.ymlParâmetros:
${jobname}: nome do job. Neste exemplo, defina como cert-job-2.
${hostname}: nome de um nó mestre. Substitua hostname pelo nome obtido na Etapa 2.
-
Crie o job.
kubectl create -f job-master2.yml -
Verifique o status do job. O certificado será atualizado quando COMPLETIONS for 1/1.
kubectl get job -nkube-system -
Repita as Etapas 3 a 5 para cada nó mestre restante.
[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 ~]#
Atualizar manualmente os certificados dos nós worker
-
Em qualquer diretório, crie um arquivo job-node.yml com o seguinte conteúdo.
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}NotaSe um nó worker tiver um Taint, adicione uma
tolerationspara esse Taint no arquivo job-node.yml. Insira o seguinte conteúdo entresecurityContext: {}evolumes:(se houver n nós worker com Taints, copie esta seção n vezes):tolerations: - effect: NoSchedule key: ${key} operator: Equal value: ${value}Para obter ${key} e ${value}:
-
Em qualquer diretório, crie um arquivo taint.tml com o seguinte conteúdo.
{{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}} -
Consulte o ${name} e o ${value} do nó worker com 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
-
-
Obtenha a chave CA do cluster.
sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0 -
Substitua as variáveis ${jobname}, ${nodesize} e ${key} no arquivo job-node.yml.
sed 's/${jobname}/cert-node-2/g; s/${nodesize}/nodesize/g; s/${key}/key/g' job-node.yml > job-node2.ymlParâmetros:
${jobname}: nome do job. Neste exemplo, defina como cert-node-2.
${nodesize}: quantidade de nós worker. Consulte a Etapa 2 em Atualizar manualmente os certificados dos nós mestre para obter essa contagem Atualizar manualmente os certificados dos nós mestre. Substitua nodesize pela contagem real.
${key}: CAKey do cluster. Substitua key pela CAKey obtida na Etapa 2 de Atualizar manualmente os certificados dos nós worker.
-
Crie o job.
kubectl create -f job-node2.yml -
Verifique o status do job. Os certificados serão atualizados quando COMPLETIONS corresponder ao número de nós worker.
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 ~]#