【发布时间】:2023-01-12 05:48:56
【问题描述】:
我需要更新当前在通过 kubernetes pod 运行的 docker 容器中的证书。包含这些证书的三个 pod 分别名为“app”、“celery”和“celery beat”
当我跑步时
kubectl exec -it app -- sh
然后ls
我可以看到旧证书在那里。我的 VM 文件系统上有新证书,需要将它们放入正在运行的 pod 中,以便程序再次开始工作。我尝试重建用于创建正在运行的容器的 docker 镜像(使用现有的 docker compose 文件),但这似乎没有用。我认为容器中的文件系统最初是使用 docker volumes 挂载的。这大概是在本地完成的,而现在该项目在远程 Linux VM 上。将新证书放入正在运行的 pod 中而其他一切都保持不变的自然方法是什么?
我可以 kubectl cp 新证书,问题在于当重新创建 pod 时,它们会恢复为旧证书。
任何帮助将非常感激。
【问题讨论】:
-
规范地,您应该更新图像(也许您有像
RUN update-ca-certs这样的行),在新图像标签下重新发布它们,并使用新的image:值更新 Kubernetes 部署。卷不应该是其中的一部分,kubectl exec和kubectl cp也不应该。这些步骤你做到了吗? -
感谢您的回复。我确实尝试过,但尽管在本地工作,但新图像无法在远程机器上工作。
RUN update-ca-certs行确实在 Dockerfile 中,图像是通过 docker compose 创建的,它也有一个卷部分。 (我没有构建这个程序,所以不想重新发明轮子,只是想让新证书起作用)。卷是我认为将我在 pod 中看到的文件复制到图像/容器中的东西吗?我会再试一次以提供更多详细信息 -
如果您可以 edit 问题中包含一个 minimal reproducible example,那将会很有帮助。例如,如果您的 Kubernetes 设置使用 ConfigMap 注入证书,这将隐藏图像中的任何内容。
-
首先,您需要弄清楚如何将旧证书复制到容器中,是使用机密、configMaps 还是卷,或者使用最少的方法,您可以将新证书复制到共享卷位置的远程 VM
标签: docker ubuntu kubernetes certificate