kubernetes 提供了多种安全认证机制, 其中对于集群通讯间可采用 TLS(https) 双向认证机制,也可采用基于 Token 或用户名密码的单向 tls 认证。k8s一般在内网部署,采用私有 IP 地址进行通讯,权威CA只能签署域名证书,我们这里采用自建CA。

环境:

Master:172.20.103.1

Node:172.20.103.2

基于CA签名的双向数字证书的生成过程如下:

  1. 为kube-apiserver生成一个数字证书,并用CA证书签名。

  2. 为kube-apiserver进程配置证书相关的启动参数,包括CA证书(用于验证客户端证书的签名真伪)、自己的经过CA签名后的证书及私钥。

  3. 为每个访问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主机名。