このトピックでは、期限切れが近づいているACK 専用クラスターの証明書を更新する方法について説明します。すべてのノード証明書は、コンソールまたは kubectl コマンドラインで更新できます。または、マスターノードとワーカーノードの証明書を個別に手動で更新することもできます。
ACK マネージドクラスターでは、ACK はマスターノードの証明書を自動的に更新します。
ACK コンソールですべてのノードの証明書を更新する
ACK コンソールにログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
証明書を更新するクラスターを選択し、[証明書の更新] をクリックします。[証明書の更新] メッセージが表示されます。
説明クラスター証明書の期限が約 2 か月後に切れる場合、[証明書の更新] ボタンが表示されます。

[証明書の更新] メッセージで、[証明書の更新] をクリックし、プロンプトに従って証明書を更新します。
クラスター証明書が更新されると、次のメッセージが表示されます。
[証明書の更新] メッセージに、[証明書が更新されました] と表示されます。
[クラスター] ページで、[証明書の更新] ボタンが非表示になります。
kubectl を使用してすべてのノードの証明書を更新する
証明書を更新する
クラスターのマスターノードにログオンし、次のコマンドを実行してすべてのノードの証明書を更新します。
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash結果を確認する
kubectl クライアントがクラスターに接続されています。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
次のコマンドを実行して、クラスター内のマスターノードとワーカーノードをクエリします。
kubectl get nodes
次のコマンドを実行し、各マスターノードの COMPLETIONS 列の値が 1 であり、各ワーカーノードの COMPLETIONS 列の値がクラスター内のワーカーノードの数と等しいことを確認します。これは、すべての証明書が更新されたことを示します。
kubectl -n kube-system get job
マスターノードの証明書を手動で更新する
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: null tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master volumes: - hostPath: path: / type: Directory name: ${jobname}クラスター内のマスターノードの数と、各マスターノードの ホスト名 を取得します。
方法 1:CLI を使用する
次のコマンドを実行します。
kubectl get nodes
方法 2:コンソールを使用する
ACK コンソールにログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけます。次に、クラスターの名前をクリックするか、[アクション] 列の [詳細] をクリックします。
クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択して、マスターノードの数、および各マスターノードの名前、IP アドレス、インスタンス ID を取得します。
次のコマンドを実行して、${ジョブ名}${ホスト名}job-master.yml ファイルの 変数と 変数を設定します。
sed 's/${jobname}/cert-job-2/g; s/${hostname}/hostname/g' job-master.yml > job-master2.yml説明:
${jobname} はジョブの名前です。この例では、cert-job-2 が使用されています。
${hostname} はマスターノードの名前です。この例では、hostname は、手順 2 で取得したマスターノード名に設定されています。
次のコマンドを実行して、ジョブを作成します。
kubectl create -f job-master2.yml次のコマンドを実行して、ジョブをクエリします。COMPLETIONS 列の値が 1 の場合、マスターノードの証明書が更新されたことを示します。
kubectl get job -n kube-system手順 3 ~ 5 を繰り返して、クラスター内の他のマスターノードの証明書を更新します。

ワーカーノードの証明書を手動で更新する
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: null volumes: - hostPath: path: / type: Directory name: ${jobname}説明ワーカーノードに taint がある場合は、
tolerationjob-node.yml ファイルに taint と一致するsecurityContext: {}ボリューム:nn を追加する必要があります。これを行うには、 セクションと セクションの間に次のコードを追加します。taint があるワーカーノードが 個ある場合は、次のコードを 回追加します。tolerations: - effect: NoSchedule key: ${key} operator: Equal value: ${value}${name} と ${value} の値を取得するには、次の手順を実行します。
taint.yml という名前のファイルを任意のパスに作成し、次のコードをファイルにコピーします。
{{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 があるワーカーノードの ${name} と ${value} の値をクエリします。
kubectl get nodes -o go-template-file="taint.tml"
次のコマンドを実行して、クラスター認証局 (CA) キーを取得します。
sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0次のコマンドを実行して、${ジョブ名}${ノードサイズ}${key}job-node.yml ファイルの 変数、 変数、および 変数を設定します。
sed 's/${jobname}/cert-node-2/g; s/${nodesize}/nodesize/g; s/${key}/key/g' job-node.yml > job-node2.yml説明:
${jobname} はジョブの名前です。この例では cert-node-2 が使用されています。
${nodesize} はワーカーノードの数です。この値の取得方法については、「ワーカーノードの証明書を手動で更新する」の手順 1 を参照してください。nodesize を実際の値に置き換えます。
${key} はクラスター CA キーです。この例では、key は、「ワーカーノードの証明書を手動で更新する」の手順 2 で取得した CA キーに設定されています。
次のコマンドを実行して、ジョブを作成します。
kubectl create –f job-node2.yml次のコマンドを実行して、ジョブをクエリします。COMPLETIONS 列の値がクラスター内のワーカーノードの数と等しい場合、すべてのワーカーノードの証明書が更新されたことを示します。
kubectl get job –n kube-system