CentOS7二进制安装包方式部署K8S集群之CA根证书生成

目录

(一)、安装cfssl工具集

1、创建cfssl工具集相关目录

2、下载cfssl工具集可执行文件

3、cfssl工具集可执行文件赋予执行权限

4、生成默认文件

(1)、生成默认csr证书签名请求文件

(2)、生成默认证书配置文件

(二)、创建etcd集群CA根证书和CA根证书私钥

1、创建etcd集群CA根证书签名请求文件

2、创建etcd集群CA根证书配置文件

3、根据etcd集群CA根证书签名请求文件生成相关证书文件

(三)、创建kubernetes集群CA根证书和CA根证书私钥

1、创建kubernetes集群CA根证书签名请求文件

2、创建kubernetes集群CA根证书配置文件

3、根据kubernetes集群CA根证书签名请求文件生成相关证书文件


更多精彩博文详见:

《Linux系统应用运维》专栏总目录(持续更新)

《CentOS二进制安装包方式部署K8S集群之系统初始化》

《CentOS7二进制安装包方式部署K8S集群之CA根证书生成》

《CentOS7二进制安装包方式部署K8S集群之ETCD集群部署》

为确保安全,Kubernetes集群各组件间、etcd集群间需要使用证书对通信进行加密和认证。CA (Certificate Authority) 是自签名的根证书,用来签名后续创建的其它证书。

本文主要介绍了在CentOS 7系统下,使用二进制安装包方式部署K8S集群中CA证书创建的相关内容。这里使用cfssl工具来生成自签名证书。cfssl是一个开源的证书管理工具,使用json文件生成证书,相比OpenSSL更方便使用。可在kubernetes集群的任意节点安装cfssl工具,这里在K8s-controller节点上进行操作。

(一)、安装cfssl工具集

1、创建cfssl工具集相关目录

  • 创建安装目录

root@K8s-controller \~\]# mkdir -pv /K8s/cfssl/bin ![](https://i-blog.csdnimg.cn/direct/b1f81f7f35e14cd38f4054e23a3865aa.png)

  • 创建证书存放目录

root@K8s-controller \~\]# mkdir -pv /K8s/cfssl/cert_file ![](https://i-blog.csdnimg.cn/direct/1204c3131842433eac18ecb8f03ad8e3.png)

2、下载cfssl工具集可执行文件

  • 下载cfssl工具可执行文件

该工具用于签发证书。

root@K8s-controller \~\]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /K8s/cfssl/bin/cfssl --no-check-certificate ![](https://i-blog.csdnimg.cn/direct/fdd88a1d9dfc433f9499f20411fcf50a.png)

  • 下载cfssljson工具可执行文件

该工具将从cfssl工具获得的json格式的输出转化为证书格式的文件进行存储。

root@K8s-controller \~\]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /K8s/cfssl/bin/cfssljson --no-check-certificate ![](https://i-blog.csdnimg.cn/direct/df64b0ab3c30436e99af11ce02445eaf.png)

  • 下载cfssl-certinfo工具可执行文件

该工具可显示CSR或证书文件的详细信息以及可以对证书进行校验。

root@K8s-controller \~\]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /K8s/cfssl/bin/cfssl-certinfo --no-check-certificate ![](https://i-blog.csdnimg.cn/direct/3d2d11f0cc9246bb85fb6c41f8fc7fb6.png)

  • 查看下载完成的可执行文件

root@K8s-controller \~\]# ll /K8s/cfssl/bin/ ![](https://i-blog.csdnimg.cn/direct/f735722ee56242e1b65399b75fbcc5e4.png)

3、cfssl工具集可执行文件赋予执行权限

  • 赋予执行权限

root@K8s-controller \~\]# chmod +x /K8s/cfssl/bin/\* ![](https://i-blog.csdnimg.cn/direct/289a72457adb421e8a227768e54deff4.png) * **创建软链接(方便直接使用命令而不用加路径)** \[root@K8s-controller \~\]# ln -s /K8s/cfssl/bin/\* /usr/bin/ \[root@K8s-controller \~\]# ll /usr/bin/cf\* ![](https://i-blog.csdnimg.cn/direct/3cd6b876b8ac4a52ab9155d6dcf83c10.png)

