OccamsRazor 2018-03-28
kubernetes集群安全访问有两种方式:"基于CA签名的双向数字证书认证"与"基于BASE或TOKEN的简单认证",生产环境推荐使用"基于CA签名的双向数字证书认证"。
本文档采用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。
以kubenode1为例,kubenode2&kubenode3做适当小调整。
[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
# 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
# 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"
]
}
}
}
} # “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"
}
]
} [root@kubenode1 cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca [root@kubenode1 cfssl]# ls ca*

# 简单查看 [root@kubenode1 cfssl]# cfssl-certinfo -cert ca.pem
# 将生成的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* [email protected]:/etc/kubernetes/ssl/ [root@kubenode1 ~]# scp /usr/local/cfssl/ca* [email protected]:/etc/kubernetes/ssl/