You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K3s集群中Let's Encrypt证书私有Docker镜像拉取失败排查

问题解决步骤

1. 修正容器运行时的证书信任配置

K3s默认使用containerd作为容器运行时,而非Docker。你之前将根证书添加到Docker的信任库无法解决问题,需要为containerd配置信任CA:

  • 在每个集群节点上创建containerd的证书配置目录:
    mkdir -p /var/lib/rancher/k3s/agent/etc/containerd/certs.d/192.168.42.50:5000
    
  • 将ISRG Root X1根证书内容写入该目录下的ca.crt文件:
    # 假设你已将根证书保存为isrgrootx1.pem,执行以下命令
    cp isrgrootx1.pem /var/lib/rancher/k3s/agent/etc/containerd/certs.d/192.168.42.50:5000/ca.crt
    
  • 重启K3s服务(单节点集群重启k3s,多节点重启k3s-agent):
    systemctl restart k3s
    # 多节点agent节点执行
    systemctl restart k3s-agent
    

2. 验证私有仓库的证书链完整性

Let's Encrypt的证书需要完整的证书链(叶子证书 + 中间证书,比如R3)才能被正确信任。检查你的私有仓库是否配置了全链证书:

  • 在节点上执行以下命令查看仓库返回的证书链:
    openssl s_client -connect 192.168.42.50:5000 -showcerts
    
  • 确认输出中包含ISRG Root X1根证书和R3中间证书,若缺失中间证书,需要更新私有仓库的证书配置,使用cert-manager生成的Secret中tls.crt文件(该文件默认包含完整证书链)。

3. 测试镜像拉取

在节点上直接使用containerd的命令测试拉取:

ctr images pull 192.168.42.50:5000/dev-backend:latest

若能成功拉取,说明证书信任配置生效,再重新部署你的应用即可。

Kubernetes默认信任的CA说明

Kubernetes本身不直接管理证书信任逻辑,镜像拉取的证书验证由容器运行时(如containerd、Docker)负责:

  • 容器运行时默认信任节点系统的根CA库(通常位于/etc/ssl/certs/或/usr/local/share/ca-certificates/),多数Linux发行版已预装ISRG Root X1等公共CA根证书。
  • 对于containerd,除了系统根CA,还可以通过certs.d目录为特定仓库添加自定义信任CA,这是针对私有仓库的精准配置方式。
额外排查点
  • 检查节点系统根CA是否包含ISRG Root X1:执行openssl verify -CApath /etc/ssl/certs/ <仓库证书文件>,确认验证通过。
  • 确认你的imagePullSecret配置正确(虽然当前报错是证书问题,但可通过kubectl describe secret docker-registry-config -n dev验证凭证有效性)。

内容的提问来源于stack exchange,提问作者neogeek23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:35:30