本文介绍如何更新Kubernetes专有版集群即将过期的证书。您可以通过控制台操作,也可以通过命令行自动化一键式更新所有节点证书,也可以手动更新master和Worker节点证书。
控制台更新所有节点证书
在容器服务管理控制台,单击目标集群的更新证书更新即将过期的证书,请参见更新即将过期证书。
命令行自动更新所有节点证书
在集群任意Master节点,执行以下命令完成集群所有节点的证书更新。
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash
执行结果:
- 执行以下命令,查看集群Master和Worker节点状态。
kubectl get nodes

- 执行以下命令,当Master节点对应的SUCCESSFUL均为1,Worker节点对应的SUCCESSFUL为集群Worker节点数时,所有证书完成更新。
kubectl get job –nkube-system

手动更新Master节点证书
- 任意路径下,复制以下内容,创建job-master.yml文件。
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}
- 获取集群Master节点个数和hostname:
-
方法一:
执行以下命令:
kubectl get nodes

-
方法二:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧的详情。
- 在集群管理页的左侧导航栏中,单击节点管理获取Master个数和名称/IP 地址/实例 ID。
- 执行以下命令替换job-master.yml文件中指定的变量${jobname}和${hostname}。
sed 's/${jobname}/cert-job-2/g; s/${hostname}/hostname/g' job-master.yml > job-master2.yml
其中:
- ${jobname}为Job和Pod的名称,此处设置为cert-job-2。
- ${hostname}为集群Master节点的名称,此处请将hostname替换为步骤2中查看到的Master名称。
- 执行以下命令创建Job。
kubectl create -f job-master2.yml
- 执行以下命令查看Job状态,当SUCCESSFUL均为1时,证书完成更新。
kubectl get job –nkube-system
- 重复执行步骤3~5,完成所有Master节点的证书更新。
手动更新Worker节点证书
- 任意路径下,复制以下内容,创建job-node.yml文件。
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}
说明 如果Worker节点带有Taint,需要在
job-node.yml文件中增加对该Taint的
tolerations
,即在
securityContext: {}
与
volumes:
之间增加以下内容(若有
n个带有Taint的Worker节点,请复制
n次):
tolerations:
- effect: NoSchedule
key: ${key}
operator: Equal
value: ${value}
获取${name}和${value}的方法如下:
- 任意路径下,复制以下内容,创建taint.tml文件。
{{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}}
- 执行以下命令,查询带有Taint的Worker节点的${name}和${value}。
kubectl get nodes -o go-template-file="taint.tml"

- 执行以下命令,获取集群的CAKey。
sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0
- 执行以下命令替换job-node.yml文件中指定的变量${jobname}、${nodesize}和${key}。
sed 's/${jobname}/cert-node-2/g; s/${nodesize}/nodesize/g; s/${key}/key/g' job-node.yml > job-node2.yml
其中:
- ${jobname}为Job和Pod的名称,此处设置为cert-node-2。
- ${nodesize}为Worker节点个数,获取方法可参见手动更新Worker节点证书的步骤1。此处请将nodesize替换为集群的Worker个数。
- ${key}为集群的CAKey,此处请将key替换为手动更新Worker节点证书步骤2获取到的CAKey。
- 执行以下命令创建Job。
kubectl create –f job-node2.yml
- 执行以下命令查看Job状态,当SUCCESSFUL为集群Worker节点数时,证书完成更新。
kubectl get job –nkube-system

在文档使用中是否遇到以下问题
更多建议
匿名提交