本文介绍如何更新专有版集群即将过期的证书。您可以通过控制台操作,也可以通过命令行自动化一键式更新所有节点证书,也可以手动更新Master和Worker节点证书。
前提条件
- 已创建专有版集群。具体操作,请参见创建Kubernetes专有版集群。说明 您无需担心托管版集群中Master节点证书过期情况,容器服务ACK会自动更新托管版集群中Master节点的证书。
- 已通过kubectl连接集群。具体操作,请参见通过kubectl连接Kubernetes集群。
控制台更新所有节点证书
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 单击证书即将过期集群右侧的更新证书,进入更新证书页面。说明 如果集群证书即将在两个月左右过期,会出现更新证书。
- 在更新证书页面单击更新证书。
- 在提示页面单击确定。成功更新集群证书后,您可以看到以下内容:
- 在更新证书页面,显示更新成功。
- 在集群列表页面,目标集群无更新证书提示。
命令行自动更新所有节点证书
在集群任意Master节点,执行以下命令完成集群所有节点的证书更新。
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash
结果验证:
- 执行以下命令,查看集群Master和Worker节点状态。
kubectl get nodes
- 执行以下命令,当Master节点对应的COMPLETIONS均为1,Worker节点对应的COMPLETIONS为集群Worker节点数时,所有证书完成更新。
kubectl -n kube-system get job
手动更新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的名称,此处设置为cert-job-2。
- ${hostname}为集群Master节点的名称,此处请将hostname替换为步骤2中查看到的Master名称。
- 执行以下命令创建Job。
kubectl create -f job-master2.yml
- 执行以下命令查看Job状态,当COMPLETIONS均为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"
- 任意路径下,复制以下内容,创建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的名称,此处设置为cert-node-2。
- ${nodesize}为Worker节点个数,获取方法可参见手动更新Worker节点证书的步骤1。此处请将nodesize替换为集群的Worker个数。
- ${key}为集群的CAKey,此处请将key替换为手动更新Worker节点证书步骤2获取到的CAKey。
- 执行以下命令创建Job。
kubectl create -f job-node2.yml
- 执行以下命令查看Job状态,当COMPLETIONS为集群Worker节点数时,证书完成更新。
kubectl get job -nkube-system