3.配置CA证书和秘钥
创建群集中需要的CA证书和秘钥
为确保安全,kubernetes系统各组件需要使用x509证书对通信进行加密和认证,CA(certificate authority)是自签名的根证书,用来签名后续创建的其他证书,这里cloudFlare的PKI工具集cfssl创建所有证书,下面部署命令均在k8s-master01节点上执行,然后远程分发文件和执行命令
- 安装cfssl工具集
[root@k8s-master01 ~]# mkdir -p /opt/k8s/work && cd /opt/k8s/work
[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@k8s-master01 work]# mv cfssl_linux-amd64 /opt/k8s/bin/cfssl
[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@k8s-master01 work]# mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson
[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@k8s-master01 work]# mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo
[root@k8s-master01 work]# chmod +x /opt/k8s/bin/*
[root@k8s-master01 work]# export PATH=/opt/k8s/bin:$PATH
- 创建根证书(CA)
CA证书是集群所有节点共享的,只需要创建一个CA证书,后续创建的所有证书都由它签名
(1) 创建配置文件
CA配置文件用于配置根证书的使用场景(profile)和具体参数(usage,过期时间,服务端认证,客户端认证,加密等),后续在签名其它证书时需要指定特定场景。
[root@k8s-master01 work]# cd /opt/k8s/work
[root@k8s-master01 work]# cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
配置说明
Signing: 表示该证书可用于签名其他证书,生产的ca.pem证书中CA=TRUE;
Server auth: 表示client可以用该 该证书对server提供的证书进行验证;
Client auth: 表示server可以用该 该证书对client提供的证书进行验证;
(2) 创建证书签名请求文件
[root@k8s-master01 work]# cd /opt/k8s/work
[root@k8s-master01 work]# cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "k8s",
"OU": "4Paradigm"
}
]
}
EOF
配置说明:
CN:Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法;
O: Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);
kube-apiserver 将提取的User,Group作为RBAC授权的用户标识;
(3) 生成CA证书和私钥
[root@k8s-master01 work]# cd /opt/k8s/work
[root@k8s-master01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@k8s-master01 work]# ls ca*
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
- 分发证书文件
将生成的CA证书,秘钥文件,配置文件拷贝到所有节点的/etc/kubernetes/cert目录下:
[root@k8s-master01 work]# cd /opt/k8s/work
[root@k8s-master01 work]# source /opt/k8s/bin/environment.sh
[root@k8s-master01 work]# for node_all_ip in ${NODE_ALL_IPS[@]}
do
echo ">>> ${node_all_ip}"
ssh root@${node_all_ip} "mkdir -p /etc/kubernetes/cert"
scp ca*.pem ca-config.json root@${node_all_ip}:/etc/kubernetes/cert
done