Docker的TLS认证

Docker的TLS认证和Portainer配置

请先确保Docker在服务器上的正常安装

docker -v 查看当前docker版本并确认安装docker指令

建立证书授权中心

  • 第一步:确保系统安装了openssl

    which openssl
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_docker

  • *第二步*: 默认情况下,宿主机中有一个/etc/docker/目录,待会我们用这个目录来保存我们的CA和相关资料,当然,也可以使用自定义的其他文件路径

    ls /etc/docker
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_Docker教程_02

  • 第三步:进入上面那个目录,生成一个私钥,命令如下,在创建私钥的过程中,我们需要为CA秘钥设置一个密码(要自己记住这个密码,在新CA中,我们需要用这个秘钥来创建并对证书签名)

    cd /etc/docker
    
    echo 01 | sudo tee ca.srl
    
    sudo openssl genrsa -des3 -out ca-key.pem
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_Docker教程_03

  • 之后会生成一个名为ca-key.pem的新文件,这个文件是我们的CA的秘钥(不要把这个文件透露出去,也不能丢失这个文件)

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_Docker教程_04

  • 第四步:现在我们来创建一个CA证书

    除了密码,其他信息可以直接按enter跳过输入

    sudo openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_Docker教程_05

  • 上面命令输入之后会传建一个ca.pem文件,这个文件就是我们的CA证书,我们后面会使用这个文件来验证连接的安全性。

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_守护进程_06

  • 现在我们有了自己的CA,让我们用它为我们的Docker服务器创建证书和秘钥

创建服务器的证书签名和秘钥

  • 第一步:创建服务器密钥

    sudo openssl genrsa -des3 -out server-key.pem
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_客户端_07

    之后会创建一个密钥server-key.pem。

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_服务器_08

  • 第二步:现在让我们创建服务器的证书签名请求(CSR)

    sudo openssl req -new -key server-key.pem -out server.csr
    

    注意!!!!:其中的Common Name比较重要,这个选项的值要么为Docker服务器(即从DNS中解析后得到的结果,比如docker.example.com)的FQDN(fully qualified domain name,完全限定域名)形式,要么为*(这将允许在任何服务器上使用该服务器证书)。image-20220719110949021

    之后生成一个server.csr文件。

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_Docker教程_10

  • 第三步:现在让我们来对CSR进行签名并生成服务器证书

    sudo openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_守护进程_11

    上面命令输入完成之后会生成一个名为server-cert.pem的文件,这个文件就是我们的服务器证书

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_客户端_12

  • 第四步:现在就让我们来清除服务器密钥的密码,如下所示

    • 输入命令之后,我们要输入先前设置的服务器密钥的密码(见上面第一步)。
    • 我们不想在Docker守护进程启动的时候再输入一次密码,因此需要清除它。
    sudo openssl rsa -in server-key.pem -out server-key.pem
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_守护进程_13

  • 第五步:将文件下载到本地,然后给服务器上的文件设置严格的权限

    sudo chmod 0600 /etc/docker/server-key.pem /etc/docker/server-cert.pem /etc/docker/ca-key.pem /etc/docker/ca.pem
    

    需要下载server-cert.pem和server-key.pem到本地,后续配置Portainer的时候需要用到

Docker启用TLS认证配置

  • 第一步修改docker.service配置

    #查找docker.service 在哪里
    sudo find / -name docker.service
    #这里的文件地址也可能在
    sudo vim /etc/systemd/system/docker.service
    
  • 修改ExecStart

    #非TLS都是从2375进行remote连接
    #ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
    
    #2022.07.13 lizhengyang 修改docker remote配置添加TLS认证,docker的TLS端口默认2376
    ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem
    
  • 第二步:之后重启Docker服务,然后再重启Docker守护进程,之后查看守护进程的状态。

    sudo systemctl daemon-reload
    sudo service docker restart
    sudo service docker status
    

    长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)_服务器_16

Portainer配置

登录Portanier管理网页

image-20220719112656855

进入节点配置

  • 开启TLS认证
  • 连接端口为2376
  • 选择TLS with client verification only (只校验客户端)
  • 点击update endpoint
  • 回到home界面,尝试进入配置的服务器节点(页面可能没刷新,显示节点还是down,尝试点进去看下)

image-20220719112756731

  • 如果是新增的,选择Docker节点,然后填写对应的表单

image-20220720173040123

如果有报错,大概率是防火墙的问题,需要修改防火墙规则(确认下是否可以直接关闭防火墙)

至此,Docker的TLS配置和Portainer配置修改完毕

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值