在集群的每個節(jié)點上都會運行一個Kubelet服務(wù)進程,通過監(jiān)聽端口(默認(rèn)10250)來接受和執(zhí)行主節(jié)點指令,管理POD和其中的容器。
對于Kubelet來說,使用引導(dǎo)Token的方式進行認(rèn)證,其使用的證書不是按照上述方法手動創(chuàng)建,而是由工作節(jié)點的Bootstrap向APIServer請求,并由主節(jié) 點Controller-Manager自動簽發(fā)的。通過上述對Controller-Manager服務(wù)進行配置,擁有了簽發(fā)證書功能。
所謂引導(dǎo)Token方式是要求客戶端向APIServer發(fā)起請求時告知用戶名和Token,且該用戶具有名為“system:node-bootstrapper”的角色,因此需要將bootstrap token文件中的Kubelet-bootstrap用戶賦予該角色,Kubeler才有權(quán)限發(fā)起創(chuàng)建認(rèn)證請求。在主節(jié)點上執(zhí)行“kubectl -n kube-system get clusterrole” 命 令,查詢集群所有的角色信息。執(zhí)行“kubectl create clusterrolebinding kubelet-bootstrap--clusterrole=system:node-bootstrapper -user=kubelet-bootstrap”命令,執(zhí)行將執(zhí)行用戶和上述角色綁定操作。
接下來就可以在工作節(jié)點配置Kubelet,通過創(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è)置客戶端認(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)然,還需要對cni配置進行調(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”命令來啟動Kubelet服務(wù)。在主節(jié)點行執(zhí)行“kubectl get csr”命令,可以看到名為“Bootstrap Pending”的請求已經(jīng)發(fā)送過來了。執(zhí)行“kubectl get csr |grep'Pending' | awk '{print$1} ' | xargs kubectl certificate approve”命令,讓主節(jié)點允許工作節(jié)點的TLS證書請求。