k3s拉取自签名Harbor镜像报x509证书错误如何解决
问题根因
你配置的testcred镜像拉取密钥仅负责提供Harbor私有仓库的身份认证凭证,不会处理TLS证书信任逻辑。报错的核心原因是k3s默认内置的containerd容器运行时不信任Harbor使用的自签名SSL证书,发起HTTPS请求拉取镜像时证书校验流程失败。
解决步骤
1. 分发Harbor自签名CA证书到所有k3s节点
提前从Harbor服务器导出签发服务端证书用的根CA证书(注意不是Harbor的服务端证书本身),在**所有k3s节点(包括server控制节点和agent工作节点,所有可能调度Pod的节点都要操作)**执行以下命令:
# 创建k3s识别私有仓库证书的专用目录,目录名必须和你镜像配置里的仓库地址完全一致 mkdir -p /etc/rancher/k3s/certs/harbor-server # 将本地存储的Harbor根CA证书拷贝到上述目录,文件必须命名为ca.crt cp /your/local/path/harbor-ca.crt /etc/rancher/k3s/certs/harbor-server/ca.crt # 以下为可选操作,兼容节点上直接用ctr/crictl/docker命令拉取镜像的场景 cp /your/local/path/harbor-ca.crt /usr/local/share/ca-certificates/harbor-ca.crt update-ca-certificates
注意:如果你的Harbor访问地址带端口,比如
harbor-server:8443,那上述目录名必须改成harbor-server:8443,和镜像地址里的仓库段完全匹配,不要带https://前缀。
2. 重启k3s服务加载证书配置
所有节点执行完证书放置操作后,分别重启对应k3s服务:
- server控制节点执行:
systemctl restart k3s
- agent工作节点执行:
systemctl restart k3s-agent
3. 重新创建Pod验证
等待1-2分钟k3s服务恢复正常后,删除之前拉取失败的Pod重新应用配置即可:
kubectl delete -f testPod.yml kubectl apply -f testPod.yml
常见遗漏配置检查
- 不要只在server节点放置证书,所有agent节点必须同步配置,否则Pod调度到未配置证书的节点依然会报相同错误。
- 不要把Harbor的服务端证书(如
harbor-server.crt)当作根CA证书放入目录,必须放签发服务端证书的根CA文件。 - 低版本k3s如果上述目录配置不生效,可以通过新增
/etc/rancher/k3s/registries.yaml文件显式指定证书路径,配置内容如下,写完同样需要重启k3s服务:
mirrors: harbor-server: endpoint: - "https://harbor-server" configs: harbor-server: tls: ca_file: /etc/rancher/k3s/certs/harbor-server/ca.crt
内容的提问来源于stack exchange,提问作者maantarng
相关产品推荐
相关产品推荐

