使用 TLS 认证远程访问 Docker 【已翻译100%】-阿里云开发者社区

开发者社区> 开发与运维> 正文

使用 TLS 认证远程访问 Docker 【已翻译100%】

简介:

通常情况下Docker只在 UNIX socket下生效. 一般只有本地调用生效. 如果要远程调用可以有以下三种方式:

使用nginx转发通讯到Docker

用SSH和socat处理链路

创建Docker daemon监听开放的端口

第一种实现起来比较繁琐. 第二种需要在客户端服务端安装 socat. 由于其连接未加密,任何人都可以拦截Docker的通讯信息.

直到有了 Docker implemented TLS auth in 0.10才完美的解决了这个问题.

有三种简单的方式来实现:

I. 生成证书

需要生成三种证书类型:

  • CA 证书用来生成客户端和服务端证书
  • 远端Docker使用的客户端生疏
  • 服务端使用的Docker daemon证书

我用Ruby写了生成这三种证书的代码.你只需要拷贝相关的代码 clone this repository 并运行下面的命令:

$ gem install certificate_authority
$ ruby certgen.rb example.com
CA certificates are in ~/.docker/ca
Client certificates are in ~/.docker
Server certificates are in ~/.docker/example.com

证书都生成在~/.dockerpath下.

II. 拷贝服务端证书到远端

脚本生成 Docker daemon需要的键值和证书~/.docker/example.com(example.com 是你的域名).

在服务端拷贝到~/.dockerdirectory下:

rsync -ave ssh ~/.docker/example.com/ root@example.com:~/.docker/

III. 在远端配置Docker

Docker daemon在0.10后支持--tlsverify 来提供加密的远端连接

假设你是用的是 Ubuntu 12.04 LTS并已经安装了Docker .其它环境下可能有些不同.

只需要在/etc/default/docker加入下面配置:

DOCKER_OPTS="--tlsverify -H=unix:///var/run/docker.sock -H=0.0.0.0:4243 --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem"

之后重启 Docker daemon:

service docker restart

如果有错Docker daemon就会启动不了. 可以通过 under/var/log/upstart/docker.log来调试.

就是这么简单!

现在通过--tlsverify就能连接到远端Docker实例了:

docker --tlsverify -H tcp://example.com:4243 images

它会使用 ~/.docker下的证书来验证连接. 如果使用的是其他的类型, 可以通过--tls* 来查询docker --help的帮助文档 documentation.

官方的TLS创建网址在这里 can be found on Docker site.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章