二进制安装k8s集群(2)-制作ssl证书

上一篇文章里我们大致介绍了安装 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。