kubernetes 如何更新Docker容器文件系统中的旧证书

eufgjt7s  于 2023-01-12  发布在  Kubernetes
关注(0)|答案(1)|浏览(245)

我需要更新当前通过kubernetes pod运行的docker容器中的证书。包含这些证书的三个pod的标题分别为“app”、“celery”和“celery beat”
当我奔跑
kubectl exec -it app -- sh
然后ls
我可以看到旧证书在那里。我的VM文件系统上有新证书,需要将这些证书放入运行的pod中,以便程序再次开始工作。我尝试重新构建用于创建运行容器的Docker映像(使用现有Docker合成文件),但这似乎不起作用。我认为容器中的文件系统最初是使用Docker卷安装的。这大概是在本地完成的,而现在项目是在远程Linux VM上完成的。将新证书放入正在运行的pod而使其他一切保持不变的自然方法是什么?
我可以在中使用kubectl cp新证书,问题是当重新创建Pod时,它们会恢复为旧证书。
任何帮助都将不胜感激。

r1zk6ea1

r1zk6ea11#

检查部署文件中的卷部分,看是否提到了名称更像“certs”的configmap、secret、PV或PVC(通常我们使用这样的名称),如果它存在,并且提及是secret或configmap,您只需要直接更新此资源。如果提及是PV或PVC,您需要通过CLI更新它,例如,我建议你换个秘密。
用于检查部署资源的命令: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/

相关问题