一:前言
每个Kubernetes集群都有一个集群根证书颁发机构(CA)。 集群中的组件通常使?CA来验证API SERVER的证书,由API服务器验证kubelet客户端证书等。为了支持这一特点,CA证书包被分发到集群中的每个节点,并作为一个sercret附加分发到默认service account上。
生成的 CA 证书和秘钥文件如下:
ca-key.pem
ca.pem
kubernetes-key.pem
kubernetes.pem
kube-proxy.pem
kube-proxy-key.pem
admin.pem
admin-key.pem
使用证书的组件如下:
etcd:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kube-apiserver:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kubelet:使用 ca.pem;
kube-proxy:使用 ca.pem、kube-proxy-key.pem、kubeproxy.pem;
kubectl:使用 ca.pem、admin-key.pem、admin.pem;
kube-controller-manager:使用 ca-key.pem、ca.pem
kubernetes集群节点部署结构:
10.116.137.196 k8s_master
10.116.82.28 k8s_node1
10.116.36.57 k8s_node2
二:安装CFSSL
-
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
-
chmod +x cfssl_linux-amd64
-
mv cfssl_linux-amd64 /usr/local/bin/cfssl
-
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
-
chmod +x cfssljson_linux-amd64
-
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
-
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
-
chmod +x cfssl-certinfo_linux-amd64
-
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
-
export PATH=/usr/local/bin:$PATH
三:创建 CA (Certificate Authority)
mkdir /root/ssl
cd /root/ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json
config.json
-
{
-
"signing": {
-
"default": {
-
"expiry": "168h"
-
},
-
"profiles": {
-
"www": {
-
"expiry": "8760h",
-
"usages": [
-
"signing",
-
"key encipherment",
-
"server auth"
-
]
-
},
-
"client": {
-
"expiry": "8760h",
-
"usages": [
-
"signing",
-
"key encipherment",
-
"client auth"
-
]
-
}
-
}
-
}
-
}
csr.json
-
{
-
"CN": "example.net",
-
"hosts": [
-
"example.net",
-
"www.example.net"
-
],
-
"key": {
-
"algo": "ecdsa",
-
"size": 256
-
},
-
"names": [
-
{
-
"C": "US",
-
"L": "CA",
-
"ST": "San Francisco"
-
}
-
]
-
}
# 根据config.json文件的格式创建如下的ca-config.json文件
# 过期时间设置成了 87600h
ca-config.json
-
{
-
"signing": {
-
"default": {
-
"expiry": "87600h"
-
},
-
"profiles": {
-
"kubernetes": {
-
"usages": [
-
"signing",
-
"key encipherment",
-
"server auth",
-
"client auth"
-
],
-
"expiry": "87600h"
-
}
-
}
-
}
-
}
ca-csr.json
-
{
-
"CN": "kubernetes",
-
"key": {
-
"algo": "rsa",
-
"size": 2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "k8s",
-
"OU": "System"
-
}
-
]
-
}
生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
四:创建 kubernetes 证书
kubernetes-csr.json
-
{
-
"CN": "kubernetes",
-
"hosts": [
-
"127.0.0.1",
-
"10.116.137.196",
-
"10.116.82.28",
-
"10.116.36.57",
-
"10.254.0.1",
-
"kubernetes",
-
"kubernetes.default",
-
"kubernetes.default.svc",
-
"kubernetes.default.svc.cluster",
-
"kubernetes.default.svc.cluster.local"
-
],
-
"key": {
-
"algo":"rsa",
-
"size":2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "k8s",
-
"OU": "System"
-
}
-
]
-
}
生成 kubernetes 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
五: 创建 admin 证书
admin-csr.json
-
{
-
"CN": "admin",
-
"hosts": [],
-
"key": {
-
"algo":"rsa",
-
"size":2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "system:masters",
-
"OU": "System"
-
}
-
]
-
}
生成 admin 证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
六: 创建 kube-proxy 证书
kube-proxy-csr.json
-
{
-
"CN": "system:kube-proxy",
-
"hosts": [],
-
"key": {
-
"algo":"rsa",
-
"size":2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "k8s",
-
"OU": "System"
-
}
-
]
-
}
生成 kube-proxy 客户端证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
七:校验证书
举例:cfssl-certinfo -cert kubernetes.pem
八:分发证书
将生成的证书和秘钥文件(后缀名为 .pem )拷贝到所有机器的
/etc/kubernetes/ssl 目录下备用;
mkdir -p /etc/kubernetes/ssl
cp *.pem /etc/kubernetes/ssl
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-2151773/
,如需转载,请注明出处,否则将追究法律责任。