使用 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.

相关文章
|
安全 Linux 程序员
TLS加密远程连接Docker
学习Docker官方推荐的安全的远程连接方式:TLS加密连接
451 0
TLS加密远程连接Docker
|
Kubernetes Docker 容器
【Docker】'TLS handshake timeout' 问题修复记录
'TLS handshake timeout' 问题修复记录
1062 0
【Docker】'TLS handshake timeout' 问题修复记录
|
10月前
|
安全 Java Shell
Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结
Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结
|
12月前
|
存储 安全 测试技术
Docker Registry 部署镜像私有仓库及鉴权认证
了解什么是 Docker Registry,常用的 Docker Registry 的鉴权和认证机制有哪些,不同的认证机制在配置文件中的参数有所不同。可以根据实际需求选择相应的认证机制并进行配置。
770 2
|
12月前
|
网络安全 开发工具 Docker
Docker笔记7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?
Docker笔记7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?
359 1
|
消息中间件 监控 Cloud Native
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
lion是基于Spring Cloud体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,仅在本框架上做"减法"的目的,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
|
存储 网络协议 关系型数据库
金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的、具备工业标准特性的应用协议,可以使用TCP协议提供访问控制和维护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。
金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
|
存储 JSON Kubernetes
部署 Docker Registry 并配置认证登录
部署 Docker Registry 并配置认证登录
1244 0
|
安全 网络协议 Unix
为 Docker 配置 TLS
Docker 默认通过 `Unix Socket` 对外提供接口,也支持 `HTTP` 的方式,后者允许我们能够在本地控制远程服务器中的 Docker。如果你想让远程服务器中的 Docker 以安全的方式被访问,可为其配置 TLS,做到服务端和客户端的双向验证。本文总结了配置 Docker TLS 过程中的实践经验。
|
安全 网络协议 Unix
《伸手系列》之Docker开启2376端口CA认证
前言 众所周知,docker可以开启远程访问API,但是发现很多都是直接开启2375端口,未做安全配置,从而出现安全隐患,最近在将docker环境统一portainer管理时,发现有这种情况。本文讲解如何开启安全认证的方法,配置TLS保证API的安全。