kubernetes 提供了多种安全认证机制, 其中对于集群通讯间可采用 TLS(https) 双向认证机制,也可采用基于 Token 或用户名密码的单向 tls 认证。k8s一般在内网部署,采用私有 IP 地址进行通讯,权威CA只能签署域名证书,我们这里采用自建CA。
环境:
Master:172.20.103.1
Node:172.20.103.2
基于CA签名的双向数字证书的生成过程如下:
为kube-apiserver生成一个数字证书,并用CA证书签名。
为kube-apiserver进程配置证书相关的启动参数,包括CA证书(用于验证客户端证书的签名真伪)、自己的经过CA签名后的证书及私钥。
为每个访问K8S API Server 的客户端(kube-controller-manager、kube-scheduler、kubelet、kube-proxy及调用API Server的客户端程序kubectl等)进程都可以生成自己的数字证书,也都用CA证书签名,在相关程序的启动参数里增加CA证书、自己的证书等相关参数。
设置kube-apiserver的CA证书相关的文件和启动参数
使用OpenSSL工具在Master服务器上创建CA证书和私钥相关的文件:
yum -y install openssl
cd /var/run/kubernetes/ (证书默认存放目录)
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=k8s-master" -days 5000 -out ca.crt
openssl genrsa -out server.key 2048
注意:在生成ca.crt时,-subj参数中“”/CN“”的值为Master主机名。