4、生成默认文件

使用如下两个命令可生成默认配置文件,再根据实际需求修改生成的默认配置文件,可快速生成需要的配置文件。

(1)、生成默认csr证书签名请求文件

命令:cfssl print-defaults csr > ca-csr.json

root@K8s-controller \~\]# cfssl print-defaults csr \> /K8s/cfssl/cert_file/ca-csr-defaults.json \[root@K8s-controller \~\]# cat /K8s/cfssl/cert_file/ca-csr-defaults.json ![](https://i-blog.csdnimg.cn/direct/f58d8aea7ddf4eccba2d3781d56f04b4.png) **配置解释:** * **CN:**Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法。一般写的是域名,非常重要。 * **hosts:**表示可以使用此csr文件申请的证书的主机名、域名或者IP。为空或者""表示所有的主机名、域名或者IP都可以使用。 * **key:**生成证书的算法 * **names:**一些其它的属性 * **C:**Country,所在国家的简称,只能是国家字母缩写,如CN * **ST:**State/Provice,所在州/省份简称,如Guangxi * **L:**Locality Name,所在地区/城市简称,如Nanning * **O:**Organization Name,组织名称/单位名称(对于SSL证书,一般为网站域名,而对于代码签名证书则为申请单位名称。kube-apiserver从证书中提取该字段作为请求用户所属的用户组(Group)。 * **OU:**Organization Unit Name,公司部门名称 **kube-apiserver将提取的User Name、Group作为RBAC授权的用户标识。**

(2)、生成默认证书配置文件

命令:cfssl print-defaults config > ca-config.json

root@K8s-controller \~\]# cfssl print-defaults config \> /K8s/cfssl/cert_file/ca-config-defaults.json \[root@K8s-controller \~\]# cat /K8s/cfssl/cert_file/ca-config-defaults.json ![](https://i-blog.csdnimg.cn/direct/1d312f8c5f5c490aa714209274ec155e.png) **配置解释:** * **default字段:**默认策略 * **expiry:**指定证书的默认有效期,此处为168h * **profiles字段:**指定证书使用场景,此处的"www"、"client"分别是指不同场景的名称,后续签名生成证书及其私钥时需要指定该profile名称。可以定义一个或者多个profiles,分别指定不同的过期时间、使用场景等参数,后续在签名证书时选择使用某个profile即可。 * **expiry:**8760h表示证书有效期为一年,如果不写则以default策略中的expiry为准。 * **signing:**表示该证书可以用于签名其它证书,生成的ca.pem证书中CA=TRUE。 * **server auth:**表示client可以用该该证书对server提供的证书进行验证。 * **client auth:**表示server可以用该该证书对client提供的证书进行验证。

(二)、创建etcd集群CA根证书和CA根证书私钥

此处创建etcd集群的CA根证书与CA根证书私钥,后续创建etcd集群相关的证书都由它来签名即可。etcd集群CA根证书创建后命名为etcd-ca.pem,CA根证书私钥创建后命名为etcd-ca-key.pem。

1、创建etcd集群CA根证书签名请求文件

cfssl通过证书签名请求文件可以生成证书和证书私钥。

创建CA根证书签名请求文件/K8s/cfssl/cert_file/etcd-ca-csr.json。

root@K8s-controller \~\]# cat \>\> /K8s/cfssl/cert_file/etcd-ca-csr.json \<\< EOF { "CN": "etcd-ca", "hosts": \[ \], "key": { "algo": "rsa", "size": 2048 }, "names": \[ { "C": "CN", "L": "Nanning", "ST": "Guangxi", "O": "k8s", "OU": "lbj" }

}

EOF

2、创建etcd集群CA根证书配置文件

CA根证书配置文件用于配置CA根证书的使用场景 (profile) 和具体的参数 (usage,过期时间、服务端认证、客户端认证、加密等)。后续在签名生成其它证书文件时,可以新增profile场景后,再生成时指定该profile场景。

root@K8s-controller \~\]# cat \> /K8s/cfssl/cert_file/etcd-ca-config.json \<\

}

}

}

}

