所有命令都验证过,有更好的方式,欢迎留言~~~
CKA 习题和真题汇总
- CKA考试习题:K8S基础概念--API 对象
- CKA考试习题:调度管理- nodeAffinity、podAffinity、Taints
- CKA考试习题:K8S日志、监控与应用管理
- CKA考试习题:网络管理-Pod网络、Ingress、DNS
- CKA考试习题:存储管理-普通卷、PV、PVC
- CKA考试习题:安全管理--Network Policy、serviceaccount、clusterrole
- CKA考试习题:k8s故障排查
- CKA真题:题目和解析-1
- CKA真题:题目和解析-2
- CKA真题:题目和解析-3
- CKA真题:题目和解析-4
- CKA真题:题目和解析-5
- CKA真题:题目和解析-6
更多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-tokenkubelet启动时使用低权限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)
完整答案
参考链接:
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/