阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

本文介绍如何更新Kubernetes集群即将过期的证书。您可以通过控制台操作,也可以通过命令行自动化一键式更新所有节点证书,也可以手动更新master和worker节点证书。

前提条件

  • 您已经成功创建一个Kubernetes集群,参见创建Kubernetes 集群。
  • 您可以通过kubectl连接集群,参见通过 kubectl 连接 Kubernetes 集群。

控制台更新所有节点证书

在容器服务管理控制台,单击目标集群的更新证书更新即将过期的证书,请参考更新即将过期证书。

命令行自动更新所有节点证书

登录集群任意master节点,执行以下命令完成集群所有节点的证书更新。

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

执行结果

  1. 执行以下命令,查看集群master和worker节点状态。
    $ kubectl get nodes

    阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

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

    阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

手动更新master节点证书

  1. 任意路径下,复制以下内容,创建job-master.yml文件。
    apiVersion: batch/v1kind: Jobmetadata:  name: ${jobname}  namespace: kube-systemspec:  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}
  2. 获取集群master节点个数和hostname
    • 方法一:

      执行以下命令:

      $ kubectl get nodes

      阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

    • 方法二:

      1. 登录容器服务管理控制台。
      2. 在Kubernetes菜单下,单击左侧导航栏的集群 > 集群,进入集群列表页面。
        阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书
      3. 选择目标集群,单击集群名称,查看集群详细信息,单击左侧导航栏的节点列表获取master个数和hostname
        阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书
  3. 执行以下命令替换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名称。
  4. 执行以下命令创建Job。
    $ kubectl create -f job-master2.yml
  5. 执行以下命令查看Job状态,当SUCCESSFUL均为1时,证书完成更新。
    $ kubectl get job –nkube-system
  6. 重复执行步骤3~5,完成所有master节点的证书更新。
    阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

手动更新worker节点证书

  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: {}
          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}的方法如下:

    1. 任意路径下,复制以下内容,创建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}}
    2. 执行以下命令,查询带有taint的worker节点的${name}${value}
      $ kubectl get nodes -o go-template-file="taint.tml"

      阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

  2. 执行以下命令,获取集群的CAKey。
    $ sed '1d' /etc/kubernetes/pki/ca.key | base64 -w 0
  3. 执行以下命令替换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节点个数,获取方法可参考手动更新master节点证书的步骤2。此处请将nodesize替换为集群的worker个数。
    • ${key}为集群的CAKey,此处请将key替换为手动更新worker节点证书步骤3获取到的CAKey。
  4. 执行以下命令创建 Job。
    $ kubectl create –f job-node2.yml
  5. 执行以下命令查看Job状态,当SUCCESSFUL为集群worker节点数时,证书完成更新。
    $ kubectl get job –nkube-system

    阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书阿里云容器服务Kubernetes版更新Kubernetes集群即将过期的证书

原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33822.html

发表评论

登录后才能评论