《Docker遠程鏈接設置》一文講述了開啓Docker遠程鏈接的方法,但那種方法不安全,由於任何客戶端均可以經過Docker服務的IP地址鏈接上去,今天咱們就來學習Docker官方推薦的安全的遠程鏈接方式:TLS加密鏈接,經過證書來保證安全性。linux
這裏是官方的權威文檔:https://docs.docker.com/engin...git
本次實戰的環境信息以下:docker
本次實戰的操做步驟以下:shell
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
此時生成的<font color="blue">ca.pem</font>文件就是CA證書;json
openssl genrsa -out server-key.pem 4096
此時生成的<font color="blue">server-key.pem</font>文件就是服務端私鑰;centos
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
此時生成的<font color="blue">server.csr</font>文件就是服務端證書;安全
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
此時生成的<font color="blue">server-cert.pem</font>文件就是已蓋章生效的服務端證書;服務器
openssl genrsa -out key.pem 4096
此時生成的<font color="blue">key.pem</font>文件就是客戶私鑰;tcp
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
此時生成的<font color="blue">client.csr</font>文件就是客戶端證書籤名請求;學習
echo extendedKeyUsage=clientAuth > extfile.cnf
openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
rm -rf ca.srl client.csr extfile.cnf server.csr
文件名 | 做用 |
---|---|
ca.pem | CA機構證書 |
ca-key.pem | 根證書RSA私鑰 |
cert.pem | 客戶端證書 |
key.pem | 客戶私鑰 |
server-cert.pem | 服務端證書 |
server-key.pem | 服務端私鑰 |
至此,全部證書文件製做完成,接下來對Docker作TLS安全配置;
ExecStart=/usr/bin/dockerd-current --tlsverify --tlscacert=/root/work/ca.pem --tlscert=/root/work/server-cert.pem --tlskey=/root/work/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock \
systemctl daemon-reload && systemctl restart docker
配置完成,接下來驗證遠程TLS鏈接。
scp /root/work/ca.pem root@192.168.121.132:/root/work \ && scp /root/work/cert.pem root@192.168.121.132:/root/work \ && scp /root/work/key.pem root@192.168.121.132:/root/work
192.168.121.138 docker-daemon
docker --tlsverify --tlscacert=/root/work/ca.pem --tlscert=/root/work/cert.pem --tlskey=/root/work/key.pem -H tcp://docker-daemon:2376 version
控制檯顯示如下信息,其中Server部分就是A機器的Docker信息:
Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-102.git7f2769b.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-102.git7f2769b.el7.centos.x86_64 Go version: go1.10.3 Git commit: 7f2769b/1.13.1 Built: Mon Aug 5 15:09:42 2019 OS/Arch: linux/amd64 Experimental: false
[root@centos7 work]# docker -H tcp://192.168.121.138:2375 images Cannot connect to the Docker daemon at tcp://192.168.121.138:2375. Is the docker daemon running? [root@centos7 work]# docker -H tcp://docker-daemon:2375 images Cannot connect to the Docker daemon at tcp://docker-daemon:2375. Is the docker daemon running? [root@centos7 work]# docker -H tcp://192.168.121.138:2376 images Get http://192.168.121.138:2376/v1.26/images/json: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02". * Are you trying to connect to a TLS-enabled daemon without TLS? [root@centos7 work]# docker -H tcp://docker-daemon:2376 images Get http://docker-daemon:2376/v1.26/images/json: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02". * Are you trying to connect to a TLS-enabled daemon without TLS?
至此,TLS加密遠程鏈接Docker的實戰就完成了,但願您在設置安全的Docker遠程鏈接是,本文能給您提供參考。