接上一篇,Docker Remote API TLS 认证 。
上面配置的时候留了一处坑,CURL测试的时候很愉快的就成功了,但是万万没想到,接下去配置jenkins docker插件的时候就一波三折。。。
我的心情就像是坐上过山车一样。
首先,jenkins docker插件如果你没有安装的话,先去google装上。
然后应该可以在系统管理>系统设置里面看到如下画面:
当你在没有开启Docker TLS认证的时候这样就可以很愉快的连接上Docker,开启TLS后我们需要配置下cert file path
jenkins 我们一般会挂载jenkins_home 到 docker主机上,找到你的jenkins_home在主机上的目录,我这里是/home/jenkins_home
然后在/home/jenkins_home
创建一个目录,例如叫cert,然后将上一篇文章里面创建的那些证书文件放到这个目录,大概需要这几个文件(ca.pem,key.pem,cert.pem)。
注意给以上文件授权,chmod 777 /home/jenkins_home/cert/*
然后这里设置cert file path
,注意这里的path不是指的主机上的path,而是docker 容器里面的path,一般jenkins容器里面的目录是/var/jenkins_home
,那么这里的path完整路径就应该是/var/jenkins_home/cert
。
设置完成后是这样的:
点一下test connection,不出意外的话你会看到各种错误,例如:
首先说下最常见的几种错误,路径错误,证书文件不存在,文件无权限访问等等。如果出现这些问题,那你得好好反省下了。
下面说说这种错误:
Host name '172.20.20.25' does not match the certificate subject provided by the peer (CN=172.20.20.25)
是不是有点莫名其妙?CN(Common Name)与Host name不是一致吗?
于是开始各种google ,baidu,看到大部分人的配置都是IP地址,然后通过CURL测试了一下成功了,整个配置介绍就结束了。
后来无意中在生成证书的相关命令中看到这样一行:
openssl req -subj "/CN=172.20.20.25" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:172.20.20.25,IP:127.0.0.1 > extfile.cnf
DNS?? 莫非要走DNS解析?那是不是配置下host-to-IP mapping 就好了?
说干就干。
重新生成相关证书文件,更改上面两行命令为:
openssl req -subj "/CN=master" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:master,IP:127.0.0.1 > extfile.cnf
master
你可以换成其他任意。
然后参照上一篇文章,重新生成证书文件。注意提示输入CN的时候需要与这里的master
一致。
生成好了,这里遇到一个问题,docker 容器怎么更改hosts呢?
进入容器直接更改,重启后不就丢失了?这里有很多办法解决这个问题,我使用的其中我认为最简单一种,docker run 有一个参数叫--add-host
,这里重新运行jenkins镜像,并且制定--add-host master:172.20.20.25 .
待jenkins启动好后,重新进入系统配置界面:
点击Test Connection : Connected to tcp://master:2375
搞定!~