K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

前言

在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。

环境信息:

问题描述

在K8s集群中从私有Harbor仓库拉取镜像时,出现以下错误:

复制代码
certificate signed by unknown authority

分析:

  • 在节点上直接使用nerdctl pull命令拉取镜像时没有问题
  • 但通过Kubernetes部署Pod时,拉取同样的镜像却报错
  • 错误原因是容器运行时无法验证Harbor仓库的自签名证书

解决方案

1. 配置containerd信任私有仓库证书

需要通过配置containerd来解决证书信任问题,主要步骤如下:

1.1 证书准备

首先,需要将Harbor的CA证书复制到containerd的证书目录:

bash 复制代码
# 创建证书目录
mkdir -p /etc/containerd/certs.d/lzz.harbor.com/

# 复制CA证书到目录中
cp lzz.harbor.com.crt /etc/containerd/certs.d/lzz.harbor.com/ca.crt
1.2 修改containerd配置

编辑containerd配置文件,通常位于/etc/containerd/config.toml:

bash 复制代码
vi /etc/containerd/config.toml

添加以下配置(注意替换lzz.harbor.com为你的Harbor域名):

toml 复制代码
[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."lzz.harbor.com"]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."lzz.harbor.com".tls]
      ca_file = "/etc/containerd/certs.d/lzz.harbor.com/ca.crt"  # 替换为实际证书路径

配置文件示意图:

1.3 重启containerd服务
bash 复制代码
systemctl restart containerd

2. 验证解决方案

重启containerd服务后,再次部署使用私有仓库镜像的Pod,观察是否能够正常拉取镜像。正常情况下,Pod应该能够成功拉取镜像并运行。

问题解决效果

完成上述配置后,再次查看Pod状态,发现已经可以正常拉取私有仓库的镜像,Pod顺利运行。

常见问题与注意

注意多节点集群配置

多节点的Kubernetes集群,需要在每个工作节点上都进行上述配置。可以考虑使用配置管理工具(如Ansible)批量操作。

不同容器运行时的配置差异

  • Docker : 需要在/etc/docker/certs.d/目录下配置
  • CRI-O: 需要在全局CA证书目录或专用配置中设置

证书更新注意事项

当Harbor证书更新后,需要同步更新所有节点上的证书文件,并重启相应的容器运行时服务。

总结

解决K8s私有仓库证书问题的关键在于正确配置容器运行时(本例中是containerd)信任私有仓库的证书。通过将证书放置在正确的位置并更新配置文件,可以让Kubernetes集群顺利使用自签名证书的私有Harbor仓库。

这个问题在实际生产环境中比较常见,大家可以参考这个方法

相关推荐
誰能久伴不乏10 小时前
保姆级 Docker 入门教程
docker·容器·eureka
分布式存储与RustFS10 小时前
模型 checkpoint 放对象存储:分片上传、断点续传与残留清理
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS14 小时前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
vipxieliang14 小时前
Docker vs Podman vs containerd:容器运行时全景
docker·容器
vipxieliang14 小时前
数据持久化方案:卷、挂载、权限与备份恢复
docker·容器
vipxieliang14 小时前
容器原理揭秘:namespace、cgroup 与镜像分层
docker·容器
wzq11_66616 小时前
Kubernetes集群——基础篇(基础知识与搭建步骤一遍过!!!)
java·容器·kubernetes
分布式存储与RustFS16 小时前
DPU卸载纠删码与加密:解决AI对象存储的CPU瓶颈
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
kuroomi16 小时前
非云原生应用监控
云原生
java_logo18 小时前
Docker 部署 dockurr/windows:轻松搭建浏览器可控 Windows 虚拟机
运维·windows·docker·容器·虚拟机·kvm·轩辕镜像