docker配置TLS开启远程访问

你的名字 2021-05-12 11:49 718阅读 0赞

在安装好docker及docker的加速器后,我们需要通过idea访问到docker以通过idea插件去自动化部署项目到docker容器。默认情况下,Docker通过非网络UNIX套接字运行。它还可以选择使用HTTP套接字进行通信。如果您需要通过网络以安全方式访问Docker,可以通过指定该tlsverify标志并将Docker的tlscacert标志指向受信任的CA证书来启用TLS。

1.使用openssl创建CA

要生成CA,首先需要依赖openssl,使用openssl version查看系统是否已经安装过openssl,如果没安装,需要先安装下。

1.1生成CA私钥和公钥
  1. ## 切换目录
  2. [root@admin docker]# /etc/docker
  3. ## 生成私钥证书 (中间需要输入密码,请记住这个密码)
  4. [root@admin docker]# openssl genrsa -aes256 -out ca-key.pem 4096
  5. Generating RSA private key, 4096 bit long modulus
  6. .................................................++
  7. ...................................................++
  8. e is 65537 (0x10001)
  9. Enter pass phrase for ca-key.pem: ## 设置密码
  10. Verifying - Enter pass phrase for ca-key.pem: ## 确认密码
  11. ## 生成公钥证书
  12. [root@admin docker]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
  13. Enter pass phrase for ca-key.pem: ## 输入刚才的密码
  14. You are about to be asked to enter information that will be incorporated
  15. into your certificate request.
  16. What you are about to enter is what is called a Distinguished Name or a DN.
  17. There are quite a few fields but you can leave some blank
  18. For some fields there will be a default value,
  19. If you enter '.', the field will be left blank.
  20. -----
  21. Country Name (2 letter code) [XX]:CN ## 输入国家
  22. State or Province Name (full name) []:shanxi ## 输入省
  23. Locality Name (eg, city) [Default City]:xian ## 输入市
  24. Organization Name (eg, company) [Default Company Ltd]:shanxiruite ## 公司
  25. Organizational Unit Name (eg, section) []:dev ## 组织
  26. Common Name (eg, your name or your server's hostname) []:ruite ## 输入域名,请注意记住这个hostname......
  27. Email Address []:XXXXXXXXX@qq.com ## 输入邮箱

完成后你会在当前文件夹下看见ca-key.pem和ca.pem文件
在这里插入图片描述

1.2 生成服务器密钥和证书签名请求(CSR)
  1. ## 生成服务密钥
  2. [root@admin docker]# openssl genrsa -out server-key.pem 4096
  3. Generating RSA private key, 4096 bit long modulus
  4. .............................................................................++
  5. ...................................++
  6. e is 65537 (0x10001)
  7. ## 生成server证书请求文件 下面的$HOST需要与你生成公钥证书时的hostname保持一致。后面还需要用到这个。
  8. [root@admin docker]# openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
  9. ## 编写设置extfile.cnf并ip
  10. [root@admin docker]# echo subjectAltName = DNS:$HOST,IP:127.0.0.1 >> extfile.cnf
  11. [root@admin docker]# echo extendedKeyUsage = serverAuth >> extfile.cnf
  12. #使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
  13. [root@admin docker]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
  14. Signature ok
  15. subject=/CN=yang.com # 这个是我设置的hostname
  16. Getting CA Private Key
  17. Enter pass phrase for ca-key.pem: ## 输入密码

在这里插入图片描述

1.3 生成client密钥和证书
  1. ## 生成client证书RSA私钥文件
  2. [root@admin docker]# openssl genrsa -out key.pem 4096
  3. Generating RSA private key, 4096 bit long modulus
  4. ........................++
  5. ...................................++
  6. e is 65537 (0x10001)
  7. ## 生成client证书请求文件 (注意ruite.com)
  8. [root@admin docker]# openssl req -subj '/CN=client' -new -key key.pem -out client.csr
  9. ## 创建一个新的扩展配置文件
  10. [root@admin docker]# echo extendedKeyUsage = clientAuth > extfile-client.cnf
  11. ## 生成签名证书
  12. [root@admin docker]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
  13. Signature ok
  14. subject=/CN=client
  15. Getting CA Private Key
  16. Enter pass phrase for ca-key.pem: ## 输入密码

在这里插入图片描述
生成后,需要将client.csr、server.csr、extfile.cnf、extfile-client.cnf删除掉

  1. rm -v client.csr server.csr extfile-client.cnf extfile.cnf
1.4 修改相关文件的权限
  1. ## 更改密钥权限
  2. [root@admin docker]# chmod -v 0400 ca-key.pem key.pem server-key.pem
  3. ## 更改证书权限
  4. [root@admin docker]# chmod -v 0444 ca.pem server-cert.pem cert.pem

2.修改docker配置文件

2.1 在/etc/docker/daemon.json中加入以下内容

其中hosts中的192.168.80.128为我自己的ip地址。

  1. "tlsverify": true,
  2. "tlscacert": "/etc/docker/ca.pem",
  3. "tlscert": "/etc/docker/server-cert.pem",
  4. "tlskey": "/etc/docker/server-key.pem",
  5. "hosts": ["tcp://192.168.80.128:2376","unix:///var/run/docker.sock"]

vim /etc/docker/daemon.json
修改后内容如下(前两项为镜像加速器和私有仓库):
在这里插入图片描述
这里设置时候,有两种:
1.设置tlsverify,tlscacert,tlscert,tlskey;这种是需要验证客户端
2.设置tls,tlscert,tlskey;这种不验证客户端

2.2 修改/lib/systemd/system/docker.service

vim /lib/systemd/system/docker.service
修改后的内容如下:
在这里插入图片描述

  1. ## 查看防火墙状态
  2. systemctl status firewalld
  3. ## 如果状态Active: active ,需要将2376端口放开(好像说是docker启动会自动启动防火墙,防火墙不能关闭,这里坑了我很久。。。)
  4. ## 将2376加入允许的端口列表
  5. firewall-cmd --zone=public --add-port=2376/tcp --permanent
  6. ## 重载防火墙
  7. firewall-cmd --reload
  8. ## 查看是否加入成功
  9. firewall-cmd --zone=public --query-port=2376/tcp
  10. ## 重新加载docker配置
  11. systemctl daemon-reload
  12. ## 重启
  13. systemctl restart docker
  14. ## 查看docker是否运行正常
  15. systemctl is-active docker
  16. ## 查看2376端口是否已启动 如果看见了2376证明前面过程没有问题
  17. netstat -tunlp

4. 验证docker连接

4.1 idea中验证

idea中验证时候,需要先修改host文件,将你设置的主机名与主机ip进行绑定。修改C:\Windows\System32\drivers\etc\hosts文件。我修改后的内容为:
在这里插入图片描述
然后需要将将刚才生成的ca.pem,cert.pem,key.pem拷贝到一个目录中,在idea中的下载后docker的插件后,在setting->docker中新建连接。我的链接如图:
在这里插入图片描述
注意engine api url那块的是https://yang.com:2376。看到提示successful就表明成功。。。

4.2 客户机中验证

首先客户机中需要安装好docker,然后在客户机中的hostname加入刚才的hostname。

  1. vim /etc/hosts

在这里插入图片描述
编辑hostname文件将yang.com(主机名)加入:

  1. vim /etc/hostname

然后重启下服务器。将ca.pem,cert.pem,key.pem拷贝到目录中,使用命令测试链接:

  1. [root@admin dockercert]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H yang.com:2376 version
  2. Client: Docker Engine - Community
  3. Version: 19.03.0
  4. API version: 1.40
  5. Go version: go1.12.5
  6. Git commit: aeac9490dc
  7. Built: Wed Jul 17 18:15:40 2019
  8. OS/Arch: linux/amd64
  9. Experimental: false
  10. Server: Docker Engine - Community
  11. Engine:
  12. Version: 19.03.0
  13. API version: 1.40 (minimum version 1.12)
  14. Go version: go1.12.5
  15. Git commit: aeac9490dc
  16. Built: Wed Jul 17 18:14:16 2019
  17. OS/Arch: linux/amd64
  18. Experimental: false
  19. containerd:
  20. Version: 1.2.10
  21. GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
  22. runc:
  23. Version: 1.0.0-rc8+dev
  24. GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
  25. docker-init:
  26. Version: 0.18.0
  27. GitCommit: fec3683

出现以上内容就表示成功了。。。。

6.配置docker默认安全

如果要默认保护Docker客户端连接的安全性,可以将文件移动到.docker主目录— 的目录中,并同时设置 DOCKER_HOST和DOCKER_TLS_VERIFY变量(而不是在每次调用时传递 -H=tcp://$HOST:2376和–tlsverify

  1. mkdir -pv ~/.docker
  2. cd /etc/docker
  3. cp -v { ca,cert,key}.pem ~/.docker
  4. export DOCKER_HOST=tcp://192.168.80.128:2376 DOCKER_TLS_VERIFY=1

官网参考文档:
1.生成CA证书
2.配置Docker守护程序

发表评论

表情:
评论列表 (有 0 条评论,718人围观)

还没有评论,来说两句吧...

相关阅读