arm64 Ubuntu下MicroK8s配置insecure镜像仓库无效报ImagePullBackOff
MicroK8s v1.18 arm64 版本HTTP本地镜像仓库配置方案
配置失效的核心原因
你之前的配置无法生效、触发HTTPS访问报错,本质是三个叠加问题:
- TOML配置层级完全错误:你把
configs块写在了mirrors配置段的内部,按照TOML语法解析规则,实际生成的配置路径是plugins.cri.registry.mirrors.configs.xxx,和containerd预期读取的plugins.cri.registry.configs.xxx路径完全不匹配,等于这段TLS配置根本没被识别 - 缺少HTTP访问的显式匹配:
insecure_skip_verify仅作用于HTTPS请求的证书校验,不会让containerd主动降级为HTTP协议访问,只要没有命中对应的HTTP允许规则,containerd就会默认走HTTPS流程 - 服务重载不完整:直接修改软链指向的
containerd.toml文件后,仅重启kubelet组件不会让containerd运行时重新加载配置,需要触发containerd守护进程的完整重载
正确配置流程
- 修正containerd的配置结构
打开/var/snap/microk8s/current/args/containerd.toml,找到[plugins.cri.registry]对应的段,严格按照以下层级编写配置,避免嵌套错位:
重点:两个配置段(mirrors、configs)都属于[plugins.cri.registry] # 镜像加速/镜像源映射段 [plugins.cri.registry.mirrors] [plugins.cri.registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"] [plugins.cri.registry.mirrors."192.168.0.45:32000"] endpoint = ["http://192.168.0.45:32000"] [plugins.cri.registry.mirrors."localhost:32000"] endpoint = ["http://localhost:32000"] # 各仓库的安全配置段(必须和mirrors平级,不能嵌套在mirrors内部) [plugins.cri.registry.configs."192.168.0.45:32000"] [plugins.cri.registry.configs."192.168.0.45:32000".tls] insecure_skip_verify = true [plugins.cri.registry.configs."localhost:32000"] [plugins.cri.registry.configs."localhost:32000".tls] insecure_skip_verify = true[plugins.cri.registry]的直接子项,不存在谁嵌套在谁内部的关系,这是最容易写错的地方 - 完整重载containerd服务
修改配置后不要仅操作k8s组件,执行以下命令确保配置被加载:# 先停止microk8s所有服务 microk8s.stop # 单独重启containerd守护进程,强制加载新配置 snap restart microk8s.daemon-containerd # 重新启动microk8s microk8s.start - 配置有效性验证
执行以下命令确认配置被containerd正确识别:
输出中需要能看到# 查看当前运行的containerd registry配置 microk8s.ctr info | grep -A 15 "Registry Config"192.168.0.45:32000对应的insecure_skip_verify: true配置项,且对应的endpoint为http地址。
常见踩坑提示
- 配置里的仓库地址必须和Pod拉取的镜像地址完全匹配:镜像写的是
192.168.0.45:32000/myapp:latest,配置里的仓库标识就必须是192.168.0.45:32000,不能省略端口、不能写错IP段,否则配置不会命中 - 多节点集群场景下,所有运行工作负载的节点都要做相同配置,仅在master节点修改配置无法解决工作节点的拉取问题
- 部分MicroK8s版本会在启动时从模板文件生成
containerd.toml,如果修改后重启就被覆盖,需要同步修改/var/snap/microk8s/current/args/containerd-template.toml里的对应配置段
内容的提问来源于stack exchange,提问作者Dániel Kis
相关产品推荐
相关产品推荐

