首页 > 解决方案 > Microk8s 无法从私有注册表中提取

问题描述

我在 EC2 实例上运行 Microk8s。我无法从我们的私有注册表中提取容器。尝试运行这样的容器时kubectl describe pod显示:

无法提取图像“docker.xxx.com/import:v1”:rpc 错误:代码 = 未知 desc = 无法解析图像“docker.xxx.com/import:v1”:没有可用的注册表端点:无法获取匿名令牌:意外状态:401 Unauthorized

我可以从那台机器上docker logindocker pull我用来部署容器的 yaml 在另一个(非容器化)集群上运行良好。它指的是一个 pull secret,它与另一个集群中使用的相同,并且在那里工作正常。

我在 Microk8s 的 containerd-template.toml 中添加了以下条目:

   [plugins.cri.registry]
      [plugins.cri.registry.mirrors]
        ...
        [plugins.cri.registry.mirrors."docker.xxx.com"]
          endpoint = ["https://docker.xxx.com"]

我不知道我可能还缺少什么。

标签: dockerkubernetesmicrok8s

解决方案


如果您收到401错误,则身份验证可能有问题。例如,您缺少私有注册表的凭据。

为了确保 microk8s 使用正确的凭据,除了mirrors配置中的部分之外,您还必须指定auths放置 docker 注册表凭据的部分。

[plugins.cri.registry.auths]
  [plugins.cri.registry.auths."https://gcr.io"]
    username = ""
    password = ""
    auth = ""
    identitytoken = ""

该部分中的属性与您可以在.docker/config.json.

请注意,这是同一级别的部分,因为mirrors它不应该是mirrors条目的一部分,而是作为新部分添加。另一个重要部分是确保auth主机与您的注册表主机匹配(例如 https 与 http)。

有关更多详细信息,请查看参考:https ://github.com/containerd/cri/blob/master/docs/registry.md

ps 请记住,containerdmicrok8s[1] 支持,v1.14如果您使用旧版本,您应该检查其他选项,如官方 kubernates 文档[2]

[1] https://microk8s.io/docs/working

[2] https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/


推荐阅读