在Docker Swarm中安装SSL证书

时间:2018-09-09 11:46:26

标签: docker ssl docker-swarm

我正在使用(lldb) p b[0] error: Couldn't lookup symbols: __ZN6VectorI3XXXEixEm 在多个数字海洋小滴(副本> 1)中部署一项服务,每个小滴一个容器。这是我的应用后端服务。

我想安装SSL证书和私钥(并希望自动更新),以便可以使用具有SSL终止设置的TLS连接,因此无法使用端口80对从群集LB到容器的数据传输进行加密。我还使用{ {1}} cmd设置我的数字海洋ubuntu v16.04 Droplet。

什么是最好的方法?

我尝试了以下操作,并且出现了两个问题:

  1. 我首先生成证书和私钥,让我们在安装了nginx的服务器上的其他位置进行加密(也与我的DNS通讯)。生成证书/密钥后,我将其复制并安装回docker stack。但是觉得这种方法是错误的。

  2. 设置1.后,我尝试了docker-machine后端服务。端口80很好,但是端口443似乎正在使用http协议,我看到以下内容:

    docker swarm ca --rotate

感谢您对此主题的理解!

我也在这里问了一个问题:

https://forums.docker.com/t/installing-ssl-cert-in-docker-swarm/58073

1 个答案:

答案 0 :(得分:1)

您可以使用OpenSSL工具手动生成证书,并将Docker守护程序配置为使用这些证书。

生成服务器证书

  1. 生成CA私钥和公钥:

    openssl genrsa -aes256 -out ca-key.pem 4096
    openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -out ca.pem
    
  2. 创建服务器密钥和证书签名请求(CSR):

    openssl genrsa -out server-key.pem 4096
    openssl req -subj "/CN=my.company.com" -sha256 -new -key server-key.pem -out server.csr
    
  3. 用CA签名公钥:

    echo subjectAltName = DNS:my.company.com,IP:127.0.0.1 >> extfile.cnf
    echo extendedKeyUsage = serverAuth >> extfile.cnf
    
  4. 生成密钥:

    openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
    

生成客户端证书

  1. 创建客户端密钥和证书签名请求:

    openssl genrsa -out key.pem 4096
    openssl req -subj '/CN=client' -new -key key.pem -out client.csr
    
  2. 创建扩展程序配置文件:

    echo extendedKeyUsage = clientAuth >> extfile.cnf
    
  3. 签署私钥:
    openssl x509 -req -days 1000 -sha256 -in client.csr -CA ../server/ca.pem -CAkey ../server/ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
    
  4. 将cert.pem导出为PFX格式,以添加到受信任的根证书颁发机构中
    openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx
    

使用/etc/docker/daemon.json配置Docker守护程序

{
    "debug": false,
    "tls": true,
    "tlsverify": true,
    "tlscacert": "/etc/docker/certificates/server/ca.pem",
    "tlscert": "/etc/docker/certificates/server/server-cert.pem",
    "tlskey": "/etc/docker/certificates/server/server-key.pem",
    "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}

启动Docker服务

systemctl start docker

查看Scalified的这篇文章Building Jenkins Pipelines – Part 1. Setting Up Docker Swarm

它包括有关如何设置Docker Swarm以及生成服务器和客户端自签名证书的循序渐进指南。我希望这将有助于解决您的问题。