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
- 创建证书存放目录
[root@K8s-controller ~]# mkdir -pv /K8s/cfssl/cert_file
2、下载cfssl工具集可执行文件
- 下载cfssl工具可执行文件
该工具用于签发证书。
[root@K8s-controller ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /K8s/cfssl/bin/cfssl --no-check-certificate
- 下载cfssljson设备可执行文件
该设备将从cfssl工具获得的json格式的输出转化为证书格式的记录进行存储。
[root@K8s-controller ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /K8s/cfssl/bin/cfssljson --no-check-certificate
- 下载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
- 查看下载完成的可执行文件
[root@K8s-controller ~]# ll /K8s/cfssl/bin/
3、cfssl工具集可执行文件赋予执行权限
- 赋予执行权限
[root@K8s-controller ~]# chmod +x /K8s/cfssl/bin/*
- 创建软链接(方便直接采用命令而不用加路径)
[root@K8s-controller ~]# ln -s /K8s/cfssl/bin/* /usr/bin/
[root@K8s-controller ~]# ll /usr/bin/cf*
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
配置解释:
- 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
配置解释:
- default字段:默认策略
- expiry:指定证书的默认有效期,此处为168h
- profiles字段:通过指不同场景的名称,后续签名生成证书及其私钥时需要指定该profile名称。能够定义一个或者多个profiles,分别指定不同的过期时间、使用场景等参数,后续在签名证书时选择使用某个profile即可。就是指定证书使用场景,此处的"www"、"client"分别
- 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
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"etcd": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
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*
(三)、创建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
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
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*
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923898.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!