高可用Kubernetes集群-2. ca证书与秘钥

时间:2021-08-08 23:46:23

四.CA证书与秘钥

kubernetes集群安全访问有两种方式:"基于CA签名的双向数字证书认证"与"基于BASE或TOKEN的简单认证",生产环境推荐使用"基于CA签名的双向数字证书认证"。

本文档采用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。

以kubenode1为例,kubenode2&kubenode3做适当小调整。

1. 安装CFSSL

[root@kubenode1 ~]# mkdir -p /usr/local/cfssl
[root@kubenode1 ~]# cd /usr/local/cfssl/ # cfssl
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@kubenode1 cfssl]# mv cfssl_linux-amd64 cfssl
[root@kubenode1 cfssl]# chmod +x cfssl # cfssl-certinfo
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@kubenode1 cfssl]# mv cfssl-certinfo_linux-amd64 cfssl-certinfo
[root@kubenode1 cfssl]# chmod +x cfssl-certinfo # cfssljson
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@kubenode1 cfssl]# mv cfssljson_linux-amd64 cfssljson
[root@kubenode1 cfssl]# chmod +x cfssljson

2. 生成CA模板

# kubenode1节点完成即可
[root@kubenode1 ~]# cd /usr/local/cfssl/ # 生产CA配置文件模板
[root@kubenode1 cfssl]# cfssl print-defaults config > config.json # 生产CA证书签名请求文件模板
[root@kubenode1 cfssl]# cfssl print-defaults csr > csr.json

3. CA配置文件

# kubenode1节点完成即可,以下的CA证书,签名等可通过scp分发到kubenode2&kubenode3;
# ca-config.json:1个profiles,分别指定不同的过期时间,使用场景等参数,根据需要在不同场景使用不同的profile签名证书;这里以生成的模板为基础修改;
# “signing”:表示该证书可用于签名其他证书,生成的ca.pem证书中CA=TRUE;
# ”server auth“:client可用该CA对server提供的证书进行验证;
# “client auth”:server可用该CA对client提供的证书进行验证;
# 注意每个模块或每行有或没有“,”的区别
[root@kubenode1 cfssl]# cp config.json ca-config.json
[root@kubenode1 cfssl]# vim ca-config.json
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}

4. CA证书签名请求

# “CN”:Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name);浏览器使用该字段验证网站是否合法;
# “O”:Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)
[root@kubenode1 cfssl]# cp csr.json ca-csr.json
[root@kubenode1 cfssl]# vim ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "k8s",
"OU": "cloudteam"
}
]

5. 生成CA证书与秘钥

[root@kubenode1 cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@kubenode1 cfssl]# ls ca*

高可用Kubernetes集群-2. ca证书与秘钥

# 简单查看
[root@kubenode1 cfssl]# cfssl-certinfo -cert ca.pem

6. 分发CA证书

# 将生成的CA证书,秘钥,配置文件等分发到所有机器;
# ca-key.pem与ca.pem重要
[root@kubenode1 ~]# mkdir -p /etc/kubernetes/ssl
[root@kubenode1 ~]# cp /usr/local/cfssl/ca* /etc/kubernetes/ssl/
[root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.22:/etc/kubernetes/ssl/
[root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.23:/etc/kubernetes/ssl/