使用 Google Jib 和 Kubernetes 时添加 SSL 证书

ble*_*h10 7 java ssl-certificate kubernetes dockerfile jib

因此,我尝试为我的项目添加 ssl 证书,在我的本地计算机上,我只需按照 keytool 命令即可添加它,然后它就可以工作了。但是当我尝试在拥有 k8s 集群的机器上执行相同的操作时,它似乎不起作用。

我看到几个人将 cer 添加到他们的 docker 文件中的 cacerts 中,但我没有,因为我正在使用谷歌的 Jib,所以我不确定它应该如何从这里开始,或者这是我应该的配置添加到我的 k8s 部署文件中吗?

Cha*_* Oh 11

背景

\n

在这里,我假设部署到 Kubernetes 的应用程序正在连接到受 Kubernetes 外部服务器证书保护的外部服务器。例如像本文中的案例。

\n

正如上面的链接所示,确实有多种方法可以解决此问题。但是,请注意,本文中解释的方法并不真正适用于 Java,因为 Java不使用操作系统中的系统 CA 证书存储,而是使用自己的信任存储

\n
\n

它不使用 Windows 证书存储,而是使用自己的实现。Java 证书存储在名为的文件中,cacerts位于C:\\Program Files (x86)\\Java\\jre1.x.x_xxx\\lib\\security\\

\n
\n

因为你说你在本地成功使用了 keytool,所以我假设你已经知道这种 Java 行为以及你的服务器证书应该导入到 \xe2\x80\x93 中,即导入到 JRE 的默认值中cacerts(除非您使用一些系统属性告诉 JVM 在不同位置查找 CA 信任库)。既然你说你让它在本地工作,理论上你可以遵循相同的方法,它也应该在 Kubernetes 上工作。

\n
\n

cacerts在构建时嵌入

\n

一种简单的方法是在映像构建时将证书烘焙到映像中(正如您在方法中所暗示的那样Dockerfile)。为此,您可以使用 Jib 的<extraDirectories>功能将任意文件复制到镜像中(用法:Maven / Gradle)。只需准备一个新cacerts文件并将其放入映像中 JRE 的默认位置即可。

\n

cacerts在运行时提供

\n

如果您不喜欢将证书烘焙到图像中的想法,而是想在运行时提供它,我相信您基本上可以遵循我上面链接的文章中描述的最后一种方法(尽管对于 Java,您应该cacerts改为, 当然)。我不是这个领域的 Kubernetes 专家,不确定 Kubrenetes 是否提供了另一个专用解决方案,但文章中的方法似乎合理并且应该可行。

\n

对于 Kubernetes 以外的容器运行时,它们都有自己的在运行时提供文件或附加卷的方式,因此您应该能够实现相同的目标。

\n
\n

更新:在许多 Linux 发行版上,通常<JRE>/lib/security/cacerts是 的符号链接/etc/ssl/certs/java/cacerts,因此您可以选择更新后者而不是前者。

\n
# ls -l /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts\nlrwxrwxrwx    1 root     root            27 Jan  1  1970 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -> /etc/ssl/certs/java/cacerts\n
Run Code Online (Sandbox Code Playgroud)\n