Containerd 跳过自签名证书验证

🔧 场景一:配置 containerd 跳过自签名证书验证

对于你的私有镜像仓库问题,需要在 containerd 或更推荐的 hosts.toml 中配置。

方法A:通过 /etc/containerd/config.toml (旧版/全局)

编辑配置文件:

sudo vim /etc/containerd/config.toml

[plugins.”io.containerd.grpc.v1.cri”.registry.configs.”<你的仓库地址>”.tls] 部分,设置 insecure_skip_verify = true

示例如下:

[plugins."io.containerd.grpc.v1.cri".registry.configs."my.registry.local:5000".tls]
  insecure_skip_verify = true

重启生效:

sudo systemctl restart containerd

方法B:通过 /etc/containerd/certs.d/ (推荐方式)

这是 containerd 更模块化的新配置方式。

创建仓库配置目录:

sudo mkdir -p /etc/containerd/certs.d/<你的仓库地址>

注:<你的仓库地址>可以是域名+端口,如 my.registry.local:5000

创建 hosts.toml 文件:

sudo vim /etc/containerd/certs.d/<你的仓库地址>/hosts.toml

写入以下配置(核心是 skip_verify = true):

server = "https://<你的仓库地址>"

[host."https://<你的仓库地址>"]
  capabilities = ["pull", "resolve"]
  # 如果需要认证,在此处配置
  # 关键是跳过TLS验证
  skip_verify = true
sudo mkdir -p /etc/containerd/certs.d/registry.baomagangwan.com && cat << 'EOF' | sudo tee /etc/containerd/certs.d/registry.baomagangwan.com/hosts.toml > /dev/null
server = "https://registry.baomagangwan.com"

[host."https://registry.baomagangwan.com"]
  capabilities = ["pull", "resolve"]
  # 如果需要认证,在此处配置
  # 关键是跳过TLS验证
  skip_verify = true
EOF

重启生效:

sudo systemctl restart containerd

🔌 场景二:配置客户端工具跳过TLS验证

如果你需要通过 kubectl 或 oc 等客户端工具连接带有自签名证书的 Kubernetes API 服务器,可以使用以下方法:

使用 kubectl / oc 命令配置:

你可以通过 `--insecure-skip-tls-verify` 参数来临时跳过对特定集群的证书验证。这通常用于初始测试或临时访问。命令示例如下:
# 为 kubectl 配置集群并跳过验证
kubectl config set-cluster <集群昵称> --server=<API服务器地址> --insecure-skip-tls-verify=true[citation:6]

# OpenShift 的 oc 命令用法类似
oc config set-cluster <cluster_nickname> --server=<master_ip_or_fqdn> --insecure-skip-tls-verify=true[citation:6]

其他工具(如 roxctl):

许多云原生工具(如红帽的 roxctl)也提供了 –insecure-skip-tls-verify 命令行标志来跳过验证。

💡 重要安全警告与建议

⚠️ 仅限测试环境:跳过 TLS 验证会带来中间人攻击风险,生产环境严禁使用。

正确做法:将私有仓库或 API 服务器的 CA 根证书正确添加到每个节点的信任库中(如 /etc/ssl/certs/ 或 containerd 的证书目录)。

🔍 下一步排查建议

  • 确认错误根源:请先确认 k8s 秘钥验证不通过 的错误信息是否确实包含 x509: certificate signed by unknown authority 这类证书错误。如果是凭证问题,即使跳过验证也可能失败。

  • 检查配置生效:更改 containerd 配置后,可以尝试在节点上使用 crictl pull <你的私有镜像> 直接测试拉取,看错误是否变化。

作者:Jeebiz  创建时间:2025-12-10 16:53
最后编辑:Jeebiz  更新时间:2025-12-10 17:03