kubernetes容器集群管理(3)-Kubeconfig 部署TLS Bootstrapping
1、TLS Bootstrapping一些理解如果对 TLS Bootstrapping 完全没接触过推荐:https://blog.csdn.net/paopaohll/article/details/89022920众所周知 TLS 的作用就是对通讯加密,防止中间人窃听;同时如果证书不信任的话根本就无法与 apiserver建立连接,更不用提有没有权限向 apiserver 请求指定...
目录
1、TLS Bootstrapping一些理解
2021-3-4:
关于TLS Bootstrapping的研究,已重新整理细化:https://blog.csdn.net/weixin_39855998/article/details/114369356
如果对 TLS Bootstrapping 完全没接触过推荐:
https://blog.csdn.net/paopaohll/article/details/89022920
众所周知 TLS 的作用就是对通讯加密,防止中间人窃听;同时如果证书不信任的话根本就无法与 apiserver建立连接,更不用提有没有权限向 apiserver 请求指定内容。在开启了 TLS 的集群中,每当与集群交互的时候少不了的是身份认证,使用 kubeconfig(即证书) 和 token 两种认证方式是最简单也最通用的认证方式。
当集群开启了 TLS 认证后,每个节点的 kubelet 组件都要使用由 apiserver 使用的 CA 签发的有效证书才能与 apiserver 通讯;此时如果节点多起来,为每个节点单独签署证书将是一件非常繁琐的事情;TLS bootstrapping 功能就是让 kubelet 先使用一个预定的低权限用户连接到 apiserver,然后向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署;
TLS Bootstrapping ,使用 Token 时整个启动引导过程:
1、在集群内创建特定的 Bootstrap Token Secret ,该 Secret 将替代以前的 token.csv 内置用户声明文件
2、在集群内创建首次 TLS Bootstrap 申请证书的 ClusterRole、后续 renew Kubelet client/server 的 ClusterRole,以及其相关对应的 ClusterRoleBinding;并绑定到对应的组或用户
3、调整 Controller Manager 配置,以使其能自动签署相关证书和自动清理过期的 TLS Bootstrapping Token
4、生成特定的包含 TLS Bootstrapping Token 的 bootstrap.kubeconfig 以供 kubelet 启动时使用
5、调整 Kubelet 配置,使其首次启动加载 bootstrap.kubeconfig 并使用其中的 TLS Bootstrapping Token 完成首次证书申请
6、证书被 Controller Manager 签署,成功下发,Kubelet 自动重载完成引导流程
7、后续 Kubelet 自动 renew 相关证书
--#!
就个人目前理解:想要实现K8s集群每个节点的Kubelet与管理机器Apiserver之间的通讯,首先需要TLS证书,这个之前已经利用CFSSL工具生成并分发好了;其次还需要每台节点向apiserver申请证书并同意,我们现在要做的就是让每台节点自动向管理机器申请通讯,master直接签署就可以了,不必让管理机器一台一台挨个确认。
说白了,node连接apiserver需要认证,创建好两个包含认证信息的配置文件发给node,以后node再次访问只要加上配置文件就行了,相当于身份证件。
2、部署Kubeconfig
#Kubeconfig 需要配置如下TLS Bootstrapping Token、kubelet kubeconfig、kube-proxy kubeconfig
#下载kubectl
kubectl下载地址:https://kubernetes.io/docs/tasks/tools/install-kubectl/
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
[root@master ssl]# chmod +x kubectl
[root@master ssl]# mv kubectl /opt/kubernetes/bin/
#kubeconfig配置文件创建,直接用下面kubeconfig.sh脚本文件生成 注意:export KUBE_APISERVER设置master的ip
# 创建 TLS Bootstrapping Token
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
cat > token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
#----------------------
# 创建kubelet bootstrapping kubeconfig
# apiserver服务端地址,配置错误会导致节点无法注册
export KUBE_APISERVER="https://192.168.192.128:6443"
# 设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig
# 设置上下文参数
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
# 设置默认上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
#----------------------
# 创建kube-proxy kubeconfig文件
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
--client-certificate=./kube-proxy.pem \
--client-key=./kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
3、运行上面脚本
#设置环境
[root@master ssl]# vi /etc/profile
#在文件最后一行加上
PATH=$PATH:/opt/kubernetes/bin
[root@master ssl]# source /etc/profile
#执行
[root@master ssl]# chmod +x kubeconfig.sh
[root@master ssl]# ./kubeconfig.sh
#生成bootstrap.kubeconfig kube-proxy.kubeconfig token.csv后面会用
更多推荐
所有评论(0)