K8S-Demo集群实践03:准备集群各组件间HTTPS通讯需要的x509证书
- 这里一次准备好集群内部通讯需要的所有证书
- 你可以跳过本篇,在后续部署过程中需要相应证书的时候再创建
一、安装证书生产工具CFSSL
- 本案例使用CloudFlare的PKI工具集cfssl创建所有证书
- CSR:Certificate Signing Request 证书签名请求文件
[root@master1 ~]# mkdir -p /opt/install/soft/cfssl
[root@master1 ~]# cd /opt/soft/cfssl
[root@master1 cfssl]# wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64
[root@master1 cfssl]# mv cfssl_1.4.1_linux_amd64 /opt/k8s/bin/cfssl
[root@master1 cfssl]# wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_amd64
[root@master1 cfssl]# mv cfssljson_1.4.1_linux_amd64 /opt/k8s/bin/cfssljson
[root@master1 cfssl]# wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl-certinfo_1.4.1_linux_amd64
[root@master1 cfssl]# mv cfssl-certinfo_1.4.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo
[root@master1 cfssl]# chmod +x /opt/k8s/bin/*
[root@master1 ~]# cd /opt/install/cert
[root@master1 cert]# cfssl print-defaults config > ca-config.json
[root@master1 cert]# cfssl print-defaults csr > ca-csr.json
二、创建根证书
- CA(Certificate Authority)是自签名的根证书,用来签名其它证书
- 如果没有特殊说明,后续操作均在master1节点上执行
- 证书临时存放目录 /opt/install/cert
1、创建根证书配置文件 ca-config.json
[root@master1 ~]# cd /opt/install/cert
[root@master1 cert]# cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"k8s-demo-server": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
},
"k8s-demo-client": {
"usages": [
"signing",
"key encipherment",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
- expiry: “87600h”:证书有效期设置为10年
- signing:表示该证书可用于签名其它证书(生成的 ca.pem 证书中 CA=TRUE)
- key encipherment:秘钥加密
- server auth:表示client可以用该该证书对server提供的证书进行验证
- client auth:表示server可以用该该证书对client提供的证书进行验证
2、创建证书签名请求文件 ca-csr.json
[root@master1 ~]# cd /opt/install/cert
[root@master1 cert]# cat > ca-csr.json <<EOF
{
"CN": "k8s-demo-ca",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C" : "CN",
"ST": "GuangDong",
"L" : "ShenZhen",
"O" : "k8s-demo",
"OU": "jason@vip.qq.com"
}],
"ca": {
"expiry": "87600h"
}
}
EOF
- CN :Common Name,kube-apiserver从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法
- C :国家
- ST :州,省
- L : 地区,城市
- O :Organization,组织名,公司名称,kube-apiserver从证书中提取该字段作为请求用户所属的组 (Group)
- OU :组织内部单位名称,部门名称
- 不同证书csr文件的CN、O、C、ST、L、OU组合必须不同,否则可能出现PEER’S CERTIFICATE HAS AN INVALID SIGNATURE错误
3、生成CA 根证书及私钥
[root@master1 ~]# cd /opt/install/cert
[root@master1 cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@master1 cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
4、分发证书
[root@master1 ~]# cd /opt/install/cert
[root@master1 cert]# for node_ip in ${ALL_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "mkdir -p /opt/k8s/etc/cert"
scp ca*.pem ca-config.json root@${node_ip}:/opt/k8s/etc/cert
done
三、生成集群管理员admin的证书(kubectl->kube-apiserver)
1、准备证书签