zoukankan      html  css  js  c++  java
  • kubelet 证书自动续期

    1、日志错误:
    当 Kubernetes 集群日志中出现 certificate has expired or is not yet valid 错误信息时,表明证书过期

    2、证书过期原因

    • 务器时间不对,导致证书过期
      
    • 确实证书过期了
      

    证书过期,很多同学会很疑惑,我证书明明签署10年有效期或者更久,怎么刚1年就过期了,下面就来解惑。

    3、Kubernetes 集群证书

    集群分为两种证书:一、用于集群 Master、Etcd等通信的证书。 二、用于集群 Kubelet 组件证书
    4、Kubernetes 集群中 Kubelet 组件坑

    我们在搭建 Kubernetes 集群时,一般只声明用于集群 Master、Etcd等通信的证书 为 10年 或者 更久,但未声明集群 Kubelet 组件证书 ,Kubelet 组件证书 默认有效期为1年。集群运行1年以后就会导致报 certificate has expired or is not yet valid 错误,导致集群 Node不能于集群 Master正常通信。

    解决方法

    添加参数

    修改 kubelet 组件配置,具体添加下面参数
    
    1 --feature-gates=RotateKubeletServerCertificate=true
    2 --feature-gates=RotateKubeletClientCertificate=true
    3 # 1.8版本以上包含1.8都支持证书更换自动重载,以下版本只能手动重启服务
    4 --rotate-certificates
    
    修改 controller-manager 组件配置,具体添加下面参数 
    
    1 # 证书有效期为10年
    2 
    3 --experimental-cluster-signing-duration=87600h0m0s
    4 
    5 --feature-gates=RotateKubeletServerCertificate=true
    

    创建自动批准相关 CSR 请求的 ClusterRole

    vim tls-instructs-csr.yaml && kubectl apply -f tls-instructs-csr.yaml
    
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
    rules:
    - apiGroups: ["certificates.k8s.io"]
      resources: ["certificatesigningrequests/selfnodeserver"]
      verbs: ["create"]
    
    #自动批准 kubelet-bootstrap 用户 TLS bootstrapping 首次申请证书的 CSR 请求
    kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap
    
    #自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
    kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes
    
    #自动批准 system:nodes 组用户更新 kubelet 10250 api 端口证书的 CSR 请求
    kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes
    
    

    重启kube-controller-manager 和 kubelet 服务

    $ systemctl daemon-reload  2 $ systemctl restart kube-controller-manager.service
    # 进入到ssl配置目录,删除 kubelet 证书
    $ rm -f kubelet-client-current.pem kubelet-client-*.pem kubelet.key kubelet.crt
    # 重启启动,启动正常后会颁发有效期10年的ssl证书
    $ systemctl restart kubelet
    # 进入到ssl配置目录,查看证书有效期
    $ openssl x509 -in kubelet-client-current.pem -noout -text | grep "Not"
    Not Before: Nov 22 08:46:00 2019 GMT13     
    Not After : Nov 19 08:46:00 2029 GMT
    
    

    参考

    现在学习还不晚;
  • 相关阅读:
    linux命令大全
    linux几个常用命令
    linux基础入门命令自我总结——乱
    linux标准目录的结构——各个目录都是干啥的
    python基础知识9——模块2——常见内置模块
    python基础知识8——模块1——自定义模块和第三方开源模块
    手写数据结构-链表
    手写数据结构-基于动态数组的循环队列
    手写数据结构-基于动态数组的队列
    手写数据结构-基于动态数组的栈
  • 原文地址:https://www.cnblogs.com/ainimore/p/12972858.html
Copyright © 2011-2022 走看看