【问题标题】:How to update old certificates in docker container filesystem如何更新 docker 容器文件系统中的旧证书
【发布时间】: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 execkubectl cp 也不应该。这些步骤你做到了吗?
  • 感谢您的回复。我确实尝试过,但尽管在本地工作,但新图像无法在远程机器上工作。 RUN update-ca-certs 行确实在 Dockerfile 中,图像是通过 docker compose 创建的,它也有一个卷部分。 (我没有构建这个程序,所以不想重新发明轮子,只是想让新证书起作用)。卷是我认为将我在 pod 中看到的文件复制到图像/容器中的东西吗?我会再试一次以提供更多详细信息
  • 如果您可以 edit 问题中包含一个 minimal reproducible example,那将会很有帮助。例如,如果您的 Kubernetes 设置使用 ConfigMap 注入证书,这将隐藏图像中的任何内容。
  • 首先,您需要弄清楚如何将旧证书复制到容器中,是使用机密、configMaps 还是卷,或者使用最少的方法,您可以将新证书复制到共享卷位置的远程 VM

标签: docker ubuntu kubernetes certificate


【解决方案1】:

检查你的部署文件,在 volume 部分,是否提到了 configmap、secret、PV 或 PVC,其名称更像是“certs”(通常我们使用这样的名称),如果存在,并且提到的是 secret或者configmap,你只需要直接更新这个资源。如果mention是PV或者PVC,你需要用CLI等更新,建议你改成secret。

检查您的部署资源的命令:kubectl get deploy <DEPLOY NAME> -o yaml(如果您不使用部署,请将其更改为正确的资源种类)。

此外,您可以访问您的 pod shell 并运行df -hT,这可能会提示您的驱动器和挂载点。

在容器构建期间添加证书的最坏情况下,您可以通过以下方式解决(这不是最佳实践。最佳实践是构建新图像):

  • 编辑容器镜像,删除证书,使用新标签推送(不要覆盖旧标签)。
  • 使用新证书创建机密
  • 将此机密安装在同一路径中并使用相同的名称。
  • 更改部署中的图像版本。

您可以使用 kubectl edit deploy <DEPLOY NAME> 来编辑您的资源。

要编辑容器镜像,请使用 docker commit:https://docs.docker.com/engine/reference/commandline/commit/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2016-04-01
    • 2015-03-19
    相关资源
    最近更新 更多