k8s证书及秘钥
1. 证书分类
服务器证书:server cert,用于客户端验证服务端的身份。
客户端证书:client cert,用于服务端验证客户端的身份。
对等证书:peer cert(既是
server cert又是client cert),用户成员之间的身份验证,例如 etcd。
1.1. k8s集群的证书分类
etcd节点:需要标识自己服务的server cert,也需要client cert与etcd集群其他节点交互,因此需要一个对等证书。master节点:需要标识 apiserver服务的server cert,也需要client cert连接etcd集群,也需要一个对等证书。kubelet:需要标识自己服务的server cert,也需要client cert请求apiserver,也使用一个对等证书。kubectl、kube-proxy、calico:需要client证书。
2. CA证书及秘钥
目录:/etc/kubernetes/ssl
ca
ca-key.pem
ca.pem
ca.csr
Kubernetes
kubernetes-key.pem
kubernetes.pem
kubernetes.csr
Admin
admin-key.pem
admin.pem
admin.csr
Kubelet
kubelet.crt
kubelet.key
配置文件
ca
ca-config.json
ca-csr.json
Kubernetes
kubernetes-csr.json
Admin
admin-csr.json
Kube-proxy
kube-proxy-csr.json
3. cfssl工具
安装cfssl:
4. 创建 CA (Certificate Authority)
4.1. 配置源文件
创建 CA 配置文件
ca-config.json
参数说明
ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中CA=TRUE;server auth:表示client可以用该 CA 对server提供的证书进行验证;client auth:表示server可以用该CA对client提供的证书进行验证;
创建 CA 证书签名请求
ca-csr.json
参数说明
ca-csr.json的参数
CN:
Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
names中的字段:
C : country,国家
ST: state,州或省份
L:location,城市
O:organization,组织,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group)
OU:organization unit
4.2. 执行命令
输出如下:
生成以下文件:
5. 创建 kubernetes 证书
5.1. 配置源文件
创建 kubernetes 证书签名请求文件kubernetes-csr.json。
参数说明:
MASTER_IP:master节点的IP或域名MASTER_CLUSTER_IP:kube-apiserver指定的service-cluster-ip-range网段的第一个IP,例如(10.254.0.1)。
5.2. 执行命令
输出如下:
生成以下文件:
6. 创建 admin 证书
6.1. 配置源文件
创建 admin 证书签名请求文件 admin-csr.json:
6.2. 执行命令
输出如下:
生成文件
7. 创建 kube-proxy 证书
7.1. 配置源文件
创建 kube-proxy 证书签名请求文件 kube-proxy-csr.json:
7.2. 执行命令
输出如下:
生成文件:
8. 校验证书
输出如下:
字段说明:
确认
Issuer字段的内容和ca-csr.json一致;确认
Subject字段的内容和kubernetes-csr.json一致;确认
X509v3 Subject Alternative Name字段的内容和kubernetes-csr.json一致;确认
X509v3 Key Usage、Extended Key Usage字段的内容和ca-config.json中kubernetesprofile 一致;
9. 分发证书
将生成的证书和秘钥文件(后缀名为.pem)拷贝到所有机器的 /etc/kubernetes/ssl 目录下。
参考文章:
https://kubernetes.io/docs/concepts/cluster-administration/certificates/
https://coreos.com/os/docs/latest/generate-self-signed-certificates.html
https://jimmysong.io/kubernetes-handbook/practice/create-tls-and-secret-key.html
最后更新于
这有帮助吗?