Jenkins使用tls方式连接docker构建主机
实验环境
主机 | 角色 |
---|---|
server1 | harbor仓库 |
server2 | gitlab仓库 |
server10 | Jenkins主机 |
server9 | docker主机(新添加) |
说明:实验环境接着上一篇博客的实验环境继续
我们在之前的实验中经docker主机和Jenkins主机部署在同一台虚拟机上,而现实的生产环境中一般不会这样进行部署,这样会增加Jenkins主机的负担。所以在这里我们新增一台docker主机
- 步骤一:在docker主机(server9)上生成服务端key和ca证书
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
- 步骤二:生成server-key和csr文件
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=server9" -sha256 -new -key server-key.pem -out server.csr
- 步骤三:可以使用ip地址方式进行tls连接
echo subjectAltName = DNS:server9,IP:192.168.0.109,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
- 步骤四:安装docker证书
cp ca.pem server-cert.pem server-key.pem /etc/docker/
cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
vim /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
netstat -antlp |grep :2376
- 步骤五:修改Jenkins中之前创建的test1项目中连接docker主机的方式
但是2376端口是加密的,需要生成客户端key和证书
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
在Jenkins主机中添加客户端的key和证书
添加客户端的key
添加客户端的证书
添加server端的ca证书
由于harbor仓库是加密且需要认证,我们在之前的实验中已经解决了其认证的问题,接下来需要解决加密的问题(因为server9时新加的docker主机)
scp certs.d/ server9:/etc/docker
systemctl restart docker
- 步骤六:进行测试,在Jenkins主机上手工触发项目test1,测试一下新添加的docker主机server9能否被Jenkins连接上,并且将新构建的镜像上传到harbor仓库中
查看控制台输出信息
- 步骤七:对整个流程进行测试
查看一下gitlab仓库中数据有没有发生变化
查看一下Jenkins中是否触发了相应项目的运行
Jenkins中的test1项目成功运行
在Jenkins使用SSH的方式添加远程主机
- 实验环境:
和前面实验环境一致,将server9作为远端docker主机
-
步骤一:在Jenkins中安装SSH插件
-
步骤二:在Jenkins上进行ssh配置
-
步骤三:修改之前创建的docker项目中的构建
-
步骤四:测试
-
步骤五:对ssh脚本进行改进,然后修改test.html的内容,再次进行整个流程的测试