环境:centos7.8
安装CFSSL:
直接使⽤⼆进制源码包安装:
我的下载地址https://pkg.cfssl.org
找到cfssl-certinfo_1.6.1_linux_amd64,cfssljson_1.6.1_linux_amd64,cfssl_1.6.1_linux_amd64下载下来并用scp拷贝到centos中
到三个文件的目录中,并给予权限:
chmod +x cfssl-certinfo_1.6.1_linux_amd64
chmod +x cfssljson_1.6.1_linux_amd64
chmod +x cfssl_1.6.1_linux_amd64
#改名
mv cfssl-certinfo_1.6.1_linux_amd64 cfsslcertinfo
mv cfssljson_1.6.1_linux_amd64 cfssljson
mv cfssl_1.6.1_linux_amd64 cfssl
mv cfss* /usr/local/bin
export PATH=/usr/local/bin:$PATH
创建 CA (Certificate Authority)
mkdir /usr/ssl
cd /usr/ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json
cat ca-config.json
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
字段说明
ca-config.json
:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;signing
:表示该证书可用于签名其它证书;生成的 ca.pem 证书中CA=TRUE
;server auth
:表示client可以用该 CA 对server提供的证书进行验证;client auth
:表示server可以用该CA对client提供的证书进行验证;- expiry: 过期时间;
创建 CA 证书签名请求
创建 ca-csr.json ⽂件,内容如下:
cat ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
- “CN”:
Common Name
,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法; - “O”:
Organization
,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
⽣成 CA 证书和私钥:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ls ca*
#输出: ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
创建 kubernetes 证书
创建 kubernetes 证书签名请求⽂件 kubernetes-csr.json :
cat kubernetes-csr.json
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"10.201.143.218",
"10.201.143.217",
"10.201.143.219",
"10.254.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",