二进制安装k8s集群(2)-制作ssl证书
- 2020 年 4 月 1 日
- 筆記
在上一篇文章里我们大致介绍了安装 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。