最佳实践

问题描述:

如果我有一个泊坞窗的应用程序(J2EE Web应用程序)满足下列条件:最佳实践

  • 有不同的主机上进行部署(从相同的图像)多个容器由它来通过SSL/TLS相互通信 - 所以容器需要自己的SSL证书,并且需要信任其他容器的证书,这些容器将另外对其他外部URL进行HTTPS调用 - 因此这些服务器的证书也需要被信任。这些外部URL不是在部署时已知的,所以证书必须单独进口
  • 的应用程序是一个J2EE Web应用程序使用了鉴于此证书

的Java密钥库和信任,证书应该如何提供给服务器?

更新:2018-02

泊坞群允许秘密保存。 https://docs.docker.com/engine/swarm/secrets/ 但是,这在非Swarm部署中不受支持。解决这个问题的方法之一就是只将一个节点部署为Swarm。

以前的答案:

码头工人目前还没有一种方法来处理机密(这是他们的路线图)。 Docker上有一段长时间的话题。它列出了许多人用来将容器输入秘密的方法。 https://github.com/docker/docker/issues/13490

有些人使用HashiCorp的保险柜,其他人使用主机(env vars)或码头工具(这是我的团队所做的)加密机密。容器可以在启动时解密它们(入口点/命令)。要在运行时添加秘密,您可以创建一个自定义容器来执行此操作(接受http请求并将其存储在信任库中)。只是你会在上面的链接中看到许多建议。

应用程序应该在内部处理这个问题:

如果您有可以使用Java密钥库泊坞窗容器中运行的Java应用程序(只需再添加其他容器PEM公司的应用程序在Dockerfile密钥库)

# import my domaincert 
COPY homelinux.org.pem /tmp/homelinux.org.pem 
RUN /usr/bin/keytool -import -alias homelinux.org -keystore ${JAVA_HOME}/jre/lib/security/cacerts -trustcacerts -file /tmp/homelinux.org.pem -storepass changeit -noprompt 

我在〜.homelinux.org上有15个容器通过dyndns和一个 * .homelinux.org自签名域名证书(dnsname=*.homelinux.org)所以容器可以在它们之间使用ssl罚款。