在集群的每個(gè)節(jié)點(diǎn)上都會(huì)運(yùn)行一個(gè)Kubelet服務(wù)進(jìn)程,通過(guò)監(jiān)聽(tīng)端口(默認(rèn)10250)來(lái)接受和執(zhí)行主節(jié)點(diǎn)指令,管理POD和其中的容器。
對(duì)于Kubelet來(lái)說(shuō),使用引導(dǎo)Token的方式進(jìn)行認(rèn)證,其使用的證書(shū)不是按照上述方法手動(dòng)創(chuàng)建,而是由工作節(jié)點(diǎn)的Bootstrap向APIServer請(qǐng)求,并由主節(jié) 點(diǎn)Controller-Manager自動(dòng)簽發(fā)的。通過(guò)上述對(duì)Controller-Manager服務(wù)進(jìn)行配置,擁有了簽發(fā)證書(shū)功能。
所謂引導(dǎo)Token方式是要求客戶(hù)端向APIServer發(fā)起請(qǐng)求時(shí)告知用戶(hù)名和Token,且該用戶(hù)具有名為“system:node-bootstrapper”的角色,因此需要將bootstrap token文件中的Kubelet-bootstrap用戶(hù)賦予該角色,Kubeler才有權(quán)限發(fā)起創(chuàng)建認(rèn)證請(qǐng)求。在主節(jié)點(diǎn)上執(zhí)行“kubectl -n kube-system get clusterrole” 命 令,查詢(xún)集群所有的角色信息。執(zhí)行“kubectl create clusterrolebinding kubelet-bootstrap--clusterrole=system:node-bootstrapper -user=kubelet-bootstrap”命令,執(zhí)行將執(zhí)行用戶(hù)和上述角色綁定操作。
接下來(lái)就可以在工作節(jié)點(diǎn)配置Kubelet,通過(guò)創(chuàng)建bootstrap kubeconfig完成Bootstrao Token認(rèn)證操作。執(zhí)行“kubectl config setcluster Kubernetes -certificate-authority=/etc/Kubernetes/ca/ca.pem-embed-certs=true--server=https://xxx.xxx.xxx.xxx:6443”,“kubectlconfig= bootstrap.kubeconfig” 命 令。 設(shè)置集群參數(shù)信息。執(zhí)行“kubectl config setcredentials kubeletbootstrap --token=xxx-kubeconfig=bootstrap.kubeconfig”命令,設(shè)置客戶(hù)端認(rèn)證參數(shù),其中的“xxx”為具體的Token串。
執(zhí) 行“kubectl config set-context default--cluster=Kubernetes -user=kubelet-bootstrap-kubeconfig=bootstrap.kubeconfig ” 命 令, 設(shè)置上下文信息。執(zhí)行“kubectl config usecontext default -kubeconfig=bootstrap.kubeconfig”命令選擇上下文。 執(zhí) 行“mv bootstrap.kubeconfig /etc/Kubernetes/”命令,將生成的文件移動(dòng)到指定路徑。當(dāng)然,還需要對(duì)cni配置進(jìn)行調(diào)整。按照上述方法,將“worker-node”目 錄 中 的“10-calico.conf”文 件 復(fù)制 到“/etc/cni/net.d”目錄中。將其中的“kubelet.service”文件復(fù)制到“/lib/systemd/system”目錄中,將“kubelet.kubeconfig”文件復(fù) 制 到“/etc/kubernetes”目錄中。
注意,這些目錄需要預(yù)先創(chuàng)建好。執(zhí)行“systemctl enable kubelet.service”、“service kubelet start”命令來(lái)啟動(dòng)Kubelet服務(wù)。在主節(jié)點(diǎn)行執(zhí)行“kubectl get csr”命令,可以看到名為“Bootstrap Pending”的請(qǐng)求已經(jīng)發(fā)送過(guò)來(lái)了。執(zhí)行“kubectl get csr |grep'Pending' | awk '{print$1} ' | xargs kubectl certificate approve”命令,讓主節(jié)點(diǎn)允許工作節(jié)點(diǎn)的TLS證書(shū)請(qǐng)求。