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)


相关推荐
黄毛火烧雪下1 小时前
【Ruby 】脚本和自动化语言 常用的内容
运维·自动化·ruby
Madison-No71 小时前
【Linux】gcc/g++编辑器 && 初识动静态库 && 程序翻译过程
linux·服务器
小白不想白a2 小时前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
字节逆旅3 小时前
一个从从容容,一个连滚带爬:scp 与 rsync 的不同人生
linux
洛克大航海3 小时前
Linux 中新建用户
linux·运维·服务器
三口吃掉你3 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
位步3 小时前
在linux系统中使用通用包安装 Mysql
android·linux·mysql
dehuisun3 小时前
jenkins流水线部署springboot项目
运维·jenkins
fly五行4 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳4 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka