CKA真题:手动配置TLS BootStrap

所有命令都验证过,有更好的方式,欢迎留言~~~

CKA 习题和真题汇总

更多CKA资料或交流:可加 wei  xin :wyf19910905

题目要求

  • 手动配置TLS BootStrap: 
    • 给出kube-controller-manage的sign,ca证书和私钥,配置集群,添加节点时可以自动签发证书
    • ca证书和私钥位置:/var/lib/kubernetes/ca.pem(证书)和/var/lib/kubernetes/ca-key.pem(密钥)

答题提示

– 生成token文件
– 为kube-apiserver配置token认证文件
– 手动创建clusterrole、clusterrolebinding
– 为kubelet-controller-manager配置cluster-signing-cert-file、cluster-signing-key-file
– 为kubelet配置bootstrap kubeconfig、kubeconfig、rotateCertificates
配置流程可参考 https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/

答题详解

CKA 自动签发证书
给出kube-controller-manage的sign,ca证书和私钥,配置集群,添加节点时可以自动签发证书

第一步:token的配置方式

生成token文件,添加到对应的secret文件,配置给apiserver(enable 参数)

  • 考虑kubelet和apiserver约定的token如何配置上去,kubelet通过--bootstrap-kubeconfig参数写入token 
  • apiserver通过--enable-bootstrap-token-auth参数,--enable-bootstrap-token-auth为true时,会在kube-system分区下创建一个bootstrap.kubernetes.io/token的secret
    • 或者通过通过--token-auth-file来指定文件路径,文件中写入token的值
  • 关注group组:auth-extra-groups字段
    可以通过 echo | base64 -d 解密得到 system:bootstrappers:kubeadm:default-node-token

kubelet启动时使用低权限token向kubeapiserver发送CSR请求,低权限token鉴权时,需要clusterrole

clusterrole类型,也是Kube-apiserver中RBAC允许的CSR请求类型:

  • nodeclient:签发证书
  • selfnodeclient:更新证书
  • selfnodeserver:更新kubelet server证书

第二步,kubelet启动时,访问apiserver的鉴权(RBAC)

我们做完基于RBAC做权限控制后,

kubectl get cluserrole | grep nodeclient

  • 可以看到kubelet向apiserver请求时是可以创建certificatesigningrequests/nodeClient请求

kubectl get cluserrolebinding | grep approve

  • 在rolebinding中引入nodeclient的role,同时绑定了bootstrap.kubernetes.io/token的secret中的group组

根据tonken访问apiserver时,会得到token对应的用户组,token就会绑定到对应的cluserrole上,就拿到了可以创建nodeclient类型的CSR请求


第三步 kube-controller-manage 会自动签发证书

kube-controller-manage 要有自动签发证书 cluster-signing-cert-file,cluster-signing-key-file配置项

  • 要将Kubernetes CA密钥和证书提供给kube-controller-manager,请使用以下标志:

--cluster-signing-cert-file="/etc/path/to/kubernetes/ca/ca.crt" --cluster-signing-key-file="/etc/path/to/kubernetes/ca/ca.key"

  • 签名证书的有效期限可以使用以下标志配置:

--experimental-cluster-signing-duration

第四步 查看CSR请求

kubectl get csr

其中node-csr-xxx,就是kubelet启动时发给apiserver,状态为Aproved表示apiserver已经签发了证书

自动签发流程梳理理解:

  • kubelet监听10250端口,比如会使用kubectl exec登陆节点上的容器,这个请求是从apiserver转发到kubelet代理到容器,所以kubelet server也会放一套证书
  • 发送CSR请求后,kube-controller-manager会自动签发证书,对应的CSR资源对象status字段会写入证书
  • kubelet等kube-controller-manager签发证书后,kubelet会查CSR资源对象status字段,获取对应的证书,写到节点的证书路径下
  • 之后kubelet使用新签发的证书、私钥访问kubeapiserver,做list-watch资源对象(node、pod)

完整答案

  1. 通过cert-rotate将新节点添加到K8S集群
  2. 使用BOOTSTRAP Token将新节点添加到K8S集群

参考链接:

https://unofficial-kubernetes.readthedocs.io/en/latest/admin/kubelet-tls-bootstrapping/

https://blog.fanfengqiang.com/2019/03/11/kubernetes-TLS-Bootstrapping%E9%85%8D%E7%BD%AE/

发布了389 篇原创文章 · 获赞 1041 · 访问量 163万+

猜你喜欢

转载自blog.csdn.net/fly910905/article/details/103524438