为Docker Swarm配置TLS

Docker Swarm -> Configure Docker Swarm for TLS

为Docker Swarm配置TLS

这个过程中,你创建了两个节点的Swarm集群,一个Docker Engine CLI,一个Swarm Manager和一个CA。如下所示。所有的Docker Engine主机(client,swarm,node1和node2)都有一份CA的证书拷贝和它们各自的通过CA签署的密钥对。


你将完成如下的步骤在这个过程中:

  • Step 1: 设置的前提条件
  • Step 2: 创建一个CA服务器
  • Step 3: 创建并签署密钥
  • Step 4: 安装这个密钥
  • Step 5: 配置Engine daemon的TLS
  • Step 6: 创建Swarm集群
  • Step 7: 创建使用TLS的Swarm manager集群
  • Step 8: 测试Swarm manager的配置
  • Step 9: 配置Engine CLI使用TLS

在开始之前

文章包括使用OpenSSl创建你自己的CA的步骤。这类似于经营自己组织内部的CA和PKI。然而,这不是一个可用于生产环境的CA和PKI指南。这些步骤的仅仅是为了演示满足后续配置Docker Swarm用于TLS。

Step 1: 设置的前提条件

为了完成这个过程你必须搭建5个Linux服务器。可以是物理机和虚拟机的混合;它们也可以是云主机。下面的表格列出了每个服务器的名字和它们的目的。

服务器名 描述
ca 作为一个CA服务器
swarm 作为Swarm Manager
node1 作为Swarm node
node2 作为Swarm node
client 作为一个远端的Docker Engine client

确保你可以使用SSH访问这5个服务器,并且它们之间可以相互通信通过使用DNS名解析。尤其需要:

  • 在Swarm Manager和Swarm node之间打开TCP的2376端口
  • 在Docker Engine client和Swarm Manager之间打开TCP的3376端口

你可以选择不同的端口如果它们已经被占用了。这个例子假设你通过这些端口使用它们。

每个服务器的操作系统必须兼容Docker Engine。为了简单起见,这一步和下面假设所有的服务器运行在Ubuntu 14.04 LTS上。

Step 2: 创建一个CA服务器

注意:如果你已经有可访问的CA和证书,你可以跳过这一步。

在这一步,你配置一个Linux服务器作为一个CA。你使用这个CA去创建签署密钥。

  1. 登录这个CA服务器的终端然后提升到root。
$sudo su
  1. 为CA创建一个私钥命名为ca-priv-key.pem:
# openssl genrsa -out ca-priv-key.pem 2048
Generating RSA private key, 2048 bit long modulus
...........................................................+++
.....+++
e is 65537 (0x10001)
  1. 为CA创建一个公钥命名为ca.pem

    这个公钥基于上一步被创建的私钥。

# openssl req -config /usr/lib/ssl/openssl.cnf -new -key ca-priv-key.pem -x509 -days 1825 -out ca.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
<output truncated>

现在你已经配置了一个公钥和私钥对为CA服务。你可以查看每个密钥的内容。查看私钥:

# openssl rsa -in ca-priv-key.pem -noout -text

查看公钥:

# openssl x509 -in ca.pem -noout -text

下面的命令显示了CA的公钥的部分内容。

# openssl x509 -in ca.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 17432010264024107661 (0xf1eaf0f9f41eca8d)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=CA, L=Sanfrancisco, O=Docker Inc
        Validity
            Not Before: Jan 16 18:28:12 2016 GMT
            Not After : Jan 13 18:28:12 2026 GMT
        Subject: C=US, ST=CA, L=San Francisco, O=Docker Inc
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d1:fe:6e:55:d4:93:fc:c9:8a:04:07:2d:ba:f0:
                    55:97:c5:2c:f5:d7:1d:6a:9b:f0:f0:55:6c:5d:90:
<output truncated>

稍后,你将使用这个证书去签署基础设置中其它服务的密钥。

Step 3: 创建并签署密钥

现在你又一个可用的CA,你需要创建一个密钥对为Swarm Manager,Swarm nodes,和远端的Docker Engine client。所有服务器创建密钥对的命令和处理过程相同。你将创建下面的密钥:

密钥名 描述
ca-priv-key.pem 这是CA的私钥必须要保证安全。它被用于在之后签署环境中的其它新节点的密钥。
ca.pem 这是CA的公钥(也可以叫它证书)。它被安装在环境中的所有节点,用于使节点信任由CA签发的证书。通ca-priv-key.pem文件一起组成了CA的密钥对。
node.csr 这是一个证书签名请求(CSR).一个CSR是一个有效的CA申请,用于为指定的节点创建一个新的密钥对。
node-priv.key 一个CA签名的私钥。节点依赖这个密钥证明自己为远端Docker Engine。与node-cert.pem文件一起组成了节点的密钥对。
node-cert.pem CA签名的证书。在这个例子中没有用。与node-priv.pem文件一起组成了节点的密钥对。

