k8s学习记录,bootstraping原理(三)

文章中资料参考来源2022 云原生Kubernetes全栈架构师

TLS Bootstraping官方文档

当工作节点启动时,kubelet会做以下这些事 :

1、在文件夹中寻找kubeconfig文件. 通常是在/etc/kubenetes/目录下

2、在文件中检索 api server的地址和认证信息

3、通过检索到的证书和url地址连接api server,通信

通信成功,master节点就会把node当作一个可用的节点,分配pods到工作节点上

1、kubelet启动

2、kubelet查找目录下没有kubelet.kubeconfig文件

3、kubelet查找目录下的bootstrap-kubelet.kubeconfig文件

4、kubelet读取bootstrap-kubelet.kubeconfig文件,检索出api server的url地址和token值

5、kubelet连接api server,使用token进行认证



master节点中存的secret,解析后的token yaml文件中有加密后的值,bootstrap就是根据这个来进行匹配认证

api server会把这个token识别成一个username,system:bootstrap:,属于system:bootstrappers这个组,这个组具有申请csr的权限,该组的权限绑定在一个叫system:node-bootstrapper的clusterrole上

clusterrole:k8s集群级别的权限控制,作用于整个k8s集群

cluserrolebinding: 集群权限的绑定,它可以把某个clusterrole绑定到一个用户、组或者servicecount上


kubelet有权限创建CSR,创建之后,拿着CSR去找API Server申请一个证书;controller-manager就会给颁发一个证书

6、经过上面的认证,kubelet就有了创建和检索CSR的权限

7、kubelet给它自己创建了一个CSR,名称为:kubernetes.io/kube-apiserver-client-kubelet

8、CSR允许有两种方式:

a、k8s管理员使用kubectl手动颁发证书

b、如果配置了相关权限,kube-controller-manager会自动同意CSR

1)kube-controller-manager有一个CSRApprovingController,会校验kubelet发来的CSR的 username和group是否有创建CSR的权限,而且还要验证签发者是否是:kubernetes.io/kube-apiserver-client-kubelet 】
2)controller-manager同意CSR请求

9、CSR被同意后,controller-manager创建kubelet的证书

10、controller-manager将证书更新至CSR的status字段

11、kubelet从apiserver获取证书

12、kubelet从获取到的key和证书文件创建kubelet.kubeconfig

13、kubelet启动完成并正常工作

14、可选项:如果配置了自动续期,kubelet会在证书文件过期的时候利用之前的kubeconfig文件去申请一个新的证书,续约。

15、新申请的证书被同意后签发,取决于配置文件,可手动或自动

a、kubelet创建的CSR是属于一个 O: system:nodes

b、CN:system:nodes:主机名

Kubelet配置自动创建证书

Kube-controller-manager配置

To enable the kubelet to request and receive a new certificate, create a ClusterRoleBinding that binds the group in which the bootstrapping node is a member system:bootstrappers to the ClusterRole that grants it permission, system:certificates.k8s.io:certificatesigningrequests:nodeclient:
允许kubelet请求和接收新的证书

To enable the kubelet to renew its own client certificate, create a ClusterRoleBinding that binds the group in which the fully functioning node is a member system:nodes to the ClusterRole that grants it permission, system:certificates.k8s.io:certificatesigningrequests:selfnodeclient:
允许kubelet新颁发自己的客户端证书

生成token的命令

head -c 16 /dev/urandom | od -An -t x | tr -d ' '
posted @ 2021-05-06 19:53  Hei蛋炒饭  阅读(500)  评论(0编辑  收藏  举报