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)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注