在上一篇文章里我们大致介绍了安装 k8s集群需要安装哪些组件以及我们的环境,在这篇文章里我们主要介绍制作ssl证书,我们以制作docker server和docker client证书为例。后面集群安装还需要很多证书,例如etcd,kube-apiserver,kubelet,harbor,kube-dashboard,nginx-ingress,tiller等等,都可以以这里作为参考。另外再额外说一下,我们后面安装docker开启了docker的tcp访问,也就是说可以远程连接操作docker,并且开启双向ssl client auth,所以在这里制作docker的server和client证书。默认docker client和docker server是通过unix sock通讯的(在同一台机器),在实际环境中要根据自己需要来决定是否开启tcp通讯。
我们这里用openssl制作证书,在制作之前先修改配置文件(通过subjectAltName机制),可以让我们的证书支持多个cn或者ip,这样证书放在不同的server上就比较方便了。为什么要这样呢,因为对于ssl的证书问题,client无非做这么两件事情。一是trust server发过来的证书,这个可以通过把server的证书或者签发server证书的根证书import到client的环境里解决。二是verify server证书,这个verify就是验证证书里的cn和client请求里的fqdn或者ip是否一致。我们这里配置证书可以支持多个cn和ip,那么证书就可以放到不同的server上了。(之前遇到有用java的同学只要遇到ssl问题就customize sslsocketfactory,然后trust任何证书,always verify pass,这个虽然管用,但是却有些暴力)
修改openssl配置文件支持证书多cn/ip
查找openssl配置文件并copy到证书制作目录
locate openssl.cnf
cp /etc/pki/tls/openssl.cnf /opt/sw/cert/mydockerserveropenssl.conf
复制
修改openssl配置文件支持多cn/ip
vi mydockerserveropenssl.conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.rodney.com
IP.1 = 172.20.11.41
IP.2 = 172.20.11.42
IP.3 = 172.20.11.43
IP.4 = 172.20.11.44
IP.5 = 172.20.11.45
IP.6 = 172.20.11.46
IP.7 = 172.20.11.47
IP.8 = 172.20.11.48
IP.9 = 172.20.11.49
IP.10 = 172.20.11.50
IP.11 = 10.254.0.1
IP.12 = 10.254.0.2
复制
制作ca根证书
生成ca key
openssl genrsa -out ca.key 2048
复制
生成ca csr证书请求文件
openssl req -new -key ca.key -out ca.csr
复制
生成自签名ca证书
openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -days 3650
复制
制作docker server证书
生成docker server key
openssl genrsa -out docker-server.key 2048
复制
生成docker server csr证书请求文件
openssl req -new -key docker-server.key -out docker-server.csr -config mydockerserveropenssl.conf
复制
查看docker server csr证书请求文件
openssl req -text -noout -in docker-server.csr
复制
添加index和series文件,创建series
openssl ca -in docker-server.csr -out docker-server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -days 3650 -config mydockerserveropenssl.conf
touch /etc/pki/CA/index.txt
touch /etc/pki/CA/serial
echo 00 > /etc/pki/CA/serial
复制
生成docker server证书并用ca证书签名
openssl ca -in docker-server.csr -out docker-server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -days 3650 -config mydockerserveropenssl.conf
复制
查看docker server证书
制作docker client证书
这里对于client的证书可以完全参考制作server端的证书,生成docker client key, client csr, client crt文件
1. openssl genrsa -out docker-client.key 2048
2. openssl req -new -key docker-client.key -out docker-client.csr -config ./mydockerclientopenssl.conf
4. openssl ca -in docker-client.csr -out docker-client.crt -cert ca.crt -keyfile ca.key -extensions v3_req -days 3650 -config mydockerclientopenssl.conf
复制
查看docker client证书
目前先写到这里,在下一篇文章里我们开始介绍安装docker。