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)

原文地址:https://www.cnblogs.com/gavin11/p/13112293.html