containerd连接ssl的harbor提示证书不被信任

我使用docker-compose部署的harbor镜像仓库,nerdctl可以正常访问,只需要把域名开头的crt证书写入到/etc/pki/tls/certs/ca-bundle.crt文件即可,如:

[root@node02 certs.d]# chmod 644 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
[root@node02 certs.d]# cat /app/harbor/certs.d/core.harbor.domain.crt >> /etc/pki/tls/certs/ca-bundle.crt
[root@node02 certs.d]# chmod 444 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

[root@node02 certs.d]# nerdctl login -u admin -p Harbor12345 https://core.harbor.domain
WARN[0000] WARNING! Using --password via the CLI is insecure. Use --password-stdin. 
Login Succeeded
[root@node02 certs.d]# 

但是我在k8s上使用helm部署的harbor,nerdctl就访问不了,两者创建的证书的命令完全一致,且也进行了上述将证书添加到可信的操作,每次都提示证书不被信任。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    解决 Kubernetes 中使用 Helm 部署的 Harbor 无法连接到 SSL 的 Harbor,并提示证书不被信任问题

    这个问题的原因是在 Kubernetes 中使用 Helm 部署的 Harbor 无法信任证书,可能是因为证书链不完整或者是配置问题。

    下面是一些可能的解决方案:

    1. 确保证书链完整

    2. 检查在 Helm 部署 Harbor 时使用的证书是否是完整的证书链。可以通过自签名证书生成工具(如 OpenSSL)生成完整的证书链。

    3. 请确保 Harbor 使用的证书包含所有必需的中间和根证书,以便客户端可以正确验证证书。

    4. 验证 Harbor 配置

    5. 检查 Helm 安装 Harbor 时提供的配置参数,确保使用了正确的证书路径和证书文件名。

    6. 检查 Harbor 的 Ingress 配置是否正确,并且证书文件名与实际证书文件名匹配。

    7. 添加证书到 Kubernetes 信任证书池中

    8. 使用 kubectl 命令创建 Kubernetes Secret,将证书添加到信任证书池中。可以使用以下命令将证书添加到 Secret 中:

    shell kubectl create secret generic harbor-cert --from-file=/app/harbor/certs.d/core.harbor.domain.crt

    • 确保 Secret 的名称和路径与实际证书文件匹配。

    • 然后,在 Harbor 的 Deployment 或 Pod 的 YAML 文件中,将上面创建的 Secret 挂载到容器的某个目录(例如 /etc/ssl/certs)。

    yaml ... spec: volumes: - name: harbor-cert secret: secretName: harbor-cert containers: - name: harbor volumeMounts: - name: harbor-cert mountPath: /etc/ssl/certs readOnly: true ...

    • 这样,容器在启动时将自动加载加入到 Kubernetes 信任证书池中的证书。

    • 使用特定的证书信任配置

    • 检查 Nerdctl 的证书信任配置。可以尝试将 Harbor 证书的路径配置添加到 Nerdctl 的证书信任配置文件中。

    • 根据 Nerdctl 的文档,可以在以下位置创建 Nerdctl 的配置文件:

    shell ~/.config/nerdctl/config.toml

    • 在该文件中添加以下内容:

    toml [plugins."io.containerd.grpc.v1.cri".registry.configs."core.harbor.domain".tls] ca_file = "/path/to/core.harbor.domain.crt"

    • 确保路径 /path/to/core.harbor.domain.crt 是正确的 Harbor 证书路径。

    如果以上解决方案都不能解决问题,请尝试生成一个全新的可信证书,并在 Harbor 部署时使用该证书,确保证书链完整和正确。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^