Docker Swarm -> Overview Docker Swarm with TLS
Docker Swarm 与TLS 概述
Swarm集群中的所有节点必需绑定它们的Docker daemon到一个网络端口。这显然是有安全隐患的。当到了例如Internet这种不可信的网络环境下,这个问题更为明显。为了缓和这种风险,Docker Swarm和Docker Engine daemon支持Transport Layer Security (TLS).
注意: TLS是SSL (Secure Sockets Layer)的后继者,并且这两个术语经常互用。Docker 在这个文章通篇中使用TLS表述。
了解TLS的概念
再进一步讨论之前,了解TLS的基本概念和public key infrastructure (PKI) 是很重要的。
Public key infrastructure 关系到安全的技术,策略,处理,它被用于创建和管理数字证书。这些证书和数字安全通信使用了authentication和encryption机制。
下面的推断可能很有用。通常护照被用于确认个人的身份。护照通常包含了拥有者的照片和生物信息。护照会列出颁发他的国家还有有效期。数字证书也很相似。下面的文本是从数字证书中摘录的:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9590646456311914051 (0x8518d2237ad49e43)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=CA, L=Sanfrancisco, O=Docker Inc
Validity
Not Before: Jan 18 09:42:16 2016 GMT
Not After : Jan 15 09:42:16 2026 GMT
Subject: CN=swarm
这个证书标识了一个称作 swarm 的计算机。证书的有效期在2016.1-2026.1,由美国加州的Docker Inc颁发的。
正如护照是用于个人登机验证,数字证书认证网络中的一个计算机。
数字证书的使用依赖于public key infrastructure (PKI). PKI的支持如下:
- 安全证书的申请服务
- 程序验证实体请求证书
- 处理确认实体的证书资格
- 颁发证书的技术和流程
- 吊销证书的技术和流程
Docker Engine 如何通过认证使用TLS
在这一章,你会了解到Docker Engine和Swarm是如何使用PKI和证书去提升安全性。
你可以设置使Docker Engine CLI和Docker Engine daemon需要TLS认证。设置了TLS意味着所有Docker Engine CLI和Docker Engine daemon的通信必须通过TLS和一个可信的数字证书的签名。Docker Engine CLI 必须提供它的数字证书在Docker Engine daemon接受到了命令请求之前。
Docker Engine daemon必须信任Docker Engine CLI使用的证书。这种信任通畅是由受信任的第三方的方式建立的。下图是配置的需要TLS认证的Docker Engine CLI和Docker Engine daemon。
图中受信任的第三方就是证书颁发机构(CA)服务器。以国家的护照为例,CA 创建,签署,颁发,吊销证书。信任源于通过安装CA的根证书在运行的Docker Engine daemon的主机上。Docker Engine CLI请求其拥有的CA服务器签名和颁发的证书从CA服务器。
Docker Engine CLI发送它的证书到Docker Engine daemon在它发送命令之前。Docker Engine daemon 检查这个证书,因为Docker Engine daemon 相信这个CA,所以Docker Engine daemon 自然也相信任何由CA签发的证书。假设这个证书还没有过期或被吊销,Docker Engine daemon将接收来自被信任的Docker Engine CLI的命令。
Docker Engine ClI是一个很简单的客户端,它使用Docker Engine Remote API与Docker Engine daemon进行通信。任何使用Docker Engine Remote API的客户端都可以使用TLS。比如,Docker Engine 客户端像‘Docker Universal Control Plane’(UCP)就内置了TLS支持,第三方使用了Docker Engine Remote API的产品都可以通过这种方式配置。
Docker和Swarm的TLS模式
现在你知道了Docker Engine daemon如何使用证书进行认证。这里的三个TLS配置可能很重要对于Docker Engine daemon和它的客户端:
- 外部第三方CA
- 组织内部CA
- 自签名证书
这些配置的区别被用于区分证书颁发机构(CA)的类型。
外部第三方CA
一个外部CA是一个受信的第三方公司,它提供证书的创建,颁发,吊销和管理。它们满足特定的条件,保持高水平的安全性和商业习惯来赢得信赖。你可以安装外部的CA的根证书为你的服务和计算机去信任他们。
当你使用一个外部的第三方CA,它们创建,签署,颁发,吊销和管理你的证书。他们通常会收取一定的费用,但是它被认为是一个提供了高度信赖的企业级可拓展解决方案。
组织内部CA
有许多组织选择去实现他们自己的CA和PKI。常见的例子是使用OpenSSL和Microsoft Active Directory。在这种情况下,你的公司拥有CA需要承担CA的相关工作。这样做的好处是,你自己拥有CA,你有更多的PKI控制权。
运维你自己的CA和KPI需要你提供所有外部第三方CA的服务。包含创建,签署,颁发,吊销和管理你的证书。自己做所有的事情会造成一些花费和成本。然而,对于一个大的组织来说,它可以比使用第三方CA减少花费。
假设你自己操作和妥善管理自己的内部CA和PKI。那么一个内部组织的CA是一个高度可拓展和高度安全的选项。
自签名证书
顾名思义,自签名证书是一个使用他们自己的私钥签名的证书而不是受信任的CA签发的。这是一个极低的花费并且简单的使用选择。如果你可以正确的管理自签名证书,当然要比不使用证书更好。
因为自签名证书缺乏一个成熟了PKI,它们不能很好的扩展并且缺乏很多其它选择提供的功能。还有一个缺点是你无法吊销自签名证书。因为这个原因和其它的限制,自签名证书被认为是这些选择中安全性最低的选择。不推荐将自签名证书暴露在公开的不可信的网络环境中。