国内海外服务器测评及优惠
Linux服务器运维救灾服务

K3s 使用 embedded registry 拉镜像报 "unauthorized: authentication required"

registry.k3s.io是只读镜像源,不支持认证;“unauthorized”错误主因是误配auth或全局mirror导致containerd错误携带token,应清理无关鉴权配置、显式指定上游registry、避免为它设置auth或非必要mirror。

K3s 内置 registry(即 registry.k3s.io)默认是只读,不提供用户认证服务,也不接受推送。当你看到 unauthorized: authentication required 错误时,通常不是因为 registry 本身需要登录,而是客户端(比如 crictl 或容器运行时)误以为要向它做身份验证——常见于配置了错误的镜像仓库别名、或本地镜像拉取配置中混入了需鉴权的私有仓库设置。

检查是否误配了 registry 镜像(mirror)规则

K3s 支持通过 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl--private-registry 配置镜像加速或重定向。如果错误地把 registry.k3s.io 写进了需认证的私有 registry 列表(例如在 ~/.docker/config.json 或 contnerd 的 hosts.toml 中配了 auth),containerd 就会在拉取时主动携带无效 token,触发该报错。

  • 检查 /etc/rancher/k3s/registries.yaml(若存在),确认没有对 registry.k3s.io 配置 authheaders
  • 检查 /var/lib/rancher/k3s/agent/etc/containerd/config.toml 中的 [plugins."io.containerd.grpc.v1.cri".registry] 段,确保没有为 registry.k3s.io 设置 auth
  • 临时移除 ~/.docker/config.json(如果节点上装了 Docker 且该文件含 registry 凭据),避免 crictl 误读

确认拉取的是官方 K3s 镜像而非私有仓库同名镜像

registry.k3s.io 仅托管 K3s 自身组件镜像(如 registry.k3s.io/k3s:v1.29.4-k3s1),不托管 nginxredis 等通用镜像。如果你执行 crictl pull nginx:alpine 并报此错,说明 containerd 实际尝试从 registry.k3s.io 拉取(因配置了 mirror),但该 registry 不提供该镜像,且返回了带 auth header 的 401 ——这是它的默认行为(非 bug,是保护机制)。

  • crictl pull docker.io/library/nginx:alpine 显式指定上游 registry
  • 或修改 registries.yaml,只为 registry.k3s.io 设置 mirror,其他域名走默认(不设全局 mirror)
  • 典型安全写法:
    mirrors:
    "registry.k3s.io":
    endpoint:
    - "https://registry.k3s.io"

    ,不要写 "docker.io""*" 的 mirror

排查是否启用了错误的 containerd auth 插件或凭据助手

某些环境(如 CI 节点或预装了 nerdctl 的机器)可能启用了 containerdauth 插件(如 nerdctl--insecure-registry 或凭据助手),导致所有拉取请求都附带空或过期 auth 头。

AI设计工具

  • 运行 crictl info | grep -A5 registry 查看当前 registry 配置摘要
  • 临时停用凭据助手:删除 /etc/containerd/certs.d/ 下与 registry.k3s.io 相关的目录
  • 重启 containerd:sudo systemctl restart k3s(K3s 会一并重启其内嵌 containerd)

验证是否真连到了 registry.k3s.io

直接 测试 registry 是否可访问且响应合理:

  • curl -I https://registry.k3s.io/v2/ 应返回 200 OK401 Unauthorized(后者正常,表示服务可达但需鉴权——而它本就不支持鉴权,所以实际是“无条件拒绝”)
  • curl -I https://registry.k3s.io/v2/library/nginx/manifests/latest 应返回 404 Not Found,证明它确实不托管该镜像
  • 若返回 403 Forbidden 或超时,则可能是网络或问题,而非 auth 错误

核心原则:registry.k3s.io 是只读 CDN,不支持登录,也不代理第三方镜像。报 “unauthorized” 多数是配置把不该鉴权的地址当作了私有仓,或拉取路径被错误重写。清理无关 auth 配置、显式指定上游 registry、避免全局 mirror,基本就能解决。

赞(0) 打赏
未经允许不得转载:linuxcto运维 » K3s 使用 embedded registry 拉镜像报 "unauthorized: authentication required"

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