下面的命令显示了怎样创建密钥为所有的节点。在你的CA服务器的工作目录中执行这些命令。

  1. 登录你的CA服务器终端,提升root权限。
$ sudo su
  1. 为你的Swarm manager创建一个私钥,命名swarm-priv-key.pem
# openssl genrsa -out swarm-priv-key.pem 2048
Generating RSA private key, 2048 bit long modulus
............................................................+++
........+++
e is 65537 (0x10001)
  1. 使用上一步你创建的私钥生成一个证书签名请求(CSR)swarm.csr
# openssl req -subj "/CN=swarm" -new -key swarm-priv-key.pem -out swarm.csr

注意,这里仅仅是为了演示,创建一个CSR的过程在生产环境中于这里有所区别。

  1. 基于上一步创建的CSR,创建证书swarm-cert.pem.
# openssl x509 -req -days 1825 -in swarm.csr -CA ca.pem -CAkey ca-priv-key.pem -CAcreateserial -out swarm-cert.pem -extensions v3_req -extfile /usr/lib/ssl/openssl.cnf
<snip>
# openssl rsa -in swarm-priv-key.pem -out swarm-priv-key.pem

你现在已经有了Swarm Manager的密钥对。

  1. 为基础设施中剩余的节点(node1,node2和client)重复上面的步骤。
    记得替换swarm位置的值为你创建密钥的相应节点。
服务器名 私钥 CSR 证书
node1 node1-priv-key.pem node1.csr node1-cert.pem
node2 node2-priv-key.pem node2.csr node2-cert.pem
client client-priv-key.pem client.csr client-cert.pem
  1. 确认你的工作目录中包含下面的文件:
# ls -l
total 64
-rw-r--r-- 1 root   root   1679 Jan 16 18:27 ca-priv-key.pem
-rw-r--r-- 1 root   root   1229 Jan 16 18:28 ca.pem
-rw-r--r-- 1 root   root     17 Jan 18 09:56 ca.srl
-rw-r--r-- 1 root   root   1086 Jan 18 09:56 client-cert.pem
-rw-r--r-- 1 root   root    887 Jan 18 09:55 client.csr
-rw-r--r-- 1 root   root   1679 Jan 18 09:56 client-priv-key.pem
-rw-r--r-- 1 root   root   1082 Jan 18 09:44 node1-cert.pem
-rw-r--r-- 1 root   root    887 Jan 18 09:43 node1.csr
-rw-r--r-- 1 root   root   1675 Jan 18 09:44 node1-priv-key.pem
-rw-r--r-- 1 root   root   1082 Jan 18 09:49 node2-cert.pem
-rw-r--r-- 1 root   root    887 Jan 18 09:49 node2.csr
-rw-r--r-- 1 root   root   1675 Jan 18 09:49 node2-priv-key.pem
-rw-r--r-- 1 root   root   1082 Jan 18 09:42 swarm-cert.pem
-rw-r--r-- 1 root   root    887 Jan 18 09:41 swarm.csr
-rw-r--r-- 1 root   root   1679 Jan 18 09:42 swarm-priv-key.pem

你可以查看每个密钥的内容。对于私钥:

# openssl rsa -in <key-name> -noout -text

对于公钥(证书):

# openssl x509 -in <key-name> -noout -text

下面的命令显示Swarm Manager的公钥swarm-cert.pem的部分内容.

# openssl x509 -in ca.pem -noout -text
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

<output truncated>

Step 4: 安装密钥

在这一步,你要安装密钥到相应基础设施的服务器中。每个服务器需要三个文件:

  • 一个CA的公钥文件拷贝(ca.pem)
  • 自己的私钥
  • 自己的公钥(证书)

下面的步骤显示了如何通过使用scp拷贝这三个文件从CA服务器到每个服务器。作为拷贝的一个步骤,你将重命名每个文件根据下面的每个节点:

原始名 拷贝名
ca.pem ca.pem
<server>-cert.pem cert.pem
<server>-priv-key.pem key.pem
  1. 登录你的CA服务器终端并且提升root。
$ sudo su
  1. 在Swarm manager上创建~/.certs目录。这里我们假设用户的帐号是ubuntu。
$ ssh ubuntu@swarm 'mkdir -p /home/ubuntu/.certs'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容