[!TIP]
二进制部署k8s
- 部署kubelet
TLS Bootstrap
引导证书方式
转载请注明出处:https://janrs.com
部署 kubelet
1.TLS Bootstrap
引导证书方式
[!NOTE]
需要搞明白的是:TLS Bootstrap
是用来自动管理kube-apiserver
为kubelet
颁发的客户端client
证书的。
前面两个手动颁发证书方式以及自动颁发证书方式是用来颁发kubelet
的server
证书的。
这里的区别也是绝大部分新手被绕晕的地方之一。
官方文档地址:
(https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/)
(https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/)
(https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authentication/#static-token-file)
在前面的手动颁发证书教程中提到的,kubelet
是通过 kubeconfig
文件访问 kube-apiserver
服务的。
需要为每个节点创建 system:node:<nodeName>
的节点用户,并且需要手动设置 kubeconfig
。
如果节点有几百个或者几千个,并且经常变动,那么管理难度可想而知。k8s
就提供了一个全自动的方式来管理 kubelet
的 client
证书。
这个方式就是 TLS Bootstrap
引导证书方式。具体的工作流程直接查看上面的官方说明。
1-1.停止所有服务
停止 master
上的三大组件的服务以及 node
节点上的 kubelet
以及 kube-proxy
服务
停止 master
三大组件的服务
systemctl stop kube-apiserver && \
systemctl stop kube-controller-manager && \
systemctl stop kube-scheduler
停止 node
节点上的 kubelet
以及 kube-proxy
服务
systemctl stop kubelet && \
systemctl stop kube-proxy
1-2.删除 kubelet.kubeconfig
删除 kubelet
节点上的 kubelet.kubeconfig
。使用 TLS Bootstrap
机制会创建新的。并且跟原来的不一样。
如果不删除,检测到存在,会直接使用而不创建。从而导致鉴权失败,访问不了 kube-apiserver
。
rm -rvf /etc/kubernetes/kubeconfig/kubelet.kubeconfig
1-3.创建 auth-token.csv
[!NOTE]
初次连接kube-apiserver
需要提供简单的身份认证。
身份认证方式有很多种,这里使用静态令牌认证文件。即:auth-token
。
格式为:token,user,uid,"group1,group2,group3"
。多个group
要加双引号,单个不能加。
该文件在哪里创建都可以,只要随机码至少是128
位,文件格式为csv
,
并且保证master
跟node
的token
一致就行。
大多数 linux
都能提供生成 token
的方式
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
显示
dafe33bc8fcdae7f9f16df53a95199fa
创建 auth-token.csv
复制上面生成的随机码
cat > /etc/kubernetes/config/auth-token.csv <<EOF
dafe33bc8fcdae7f9f16df53a95199fa,kubelet-bootstrap,10001,system:bootstrappers
EOF
分发到 master
节点
在哪里创建都可以。只要保证两边的认证数据都一样就行。
scp /etc/kubernetes/config/auth-token.csv root@172.16.222.121:/etc/kubernetes/config/ && \
scp /etc/kubernetes/config/auth-token.csv root@172.16.222.122:/etc/kubernetes/config/ && \
scp /etc/kubernetes/config/auth-token.csv root@1