K3S: Как аутентифицироваться с помощью hub.docker.com, чтобы получать приватные образы?

У меня настроен кластер Kubernetes с K3s, и я хочу получить данные из реестра, расположенного на hub.docker.com. Это не проблема при попытке получить общедоступные образы, но когда я пытаюсь получить частные образы с hub.docker.com. Он не может их найти.

Я уже пытался создать секрет regcred с данными для входа в Docker (см. здесь) и добавил его с помощью imagePullSecrets. Но это, кажется, не работает.

Как я могу указать моему кластеру K3s аутентифицироваться с помощью частной части hub.docker.com, что позволит мне извлекать частные образы в развертывании?

Спасибо

Вот мой полный манифест:

apiVersion: v1
kind: Namespace
metadata:
  name: example
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example
  namespace: example
spec:
  replicas: 2
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: example
          image: example/example:latest
          ports:
            - containerPort: 80
          imagePullPolicy: Always
      imagePullSecrets:
        - name: regcred
---
apiVersion: v1
kind: Service
metadata:
  name: example
  namespace: example
spec:
  ports:
    - port: 80
      targetPort: 80
      name: tcp
  selector:
    app: example
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
  namespace: example
  annotations:
    kubernetes.io/ingress.class: "traefik"
    kubernetes.io/tls-acme: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/ssl-temporary-redirect: "true"
    ingress.kubernetes.io/ssl-host: "example.com"
    traefik.frontend.rule.type: PathPrefixStrip
    traefik.ingress.kubernetes.io/redirect-regex: "^https://example.com(.*)"
    traefik.ingress.kubernetes.io/redirect-replacement: "https://www.example.com/$1"
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: example
                port:
                  number: 80
    - host: "www.example.com"
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: example
                port:
                  number: 80

Regcred выглядит так:

{"auths":{"https://index.docker.io/v1/":{"username":"example","password":"secret","email":"[email protected]","auth":"dm...g5"}}}%

Статус пода:

NAME                        READY   STATUS             RESTARTS   AGE
example-688b97d5d7-q9ngl    0/1     ImagePullBackOff   0          101s

При запуске команды kubectl describe pod example-688b97d5d7-q9ngl выдает мне:

Failed to pull image "example/example:latest": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/example/example:latest": failed to resolve reference "docker.io/example/example:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

person vblinden    schedule 13.01.2021    source источник
comment
Предоставление regcred imagePullSecrets — это все, что вам нужно сделать. В чем ошибка? Можно ли войти вручную с теми же учетными данными?   -  person anemyte    schedule 13.01.2021
comment
Я добавил свой манифест к исходному вопросу. Ручной вход с предоставленными учетными данными работает нормально.   -  person vblinden    schedule 13.01.2021
comment
После его развертывания вы видели что-нибудь в kubectl describe pod <pod-name>. Хотите увидеть, что раздел событий говорит вам об изображении.   -  person mchawre    schedule 13.01.2021
comment
Я добавил вывод команды в вопрос.   -  person vblinden    schedule 13.01.2021


Ответы (1)


Спасибо всем за помощь. Проблема заключалась в том, что я не создал секрет regcred для определенного пространства имен. Когда я это сделал, все заработало мгновенно.

person vblinden    schedule 13.01.2021