kubernetes中master节点添加node流程分析

问题:

1)从kubelet.service中我们能看到参数–kubeconfig=/etc/kubernetes/kubelet.kubeconfig,但是节点配置流程中却并未添加该文件,如下,那么该文件是怎么来的呢?记录了什么信息?

ls /etc/kubernetes/
bootstrap.kubeconfig  ca  kube-proxy.kubeconfig

2)节点配置完成启动kubelet后,执行kubectl get csr能看到Pending状态,那么kubectl certificate approve是怎么认证节点并建立通信的呢?

$ kubectl get csr
NAME                                                   AGE       REQUESTOR           CONDITION
node-csr-URWr1jYw4q-Zg9sqnbzMJ1do9OMCWfiJkWbqy8zaQ7s   1h        kubelet-bootstrap   Pending

分析:

首先看看kubelet相关启动流程,如下:

kubelet.go:
command.Execute()
server.go:
NewKubeletCommand()->Run()->run()->bootstrap.LoadClientCert()
bootstrap.go:
LoadClientCert()->verifyBootstrapClientConfig(kubeconfigPath)->loadRESTClientConfig(bootstrapPath)->certificates.NewForConfig(bootstrapClientConfig)->csr.RequestNodeCertificate->clientcmd.WriteToFile(kubeconfigData, kubeconfigPath)

a)verifyBootstrapClientConfig中的kubeconfigPath自然就是kubelet启动参数中传入的–kubeconfig,这里的配置验证主要是解析客户端配置、加载传输配置、加载tls配置、解析证书、证书过期校验。如果一切正常,LoadClientCert会直接返回nil,进入后续工作流程。
b)如果配置、证书错误或者kubelet.kubeconfig不存在均会返回false,之后加载解析的的就是bootstrap.kubeconfig这个文件了。这就进入关键点csr.RequestNodeCertificate了,首先会通过MakeEllipticPrivateKeyPEM生成私钥,之后使用认证请求、私钥、节点名生成CSR请求证书,发送后通过WaitForCertificate等待master审批,超时等待时间为1小时。审批完成后将相关配置以及证书写入kubelet.kubeconfig文件中。

结论:

这样问题的答案已经很清晰了,对于问题1),kubelet.kubeconfig是master批复CSR请求后客户端生成的。而问题2),其实master、node建立通信的过程就是标准的CSR请求流程,而Pending状态就是节点等待master审批CSR请求的等待状态,在这期间节点会一直阻塞在这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值