【云原生 · Kubernetes】生成CA根证书、公钥、私钥指令(数字证书)
【摘要】 为确保安全,==kubernetes== 系统各组件需要使用 ==x509== 证书对通信进行加密和认证。CA (Certificate Authority) 是自签名的根证书,用来签名后续创建的其它证书。CA 证书是集群所有节点共享的,只需要创建一次,后续用它签名其它所有证书。本文档使用 ==CloudFlare== 的 PKI 工具集 ==cfssl==创建所有证书。注意:如果没有特殊指...
为确保安全,==kubernetes== 系统各组件需要使用 ==x509== 证书对通信进行加密和认证。
CA (Certificate Authority) 是自签名的根证书,用来签名后续创建的其它证书。
CA 证书是集群所有节点共享的,只需要创建一次,后续用它签名其它所有证书。
本文档使用 ==CloudFlare== 的 PKI 工具集 ==cfssl==创建所有证书。
注意:如果没有特殊指明,本文档的所有操作均在 qist 节点上执行。
1 安装 cfssl 工具集
mkdir -p /opt/k8s/bin
wget
https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64
mv cfssl_1.4.1_linux_amd64 /opt/k8s/bin/cfssl
wget
https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_am
d64
mv cfssljson_1.4.1_linux_amd64 /opt/k8s/bin/cfssljson
wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfsslcertinfo_1.4.1_linux_amd64
mv cfssl-certinfo_1.4.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo
chmod +x /opt/k8s/bin/*
export PATH=/opt/k8s/bin:$PATH
2 创建配置文件
CA 配置文件用于配置根证书的使用场景 (profile) 和具体参数 (usage,过期时间、服务端认证、客户端认证、加密等):
- 创建etcd K8S ca 目录
mkdir -p /opt/k8s/cfssl/{etcd,k8s}
mkdir -p /opt/k8s/cfssl/pki/{etcd,k8s}
# 创建工作目录
mkdir -p /opt/k8s/work
- 全局配置文件生成
cd /opt/k8s/work
cat > /opt/k8s/cfssl/ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "876000h"
}
}
}
}
EOF
- signing : 表示该证书可用于签名其它证书(生成的 ca.pem 证书中 CA=TRUE );
- server auth : 表示client 可以用该该证书对 server 提供的证书进行验证;
- client auth : 表示 server 可以用该该证书对client 提供的证书进行验证;
- "expiry": “876000h” : 证书有效期设置为 100 年;
3 创建证书签名请求文件
- etcd 证书签名请求文件
cd /opt/k8s/work
cat > /opt/k8s/cfssl/etcd/etcd-ca-csr.json <<EOF
{
"CN": "etcd",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "GuangZhou",
"O": "k8s",
"OU": "Qist"
}
],
"ca": {
"expiry": "876000h"
}
}
EOF
- kubernetes 证书签名请求文件
cd /opt/k8s/work
cat > /opt/k8s/cfssl/k8s/k8s-ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "GuangZhou",
"O": "k8s",
"OU": "Qist"
}
],
"ca": {
"expiry": "876000h"
}
}
EOF
- CN:Common Name : kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
- O:Organization :kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);
- kube-apiserver 将提取的 User、Group 作为 RBAC 授权的用户标识;
注意:
- 不同证书 csr 文件的 CN、C、ST、L、O、OU 组合必须不同,否则可能出现 PEER’S CERTIFICATE HAS AN INVALID SIGNATURE 错误;
- 后续创建证书的 csr 文件时,CN 都不相同(C、ST、L、O、OU 相同),以达到区分的目的;
下表可帮助您创建证书请求。
Name | 姓名 | 描述 | 示例 |
---|---|---|---|
Country Name | 国家名称 | 代表国家的两个字母 ISO 缩写。 | CN(中国) |
State or Province Name | 州或省 | 组织所在州或省的名称。此名称不可使用缩写。 | ZJ(浙江) |
Locality Name | 所在地名称 | 组织所在城市的名称。 | HZ(杭州) |
Organization Name | 组织名称 | 组织的法定全称。请勿缩写组织名称。 | 百度、腾讯、网易 |
Organizational Unit Name | 组织部门 | 可选,用于提供额外的组织信息。 | 开发、测试、市场营销 |
Common Name | 公用名 | 别名记录的完全限定域名。如果两者不能精确匹配,那么您会收到一条证书名称检测警告。 | www.yourdomain.com |
Email Address | 电子邮件地址 | 服务器管理员的电子邮件地址 | someone@yourdomain.com |
4 生成 CA 证书和私钥
- 生成 etcd CA 证书和私钥
cd /opt/k8s/work
cfssl gencert -initca /opt/k8s/cfssl/etcd/etcd-ca-csr.json | \
cfssljson -bare /opt/k8s/cfssl/pki/etcd/etcd-ca
ls -la /opt/k8s/cfssl/pki/etcd/*-ca*
root@Qist ~# ls /opt/k8s/cfssl/pki/etcd/*-ca*
/opt/k8s/cfssl/pki/etcd/etcd-ca-key.pem /opt/k8s/cfssl/pki/etcd/etcd-ca.csr
/opt/k8s/cfssl/pki/etcd/etcd-ca.pem
- 生成 kubernetes CA 证书和私钥
cd /opt/k8s/work
cfssl gencert -initca /opt/k8s/cfssl/k8s/k8s-ca-csr.json | \
cfssljson -bare /opt/k8s/cfssl/pki/k8s/k8s-ca
root@Qist ~# ls /opt/k8s/cfssl/pki/k8s/*-ca*
/opt/k8s/cfssl/pki/k8s/k8s-ca-key.pem /opt/k8s/cfssl/pki/k8s/k8s-ca.csr
/opt/k8s/cfssl/pki/k8s/k8s-ca.pem
5 分发CA证书文件
- etcd ca 证书分发
cd /opt/k8s/work
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.175:/apps/etcd/ssl
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.176:/apps/etcd/ssl
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.177:/apps/etcd/ssl
- kubernetes ca 证书分发
# k8s 连接etcd 使用ca 证书
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.175:/apps/k8s/ssl/etcd/
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.176:/apps/k8s/ssl/etcd/
scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.177:/apps/k8s/ssl/etcd/
# K8S 集群ca 证书
scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.175:/apps/k8s/ssl/k8s
scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.176:/apps/k8s/ssl/k8s
scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.177:/apps/k8s/ssl/k8s
期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~💪💪💪
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)