k8s签署CFSSL创建证书
一、证书结构图
- kubernetes提供一个CA根证书平台
- apiserver、kubelet等服务等证书均由kubernetes的CA根证书机构颁发
- 由于是同一CA机构颁发的证书,apiserver和kubelet之间也能自由进行访问
- etcd在集群外,etcd相关的证书均由etcd的CA机构颁发
二、kubeadm部署集群中证书
- 证书都位于/etc/kubernetes/pki目录下:
- 其中ca.crt、ca.key为kubernetes的ca机构,其他证书均由该证书机构颁发
三、集群相关证书类型
- client certifcate:用于服务端认证客户端,例如etcdctl、etcd proxy、fleetctl、docker客户端
- server certificate:服务端使用,客户端以此验证服务端身份,例如docker服务端、kube-apiserver
- peer certfiicate:双向证书、用于etcd集群成员间通信
根据认证对象可以将证书分成三类:
- 服务器证书 server cert、
- 客户端证书client cert、
- 对等证书peer cert(表示即是server cert又是client cert)
在kubernetes集群中需要的证书种类如下:
- etcd节点需要标识自己服务的server cert、也需要client cert与etcd集群其他节点交互,当然可以分别指定2个证书、也可以使用一个对等证书
- master节点需要标识apiserver服务的server cert、也需要client cert连接etcd集群、这里也使用一个对等证书
- kubectl calico kube-proxy只需要client cert、因此证书请求中hosts字段可以为空
- kubelet的证书比较特殊、不是手动生成、他由node节点TLS bootstrap向apiserver请求、由master节点的controller-manager自动签发、包含一个client cert和一个server cer
四、cfssl的使用(自签证书)
所有的证书颁发出来都需要两个步骤:1、有一个证书颁发机构 2、提交证书申请,根据申请CA机构颁发证书给我们、cfssl也一样,使用如下
- 初始化一个证书颁发机构 -- cfssl gencert -initca ca-csr.json | cfssljson -bare ca
- 使用证书机构颁发证书给别人 --initca 传入ca机构颁发证书
1、创建证书颁发机构如下:
以上,CA颁发机构根证书生成成功:ca-key.pem和ca.pem,其中csr可以忽略,不用关注