EOF

3、根据etcd集群CA根证书签名请求文件生成相关证书文件

此处会生成三个文件,分别是根证书etcd-ca.pem、根证书私钥etcd-ca-key.pem、证书签名请求etcd-ca.csr(用于交叉签名或重新签名)。

有了CA根证书文件及CA根证书私钥,就可以用它们来签发其它证书文件了。

root@K8s-controller \~\]# cd /K8s/cfssl/cert_file \[root@K8s-controller cert_file\]# cfssl gencert -initca=true /K8s/cfssl/cert_file/etcd-ca-csr.json \| cfssljson -bare etcd-ca \[root@K8s-controller cert_file\]# ll etcd\* ![](https://i-blog.csdnimg.cn/direct/c8e6338b32694589a4daba97028d64bd.png)

(三)、创建kubernetes集群CA根证书和CA根证书私钥

此处创建kubernetes集群的CA根证书与CA根证书私钥,后续创建kubernetes集群相关的证书都由它来签名即可。kubernetes集群的CA根证书创建后命名为kubernetes-ca.pem,CA根证书私钥创建后命名为kubernetes-ca-key.pem。

1、创建kubernetes集群CA根证书签名请求文件

cfssl通过证书签名请求文件可以生成证书和证书私钥。

创建CA根证书签名请求文件/K8s/cfssl/cert_file/kubernetes-ca-csr.json。

root@K8s-controller \~\]# cat \>\> /K8s/cfssl/cert_file/kubernetes-ca-csr.json \<\< EOF { "CN": "kubernetes-ca", "hosts": \[ \], "key": { "algo": "rsa", "size": 2048 }, "names": \[ { "C": "CN", "L": "Nanning", "ST": "Guangxi", "O": "k8s", "OU": "lbj" }

}

EOF

2、创建kubernetes集群CA根证书配置文件

CA根证书配置文件用于配置CA根证书的使用场景 (profile) 和具体的参数 (usage,过期时间、服务端认证、客户端认证、加密等)。后续在签名生成其它证书文件时,可以新增profile场景后,再生成时指定该profile场景。

root@K8s-controller \~\]# cat \> /K8s/cfssl/cert_file/kubernetes-ca-config.json \<\

}

}

}

}

EOF

3、根据kubernetes集群CA根证书签名请求文件生成相关证书文件

此处会生成三个文件,分别是根证书kubernetes-ca.pem、根证书私钥kubernetes-ca-key.pem、证书签名请求kubernetes-ca.csr(用于交叉签名或重新签名)。

有了CA根证书文件及CA根证书私钥,就可以用它们来签发其它证书文件了。

root@K8s-controller \~\]# cd /K8s/cfssl/cert_file \[root@K8s-controller cert_file\]# cfssl gencert -initca=true /K8s/cfssl/cert_file/kubernetes-ca-csr.json \| cfssljson -bare kubernetes-ca \[root@K8s-controller cert_file\]# ll kubernetes\* ![](https://i-blog.csdnimg.cn/direct/a878523263d84a649ad65682c571c2e5.png)


相关推荐
每天更新2 小时前
linux内核时间&定时器&延时
linux·运维·服务器
snpgroupcn3 小时前
SAP S/4HANA迁移方法选哪种?选择性数据转换是否合适?企业需要考虑哪些关键因素!
运维·数据库·云计算
杜子不疼.3 小时前
【Linux】冯 • 诺依曼体系结构
linux·运维·服务器
门前灯3 小时前
Linux系统之msgexec 命令详解
linux·运维·服务器·msgexec
简一之学无止境3 小时前
Linux中信号量semaphore的实现
linux
東雪蓮☆4 小时前
MySQL 全量 + 增量备份脚本(RPM 安装)实践与问题解析
linux·运维·mysql
能不能别报错4 小时前
K8s学习笔记(十一) service
笔记·学习·kubernetes
落羽的落羽4 小时前
【Linux系统】快速入门一些常用的基础指令
linux·服务器·人工智能·学习·机器学习·aigc
妮妮喔妮4 小时前
docker-compose端口冲突问题
运维·docker·容器