一、TLS Bootstrapping证书详解
### --- 证书详解
~~~ 此环境中ControllerManager/Scheduler组件是手动颁发的证书。
~~~ TLS Bootstrapping:是为node节点自动的生成 和管理证书的。
~~~ Node节点为什么不去手动的生成证书和管理证书:因为node节点动态性比较强,
~~~ 不像master节点下的ControllerManager/Scheduler这类组件部署之后就不会动。
~~~ 而Keepalived的主机名和node节点的主机名是有绑定的,
~~~ 所以说当手动管理证书的情况下,集群规模很大的时候,管理起来就比较麻烦。
~~~ controller-manager安装的时候为每个k8s的组件都生成了一个controller-manager.kubeconfig文件;
~~~ 这个文件保存了apiserver的信息及去连接apiserver是所需要的证书。
### --- 查看apiserver保存的证书信息
[root@k8s-master01 ~]# cat /usr/lib/systemd/system/kube-controller-manager.service
--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig \ //在这个文件指定了controller-manager.kubeconfig
[root@k8s-master01 ~]# ls /etc/kubernetes/controller-manager.kubeconfig
/etc/kubernetes/controller-manager.kubeconfig
### --- 这个组件在启动的时候会拿着这个文件达到认证的作用,通讯是加密的。
~~~ 查看kubelet.kubeconfig
[root@k8s-master01 ~]# ls /etc/kubernetes/kubelet.kubeconfig
/etc/kubernetes/kubelet.kubeconfig
### --- kubelet也有自己的证书。
~~~ kubelet不建议手动去颁发管理证书。所以引入了TLS Bootstrapping;
~~~ 它会为kubelet自动的去颁发一个kubelet.kubeconfig证书。
二、TLS BootStrapping证书生成流程
### --- TLS证书生成原理
~~~ 在配置一个Node节点的时候,Node节点上是没有这个文件的。
~~~ # 生成原理:通过bootstrap-kubelet.kubeconfig该文件和ApiServer进行交互然后自动的去申请一个kubelet.kubeconfig 文件
~~~ 若是Node节点再启动的时候,没有kubelet.kubeconfig这个文件,
~~~ 它会拿这个bootstrap-kubelet.kubeconfig文件也就是BootStrapping认证的kubeconfig
~~~ 去申请一个kubelet.kubeconfig,然后在去启动它的进程。
三、TLS证书生成流程
### --- 查看kubernetes证书文件并删除原有的kubelet.kubeconfig配置文件
~~~ # 查看kubernetes证书文件
[root@k8s-node02 ~]# ls /etc/kubernetes/
bootstrap-kubelet.kubeconfig
kubelet.kubeconfig
~~~ # 删除原有的 kubelet.kubeconfig文件
[root@k8s-node02 ~]# rm -rf /etc/kubernetes/kubelet.kubeconfig
### --- 查看kubelet.conf的配置
~~~ # 查看配置文件
[root@k8s-node02 ~]# cat /etc/systemd/system/kubelet.service.d/10-kubelet.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig"
~~~ 注:解释说明
--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig // 指定的kubeconfig文件
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig" // 生成的文件
### --- 重启kubelet并生成证书文件
~~~ # 重启kubelet
[root@k8s-node02 ~]# systemctl restart kubelet
~~~ # 查看生成的kubeconfig证书文件,生成完之后就会和ApiServer进行交互
[root@k8s-node02 ~]# ll /etc/kubernetes/kubelet.kubeconfig
-rw------- 1 root root 2369 Apr 11 18:46 /etc/kubernetes/kubelet.kubeconfig