本节提纲:
- 了解kubernetes的证书服务
- 创建CA证书
Kubernetes有着一套完整且复杂的认证授权控制机制,包括API Server的认证、授权、准入控制等。这样做主要目的是为了安全。不管是初学者,还是老手都需要搞清楚证书认证、理清思路明白的认证过程。
一、了解kubernetes的证书服务
1、获取证书的方式:
第三方机构证书:付费购买CA机构颁发的证书,具有真实性校验;
自签发正式:自己生成的ssl证书不受浏览器信任,在内网使用,而且功能效果差。
2、生成证书的方式:
Easy-Rsa:基于shell的简单CA实用程序;
Openssl:一套开源软件,SSL密码库工具,提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。
CFSSL:是CloudFlare开源的一款PKI/TLS工具。 CFSSL包含一个命令行工具和一个用于签名,验证并且捆绑TLS证书的HTTP API服务。 使用Go语言编写。
3、Kubernetes群集分为三大类:
Client Certificate(客户端证书)、Server Certificate(服务端证书)和Peer Certificate(双向证书)。
具体详细如下:
1、Etcd配套证书
2、Kube-APIserver配套证书
3、kube-scheduler配套证书
4、kube-controller-manager配套证书
5、kube-proxy 配套证书
6、service account配套证书
7、admin配套证书
8、kubelet配套证书
注意:kubelet用到的证书都是独一无二的,使用TLS bootstrapping给kubelet单独签发的证书。
在这里,我们cfssl使用自签发私有证书,先把Kubernetes群集环境搭建起来,在后面的内容中会专门学习Kubernetes认证、授权、准入控制等机制。
二、创建CA证书
1、创建证书目录
[root@k8s-master ~]# mkdir -p /usr/local/kubernetes/ssl
[root@k8s-master ~]# mkdir -p /var/lib/etcd/
2、下载Cfssl工具
[root@k8s-master ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@k8s-master ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@k8s-master ~]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@k8s-master ~]# mv cfssl_linux-amd64 /usr/local/kubernetes/bin/cfssl
[root@k8s-master ~]# mv cfssljson_linux-amd64 /usr/local/kubernetes/bin/cfssljson
[root@k8s-master ~]# mv cfssl-certinfo_linux-amd64 /usr/local/kubernetes/bin/cfssl-certinfo
[root@k8s-master ~]# chmod +x /usr/local/kubernetes/bin/*
3、分发Cfssl工具
[root@k8s-master ~]# scp /usr/local/kubernetes/bin/* root@192.168.1.1:/usr/local/kubernetes/bin/
[root@k8s-master ~]# scp /usr/local/kubernetes/bin/* root@192.168.1.2:/usr/local/kubernetes/bin/
4、设置Cfssl命令执行路径
[root@k8s-master ~]# echo "export PATH=$PATH:/usr/local/kubernetes/bin/" >>/etc/profile
或者
[root@k8s-master ~]# vim /etc/profile
添加:
export PATH=$PATH:/usr/local/kubernetes/bin
[root@k8s-master ~]# source /etc/profile
5、初始话CFSSL
[root@k8s-master ~]# cd /usr/local/kubernetes/ssl/
[root@k8s-master ssl]# cfssl print-defaults config > ca-config.json
[root@k8s-master ssl]# cfssl print-defaults csr > ca-csr.json
6、创建CA配置文件
(1)创建CA配置文件config.json
[root@k8s-master ssl]# vim ca-config.json
修改:
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
signing:表示该证书可用于签名其它证书;
server auth:表示该CA对server提供的证书进行验证;
client auth:表示该CA对client提供的证书进行验证。
(2)创建CA签名文件csr.json
[root@k8s-master ssl]# vim ca-csr.json
修改:
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"10.0.0.1",
"192.168.1.1",
"192.168.1.2",
"192.168.1.3"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
],
"ca": {
"expiry": "87600h"
}
}
7、生成CA证书(ca.pem)和密钥(ca-key.pem)
[root@k8s-master ssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
8、分发CA证书
[root@k8s-master ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.1.1:/usr/local/kubernetes/ssl/
[root@k8s-master ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.1.2:/usr/local/kubernetes/ssl/
下一章节我们开始安装部署Kubernetes群集,同一个CA证书签署所有证书,后续内容详见。敬请期待!