惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
The Cloudflare Blog
G
Google Developers Blog
博客园_首页
Martin Fowler
Martin Fowler
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
D
Docker
C
Check Point Blog
T
Tailwind CSS Blog
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
GbyAI
GbyAI

二叉树的博客

科研与小团队 GPU 共享容器完整方案:从零搭建 OneClickVirt 管理平台并通过 Agent 模式纳管内网 GPU 节点 Ray 支持昇腾 NPU 的 KubeRay 对接记录 openEuler 22.03 arm64 离线包适配记录 在线 IDE 的通用容器镜像打包流程 麒麟 V10 安装时配置本地源 BKE 与 BMP 部署排障流程 Red Hat 8 amd64 离线依赖适配记录 通用docker容器镜像打包应用的流程 kubevirt初体验 kubevirt初体验 魔改dockur制作可迁移的Windows镜像(单文件) 魔改dockur制作可迁移的Windows镜像(单文件) 通过dockur制作可迁移的Windows镜像(双文件) 通过ProxmoxVE制作kubevirt可用的Windows镜像 通过dockur制作可迁移的Windows镜像(双文件) 通过ProxmoxVE制作kubevirt可用的Windows镜像 基于docker的在线IDE制作(支持浏览器直接访问) 基于docker的在线IDE制作(支持浏览器直接访问) k8s日常问题排障 k8s日常问题排障 jetbrains家的goland项目可用但老爆红 jetbrains家的goland项目可用但老爆红 机房本地服务器自建Gitea并使用 机房本地服务器自建Gitea并使用 nvidia-smi被自动升级无法与GPU通信了怎么办 conda使用GPU时的一些陷阱 给机房的LXD容器配置跳板机进行连接 在Pycharm上连接远程虚拟环境进行使用 给机房的Ubuntu22.04安装LXD共享GPU资源 给机房的Ubuntu22.04的Linux进行内穿映射端口
containerd 允许 HTTP 镜像仓库拉取
二叉树上的我 · 2025-05-12 · via 二叉树的博客

这篇记录 containerd 拉取 HTTP 镜像仓库时的配置方式。常见误区是只在 /etc/containerd/config.toml 中配置 insecure = true,但这个配置主要作用于 CRI 插件;使用 nerdctlctr 或 Kubernetes 拉取时,仍可能继续尝试 HTTPS。

问题现象

私有仓库只提供 HTTP 服务时,直接拉取可能出现类似问题:

  • server gave HTTP response to HTTPS client
  • http: server gave HTTP response to HTTPS client
  • Kubernetes Pod 拉取镜像失败,但 config.toml 中已经设置过 insecure = true

根因是 containerd 新版本推荐通过 certs.d 目录为每个 registry 显式配置 hosts.toml

临时拉取

使用 ctr 时加 --plain-http

1
ctr image pull --plain-http 仓库地址/镜像名:标签

使用 nerdctl 时加 --insecure-registry

1
nerdctl -n k8s.io pull --insecure-registry 仓库地址/镜像名:标签

临时参数适合排障确认,不适合长期运行环境。

持久化配置

deploy.bocloud.k8s:40443 为例,创建证书配置目录:

1
mkdir -p /etc/containerd/certs.d/deploy.bocloud.k8s:40443

写入 hosts.toml

1
vim /etc/containerd/certs.d/deploy.bocloud.k8s:40443/hosts.toml

内容如下:

1
2
3
4
5
server = "deploy.bocloud.k8s:40443"

[host."http://deploy.bocloud.k8s:40443"]
  skip_verify = true
  plain_http = true

重启 containerd

1
2
systemctl daemon-reload
systemctl restart containerd

验证

使用 Kubernetes 命名空间对应的镜像仓库上下文测试:

1
nerdctl -n k8s.io pull deploy.bocloud.k8s:40443/命名空间/镜像名:标签

如果拉取成功,再创建 Pod 或重新删除失败 Pod,让 kubelet 重新触发镜像拉取。

注意事项

  • hosts.toml 的目录名必须与镜像地址中的 registry 完全一致,包括端口。
  • plain_http = true 是允许 HTTP 的关键配置。
  • skip_verify = true 只是不校验证书,不能单独让 HTTPS 降级为 HTTP。
  • 生产环境能使用 HTTPS 时仍应优先使用 HTTPS。