すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK 専用クラスターで期限切れになる証明書を更新する

最終更新日:Mar 04, 2025

このトピックでは、期限切れが近づいているACK 専用クラスターの証明書を更新する方法について説明します。すべてのノード証明書は、コンソールまたは kubectl コマンドラインで更新できます。または、マスターノードとワーカーノードの証明書を個別に手動で更新することもできます。

説明

ACK マネージドクラスターでは、ACK はマスターノードの証明書を自動的に更新します。

ACK コンソールですべてのノードの証明書を更新する

  1. ACK コンソールにログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. 証明書を更新するクラスターを選択し、[証明書の更新] をクリックします。[証明書の更新] メッセージが表示されます。

    説明

    クラスター証明書の期限が約 2 か月後に切れる場合、[証明書の更新] ボタンが表示されます。

    Renew Certificate

  3. [証明書の更新] メッセージで、[証明書の更新] をクリックし、プロンプトに従って証明書を更新します。

    クラスター証明書が更新されると、次のメッセージが表示されます。

    • [証明書の更新] メッセージに、[証明書が更新されました] と表示されます。

    • [クラスター] ページで、[証明書の更新] ボタンが非表示になります。

kubectl を使用してすべてのノードの証明書を更新する

証明書を更新する

クラスターのマスターノードにログオンし、次のコマンドを実行してすべてのノードの証明書を更新します。

curl http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/cert-update/renew.sh | bash

結果を確認する

kubectl クライアントがクラスターに接続されています。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
  1. 次のコマンドを実行して、クラスター内のマスターノードとワーカーノードをクエリします。

    kubectl get nodes

    nodes

  2. 次のコマンドを実行し、各マスターノードの COMPLETIONS 列の値が 1 であり、各ワーカーノードの COMPLETIONS 列の値がクラスター内のワーカーノードの数と等しいことを確認します。これは、すべての証明書が更新されたことを示します。

    kubectl -n kube-system get job

    nodes

マスターノードの証明書を手動で更新する

  1. 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}
  2. クラスター内のマスターノードの数と、各マスターノードの ホスト名 を取得します。

    • 方法 1:CLI を使用する

      次のコマンドを実行します。

      kubectl get nodes

      nodes

    • 方法 2:コンソールを使用する

      1. ACK コンソールにログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

      2. [クラスター] ページで、管理するクラスターを見つけます。次に、クラスターの名前をクリックするか、[アクション] 列の [詳細] をクリックします。

      3. クラスター詳細ページの左側のナビゲーションウィンドウで、[ノード] > [ノード] を選択して、マスターノードの数、および各マスターノードの名前、IP アドレス、インスタンス ID を取得します。

  3. 次のコマンドを実行して、${ジョブ名}${ホスト名}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 で取得したマスターノード名に設定されています。

  4. 次のコマンドを実行して、ジョブを作成します。

    kubectl create -f job-master2.yml
  5. 次のコマンドを実行して、ジョブをクエリします。COMPLETIONS 列の値が 1 の場合、マスターノードの証明書が更新されたことを示します。

    kubectl get job -n kube-system
  6. 手順 3 ~ 5 を繰り返して、クラスター内の他のマスターノードの証明書を更新します。

ワーカーノードの証明書を手動で更新する

  1. 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} の値を取得するには、次の手順を実行します。

    1. 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}}
    2. 次のコマンドを実行して、taint があるワーカーノードの ${name}${value} の値をクエリします。

      kubectl get nodes -o go-template-file="taint.tml"

  2. 次のコマンドを実行して、クラスター認証局 (CA) キーを取得します。

    sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0
  3. 次のコマンドを実行して、${ジョブ名}${ノードサイズ}${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

    説明:

  4. 次のコマンドを実行して、ジョブを作成します。

    kubectl create –f job-node2.yml
  5. 次のコマンドを実行して、ジョブをクエリします。COMPLETIONS 列の値がクラスター内のワーカーノードの数と等しい場合、すべてのワーカーノードの証明書が更新されたことを示します。

    kubectl get job –n kube-system

    nodes