004.Kubernetes二进制部署创建证书
程序员文章站
2022-04-27 16:25:21
一 创建CA证书和密钥 1.1 安装cfssl工具集 1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/cert 2 3 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd ......
一 创建ca证书和密钥
1.1 安装cfssl工具集
1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/cert 2 3 [root@k8smaster01 ~]# curl -l https://pkg.cfssl.org/r1.2/cfssl_linux-amd64 -o /opt/k8s/bin/cfssl #下载cfssl软件 4 [root@k8smaster01 ~]# curl -l https://pkg.cfssl.org/r1.2/cfssljson_linux-amd64 -o /opt/k8s/bin/cfssljson #下载json模板 5 [root@k8smaster01 ~]# curl -l https://pkg.cfssl.org/r1.2/cfssl-certinfo_linux-amd64 -o /opt/k8s/bin/cfssl-certinfo 6 [root@k8smaster01 ~]# chmod u+x /opt/k8s/bin/* 7 [root@k8smaster01 ~]# export path=/opt/k8s/bin:$path
1.2 创建根证书
1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/work 2 [root@k8smaster01 ~]# cd /opt/k8s/work 3 [root@k8smaster01 work]# cfssl print-defaults config > config.json 4 [root@k8smaster01 work]# cfssl print-defaults csr > csr.json #创建模版配置json文件 5 [root@k8smaster01 work]# cp config.json ca-config.json #复制一份作为ca的配置文件 6 [root@k8smaster01 work]# cat > ca-config.json <<eof 7 { 8 "signing": { 9 "default": { 10 "expiry": "168h" 11 }, 12 "profiles": { 13 "kubernetes": { 14 "expiry": "87600h", 15 "usages": [ 16 "signing", 17 "key encipherment", 18 "server auth", 19 "client auth" 20 ] 21 } 22 } 23 } 24 } 25 eof
字段解释:
config.json:可以定义多个profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个profile;
- signing: 表示该证书可用于签名其它证书;生成的ca.pem 证书中ca=true;
- server auth: 表示client 可以用该ca 对server 提供的证书进行校验;
- client auth: 表示server 可以用该ca 对client 提供的证书进行验证。
1 [root@k8smaster01 work]# cp csr.json ca-csr.json #复制一份作为ca的证书签名请求文件 2 [root@k8smaster01 work]# cat > ca-csr.json <<eof 3 { 4 "cn": "kubernetes", 5 "key": { 6 "algo": "rsa", 7 "size": 2048 8 }, 9 "names": [ 10 { 11 "c": "cn", 12 "st": "shanghai", 13 "l": "shanghai", 14 "o": "k8s", 15 "ou": "system" 16 } 17 ] 18 } 19 eof
字段解释:
- cn: common name,kube-apiserver 从证书中提取该字段作为请求的用户名(user name);浏览器使用该字段验证网站是否合法;
- c:country;
- st:state;
- l:city;
- o: organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组(group);
- ou:organization unit。
1 [root@k8smaster01 ~]# cd /opt/k8s/work 2 [root@k8smaster01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成ca密钥(ca-key.pem)和证书(ca.pem)
提示:生成证书后,kubernetes集群需要双向tls认证,则可将ca-key.pem和ca.pem拷贝到所有要部署的机器的/etc/kubernetes/ssl目录下。
更多tls证书创建方式参考《附008.kubernetes tls证书介绍及创建》。
1.3 分发证书
1 [root@k8smaster01 ~]# cd /opt/k8s/work 2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh 3 [root@k8smaster01 work]# for all_ip in ${all_ips[@]} 4 do 5 echo ">>> ${all_ip}" 6 ssh root@${all_ip} "mkdir -p /etc/kubernetes/cert" 7 scp ca*.pem ca-config.json root@${all_ip}:/etc/kubernetes/cert 8 done