1

我在 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"]

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

4

2 回答 2

2

如果您收到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/

于 2019-06-27T09:40:42.873 回答
0

最简单的解决方案是:

secret1)在当前命名空间中创建一个:

k create secret docker-registry my-private-registry \
  --docker-server=my-private-registry.io \
  --docker-username="my-username" \
  --docker-password="********" \
  --docker-email=my.email@helloworld.io

2)修补default服务帐户:

k patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-private-registry"}]}'

在此之后,您可以在 pod/deployment/replicaset 定义中引用私有 docker 注册表中的图像。对您将使用的每个命名空间执行相同的序列。

HTH。

于 2019-11-19T23:33:35.260 回答