架构之路-k8s https证书配置,授权,认证

前言

这是一篇关于 https 证书说明的文章,并结合 k8s 部署,详细介绍了证书原理和使用方法

ssl 证书相关名词说明

根证书

我们通常所说的 CA 证书,也是根证书,生成其他证书都依赖于根证书(多做了一次非对称数据加密)

证书命名

证书文件命名非常不规范,大家太随意了,所以只根据文件名有时候根本无法区分到底谁是谁。我们可以根据文件里面的内容直接进行区分

—–END CERTIFICATE—– 证书

—–END RSA PRIVATE KEY—– 私钥

—–END CERTIFICATE REQUEST—– 证书请求文件

私钥

私钥是最核心最关键的,也是隐私度最高的

证书请求文件

证书请求文件分三份

公钥

包含证书中,随证书一起发送给客户端,服务端一般不需要单独生存

pfx文件

pfx 供浏览器使用,部分https认证需要双向验证,所以需要在浏览器端也导入证书

PKI 工具套件

我们可以使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 和其它证书

cfssl-certinfo 查看证书详情

cfssl-certinfo -cert kubernetes.pem

使用 PKI 套件生成证书的命令

生成 CA 证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

依赖于 ca-csr.json 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "HangZhou",
"L": "XS",
"O": "k8s",
"OU": "System"
}
]
}

基于 CA 根证书,生成其他证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

依赖于之前 CA 证书(用CA做了二次数字签名)

k8s证书使用情况如下

集群其他各个模块的证书颁发都依赖于 CA 根证书的颁发

etcd: 使用 ca.pem、etcd-key.pem、etcd.pem

kube-apiserver: 使用 ca.pem、kubernetes-key.pem、kubernetes.pem

kubelet: 使用 ca.pem

kube-proxy: 使用 ca.pem、kube-proxy-key.pem、kube-proxy.pem

kubectl: 使用 ca.pem、admin-key.pem、admin.pem

坚持原创技术分享,您的支持将鼓励我继续创作!