container向harbor推送镜像报错 x509: certificate signed by unknown authority
旧环境向harbor推送镜像报错了,可以看到是认证文件有问题。
从harbor下载新的跟域名证书
查看配置里证书的存放位置,把证书放过去授权
cat /etc/containerd/config.toml | grep ca_file
chmod 777 /etc/containerd/certs.d/core.harbor.domain/ca.crt
提取 Harbor 服务器当前使用的证书
openssl s_client -showcerts -connect core.harbor.domain:443 < /dev/null 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' > /tmp/harbor-server.crt
验证服务器证书是否由我们的 CA 证书签发(必须输出 OK)
openssl verify -CAfile /etc/containerd/certs.d/core.harbor.domain/ca.crt /tmp/harbor-server.crt
若输出 OK:证书正确,继续下一步;
若输出 error:说明复制的 ca.crt 不是真正的根 CA,必须重新从 Harbor 服务器获取正确的 CA 证书(检查 Harbor 服务器的 /data/harbor/certs/ 目录,可能存在 rootCA.crt 等其他名称的根证书)。
这里是正常的,继续复制根 CA 证书到系统信任目录:
复制证书(建议重命名为有辨识度的名称,如 harbor-root-ca.crt)
sudo cp /etc/containerd/certs.d/core.harbor.domain/ca.crt /etc/pki/ca-trust/source/anchors/harbor-root-ca.crt
更新系统证书缓存
sudo update-ca-trust extract
查看认证是否成功
curl -Iv https://core.harbor.domain/v2/ 2>&1 | grep -E "SSL certificate verify|SSL certificate problem"
接着暂停container清理缓存
systemctl stop containerd
rm -rf /var/lib/containerd/io.containerd.ttrpc.v1.cri/*
systemctl start containerd
重新推送
sudo ctr -n k8s.io images push \
> --user 用户名:密码 \
> 镜像名称