k8s中的PKI证书
Kubernetes需要PKI證書才能進行基于TLS的身份驗證,如果使用kubeadm安裝的kubernetes,則會自動生成集群所需要的證書。
集群中是如何使用證書:
kubelet的客戶端證書,用于訪問API服務器身份驗證
API服務器端點證書
集群管理員的客戶端證書,用于API服務器身份認證
API服務器的客戶端證書,用于和kubelet的會話
API服務器的客戶端證書,用于和etcd的會話
控制器管理器(controller-manager)的客戶端證書/kubeconfig,用于和API server的會話
調度器(scheduler)的客戶端證書/kubeconfig,用于和API server的會話
前端代理(proxy) 的客戶端及服務端證書
etcd 還實現了雙向 TLS 來對客戶端和對其他對等節點進行身份驗證。
單根CA
可以創建一個單根CA,有管理員控制它,該CA可以創建多個中間CA,并將所有進一步的創建委托給Kubernetes。
需要的以下CA
| 路徑 | 默認CN | 描述 |
| ca.crt,key | kubernetes-ca | kubernetes通用CA |
| etcd/ca.crt,key | etcd-ca | 與etcd相關的所有功能 |
| front-proxy/ca.crt,key | kubernetes-front-proxy-ca | 用于前端代理 |
所需的所有證書
| 默認CN | 父級CA | O(位于Subject中) | 類型 | 主機(SAN) |
| kube-etcd | etcd-ca | server,client | localhost,127,0.0.1 | |
| kube-etcd-peer | etcd-ca | server,client | localhost,127.0.0.1,對等節點IP | |
| kube-etcd-healthcheck-client | etcd-ca | client | ||
| kube-apiserver-etcd-client | etcd-ca | system:masters | client | |
| kube-apiserver | kubernetes-ca | server | 如下【1】 | |
| kube-apiserver-kubelet-client | kubernetes-ca | system:masters | client | |
| front-proxy-client | kubernetes-front-proxy-ca | client |
【1】用來連接到集群中的不同IP或者DNS域名(就像kubeadm為負載均衡所使用的固定IP或DNS域名,kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster、kubernetes.default.svc.cluster.local)
證書使用方式及路徑
| 默認 CN | 建議的密鑰路徑 | 建議的證書路徑 | 命令 | 密鑰參數 | 證書參數 |
|---|---|---|---|---|---|
| etcd-ca | etcd/ca.key | etcd/ca.crt | kube-apiserver | --etcd-cafile | |
| kube-apiserver-etcd-client | apiserver-etcd-client.key | apiserver-etcd-client.crt | kube-apiserver | --etcd-keyfile | --etcd-certfile |
| kubernetes-ca | ca.key | ca.crt | kube-apiserver | --client-ca-file | |
| kubernetes-ca | ca.key | ca.crt | kube-controller-manager | --cluster-signing-key-file | --client-ca-file, --root-ca-file, --cluster-signing-cert-file |
| kube-apiserver | apiserver.key | apiserver.crt | kube-apiserver | --tls-private-key-file | --tls-cert-file |
| kube-apiserver-kubelet-client | apiserver-kubelet-client.key | apiserver-kubelet-client.crt | kube-apiserver | --kubelet-client-key | --kubelet-client-certificate |
| front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-apiserver | --requestheader-client-ca-file | |
| front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-controller-manager | --requestheader-client-ca-file | |
| front-proxy-client | front-proxy-client.key | front-proxy-client.crt | kube-apiserver | --proxy-client-key-file | --proxy-client-cert-file |
| etcd-ca | etcd/ca.key | etcd/ca.crt | etcd | --trusted-ca-file, --peer-trusted-ca-file | |
| kube-etcd | etcd/server.key | etcd/server.crt | etcd | --key-file | --cert-file |
| kube-etcd-peer | etcd/peer.key | etcd/peer.crt | etcd | --peer-key-file | --peer-cert-file |
| etcd-ca | etcd/ca.crt | etcdctl | --cacert | ||
| kube-etcd-healthcheck-client | etcd/healthcheck-client.key | etcd/healthcheck-client.crt | etcdctl | --key | --cert |
k8s使用x509證書中CN(Common Name)以及O(Organization)字段對應k8s中的user和group,將Authentication和RBAC Authorization[15]結合到了一起,巧妙地將Control Plane中的各個核心User和Group、與操作權限(ClusterRole)進行了綁定(ClusterRoleBinding)
總結
以上是生活随笔為你收集整理的k8s中的PKI证书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LightOJ1283 Shelving
- 下一篇: 《网络攻防》 第六周学习总结