Microk8s не может извлечь из частного реестра

Я использую Microk8s на экземпляре EC2. Мне не удается извлечь контейнеры из нашего частного реестра. При попытке запустить такой контейнер kubectl describe pod показывает:

Не удалось получить изображение «docker.xxx.com/import:v1»: ошибка rpc: code = Unknown desc = не удалось разрешить образ «docker.xxx.com/import:v1»: нет доступной конечной точки реестра: не удалось получить анонимный токен : неожиданный статус: 401 Неавторизованный

Я могу docker login и docker pull с этой машины. Ямл, который я использовал для развертывания контейнера, отлично работает в другом (не контейнерном) кластере. Это относится к секрету извлечения, который идентичен тому, который используется в другом кластере и отлично работает там.

Я добавил следующую запись в containerd-template.toml Microk8s:

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

Я понятия не имею, чего еще мне может не хватать.


person Achim    schedule 18.06.2019    source источник
comment
Вы включили реестр? microk8s.enable registry Вы редактировали deamon.json? sudo vim /etc/docker/daemon.json с записью вида `{insecure-registries: [yourRepository]} '   -  person PjoterS    schedule 21.06.2019


Ответы (2)


Если вы получаете сообщение об ошибке 401, вероятно, что-то не так с аутентификацией. Например. у вас отсутствуют учетные данные в вашем частном реестре.

Чтобы убедиться, что microk8s будет использовать правильные учетные данные, в дополнение к разделам mirrors в конфигурации вы должны указать раздел auths, в котором вы поместите свои учетные данные реестра докеров.

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

Атрибуты в этом разделе совместимы с конфигурацией, которую вы можете найти в вашем .docker/config.json.

Обратите внимание, что это раздел на том же уровне, что и mirrors, он не должен быть частью записи mirrors, а должен быть добавлен как новый раздел. Еще одна важная часть - убедиться, что auth хосты соответствуют вашему хосту реестра (например, https vs http).

Для получения дополнительных сведений см. Ссылку: https://github.com/containerd/cri/blob/master/docs/registry.md

p.s. Имейте в виду, что containerd поддерживается microk8s [1] v1.14, если вы используете старую версию, вам следует проверить другие параметры, например, официальную документацию Kubernates [2]

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

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

person mtfk    schedule 27.06.2019

Самым простым решением было бы:

1) создайте secret в текущем пространстве имен:

k create secret docker-registry my-private-registry \
  --docker-server=my-private-registry.io \
  --docker-username="my-username" \
  --docker-password="********" \
  [email protected]

2) пропатчить сервисный аккаунт default:

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

После этого вы можете ссылаться на образы из личного реестра докеров в определениях модуля / развертывания / репликации. Выполните ту же последовательность для каждого пространства имен, которое вы будете использовать.

HTH.

person maslick    schedule 19.11.2019