コンソール、kubectl、または手動の Kubernetes Job を使用して、ACK 専用クラスター 内のすべてのノード証明書を更新します。
Container Service for Kubernetes (ACK) は、ACK マネージドクラスター 内のマスターノード証明書を自動的に更新します。 手動操作は必要ありません。
コンソールでのすべてのノード証明書の更新
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
証明書の有効期限が近づいているクラスターの横にある 証明書の更新 をクリックします。 証明書の更新 ページが開きます。
説明証明書の更新 ボタンは、証明書の有効期限が約 2 か月で切れるクラスターに表示されます。
クラスターリストの [操作] 列で [証明書の更新] をクリックします。
-
証明書の更新 ページで、証明書の更新 をクリックし、画面の指示に従います。
更新後:
-
証明書の更新 ページに、 [更新完了] のような成功メッセージが表示されます。
-
クラスターリスト ページで、クラスターの 証明書の更新 プロンプトが非表示になります。
-
kubectl を使用したすべてのノード証明書の自動更新
証明書の更新
任意のマスターノードで、すべてのノード証明書を更新します。
curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash
結果の確認
kubectl を使用してクラスターに接続していることを確認してください。 詳細については、「kubectl を使用した Kubernetes クラスターへの接続」をご参照ください。
-
マスターノードとワーカーノードのステータスを表示します。
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 ~]# -
Job のステータスを確認してください。 各マスターノード Job の COMPLETIONS が 1/1 になり、ワーカーノード Job の完了数がクラスター内のワーカーノード の総数と一致すると、更新は完了です。
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
マスターノード証明書の手動更新
-
任意のディレクトリに、次の内容で 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} -
クラスター内のマスターノードの数と名前を取得します。
-
方法 1:コマンドラインの使用
次のコマンドを実行します。
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 ~]# -
方法 2:コンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけます。 次に、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。
-
クラスター管理ページの左側のナビゲーションウィンドウで を選択すると、マスターノードの数、名前、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} :マスターノード名。 hostname を手順 2 で取得した名前に置き換えてください。
-
-
Job を作成してください。
kubectl create -f job-master2.yml -
Job のステータスを確認してください。 COMPLETIONS が 1/1 になると、証明書は更新されます。
kubectl get job -nkube-system -
残りの各マスターノードについて、手順 3〜5 を繰り返してください。
[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 ~]#
ワーカーノード証明書の手動更新
-
任意のディレクトリに、次の内容で 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}説明ワーカーノードに Taint がある場合は、その Taint に対する
tolerationsを job-node.yml ファイルに追加してください。securityContext: {}とvolumes:の間に次の内容を追加してください (Taint を持つワーカーノードが n 個ある場合は、このセクションを n 回コピーしてください):tolerations: - effect: NoSchedule key: ${key} operator: Equal value: ${value}${key}と${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 が付加されたワーカーノードの ${key} と ${value} をクエリしてください。
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
-
-
クラスターの CA キーを取得してください。
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} :ワーカーノードの数。 ワーカーノードの数を取得するには、「マスターノード証明書の手動更新」の手順 2 をご参照ください。 nodesize を実際の数に置き換えてください。
-
${key} はクラスターの CA キーです。 key を「ワーカーノード証明書の手動更新」の手順 2 の CA キーに置き換えてください。
-
-
Job を作成してください。
kubectl create -f job-node2.yml -
Job のステータスを確認してください。 COMPLETIONS がワーカーノードの数と一致すると、証明書は更新されます。
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 ~]#