k8s/rancher 导入和使用 p12 或 pem 等证书

问题情景

将业务从 swarm迁移至k8s的过程中,遇到了一点证书导出/导入/挂载的问题,已经解决。

容器的证书目录结构

保持原来证书目录结构不变,避免了研发的代码改动。

# tree ./
./
├── 123
│   └── apiclient_cert.p12
├── 456apiclient_cert.p12
└── apiclient_cert.p12

注意
有个坑,存在两个同名证书文件:apiclient_cert.p12

在后续的证书导入过程中,要显式地区分开

swarm证书导出

证书原文件丢失或者难找到的情况下,可以从 swarm 容器内 copy 出来。

  • 直接用 docker cp 是无法复制 .p12.pem 等后缀的证书的
  • 可以先再容器内 cp成其他后缀(比如.txt),再docker cp 就可以了

证书导入k8s

  1. 将导出的.txt证书后缀改回 .p12
    • 不改也可以,但是在导入时还是要指定为 xxx.p12=xxx.txt
  2. md5sum验证一下内容是否一致
  3. kubectl create secret 导入证书为密文
kubectl -n swarm-migrate create secret generic \
--from-file="\
apiclient_cert.p12,\
456apiclient_cert.p12,\
123apiclient_cert.p12=123/apiclient_cert.p12" \
mycerts

说明:

  • --from-file=可以指定多个证书文件,格式 keyname=filepath
  • keyname指定命名为xxx.p12是为了方便挂载密文卷
  • 注意区别开不同目录级别的同名文件

证书挂载

登录 rancher,在集群 --> 项目 --> 密文页面可以看到刚创建好的mycerts

image

再编辑 工作负载,将证书挂载到指定目录下。

image

注意:

  • 123apiclient_cert.p12 这个文件相对路径123/apiclient_cert.p12
  • 相对路径 指的是,相对于容器路径的文件位置。

验证挂载

在 工作负载 -- Pods -- 执行命令行

  • 进入容器验证证书的目录结构:
/opt/xxxpay/certs # ls -l
total 0
lrwxrwxrwx    1 root     root            17 Mar 14 15:43 123 -> ..data/123
lrwxrwxrwx    1 root     root            35 Mar 14 15:43 456apiclient_cert.p12 -> ..data/456apiclient_cert.p12
lrwxrwxrwx    1 root     root            25 Mar 14 15:43 apiclient_cert.p12 -> ..data/apiclient_cert.p12
/opt/xxxpay/certs # ls -l 123/
total 4
-r--------    1 root     root          2876 Mar 14 15:43 apiclient_cert.p12
  • 用 md5sum 等工具校验文件内容。
posted @ 2025-03-14 16:33  M1927  阅读(117)  评论(0)    收藏  举报