• 更新k8s集群的证书


    k8s集群的证书包括master节点相关证书(apiserver、etcd、proxy)和node节点相关证书(kubelet),默认的有效期都是1年。两类证书的更新方式有所不同。

    一、更新master节点相关证书

    1.首先,在master节点上执行:

    openssl x509 -noout -dates -in /etc/kubernetes/pki/apiserver.crt

    查看证书的有效期。apiserver.crt可以换成同路径下的其他crt文件。

    然后,将/etc/kubernetes/pki文件夹备份一下后,在master节点上执行:

    kubeadm alpha certs renew all

    之后,再执行openssl命令,查看证书有效期是否更新。

    2.在master节点上将/etc/kubernetes目录下的所有配置文件备份,然后执行:

    kubeadm alpha kubeconfig user --client-name=admin
    kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin  > /etc/kubernetes/admin.conf
    kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > /etc/kubernetes/controller-manager.conf
    kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > /etc/kubernetes/kubelet.conf
    kubeadm alpha kubeconfig user --client-name system:kube-scheduler > /etc/kubernetes/scheduler.conf

    3.用更新后的admin.conf替换/root/.kube/config文件。

    如果出现

    Unable to connect to the server: x509: certificate is valid for xxxx, not xxxx
    

    的报错,就需要修改/root/.kube/config文件中的cluster.server字段。

    4.重启所有master节点上的apiserver和scheduler两个系统组件。静态pod的情况见下。

    二、更新kubelet相关证书

    kubelet的证书通过修改kubelet启动参数配置为自动更新。

    1.首先,在master节点上,修改controller manager组件的参数,增加:

    kube-controller-manager --experimental-cluster-signing-duration=87600h  --feature-gates=RotateKubeletClientCertificate=true

    这两个参数。

    对于controller manager运行在静态pod中的情况,在/etc/kubernets/manifests目录下编辑controller manager的yaml文件,在启动命令下增加这两项参数。

    然后,将此yaml文件移出/etc/kubernets/manifests目录,等几秒钟,再移回来,controller manager的静态pod就会自动重启。

    注意,不要直接通过kubectl edit修改静态pod。

    对于controller manager运行在物理机上的情况,与下面kubelet的操作类似。

    2.在所有节点上,修改kubelet的systemctl的启动命令。在CentOS中位于/etc/systemd/system/kubelet.service.d中,增加:

    kubelet --feature-gates=RotateKubeletClientCertificate=true  --cert-dir=/var/lib/kubelet/pki --rotate-certificates  --rotate-server-certificates 

    四项参数。

    然后执行:

    systemctl daemon-reload
    systemctl restart kubelet

    kubelet正常运行了,则证书更新完成。

    三、更新csr资源

    执行完以上两步后,集群可能会出现日志无法查看的情况。执行kubectl logs时,报:

    Error from server: Get https://xxx:10250/containerLogs/xxx remote error: tls: internal error

    这里需要认证一下csr,即certificatesigningrequests,是kubelet向master节点发送的证书认证请求。

    执行kubectl get csr,发现有大量的csr处于Pending状态。将这些csr认证通过:

    kubectl certificate approve [name]

    一一更新后,再查看状态时变为Approved,Issued。此后,再执行kubectl logs就正常了。

    四、更新secret

    集群中与etcd相关的secret会用到etcd的证书作为字段。这些secret需要根据新生成的etcd证书进行更新。

    用kubectl get secret -n kube-system | grep etcd找出所有与etcd相关的secret资源,将里面的xxx.crt和xxx.key字段分别替换为位于/etc/kubernetes/pki/etcd下的,server.crt和server.key经过base64加密后的字符串。

    之后,重启etcd和使用到其他secret的组件即可。

  • 相关阅读:
    CF Round433 B. Jury Meeting
    CF Round433 C. Planning
    繁忙的都市
    联络员
    组合数模板
    Rinne Loves Xor
    [SDOI2016]齿轮
    水题(water)
    Music Problem
    小H和游戏
  • 原文地址:https://www.cnblogs.com/00986014w/p/13095628.html
Copyright © 2020-2023  润新知