Recibo este error al iniciar un Pod
Failed to pull image "docker-username/docker-private-repository:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for docker-username/docker-private-repository, repository does not exist or may require 'docker login': denied: requested access to the resource is deniedMi configuración es la siguiente:
Ceated un servicio secreto usando la línea de comando
kubectl create secret docker-registry docker-keys --docker-username=docker-username --docker-password=password --docker-email=docker-email@gmail.com --docker-server=https://index.docker.io/v1que genera los siguientes datos dentro de secretos
kubectl get secret docker-keys -o json | jq '.data | map_values(@base64d)' { ".dockerconfigjson": "{\"auths\":{\"https://index.docker.io/v1\":{\"username\":\"docker-username\",\"password\":\"password\",\"email\":\"docker-email@gmail.com\",\"auth\":\"base64encodedtoken\"}}}" } Luego, en la implementación, estoy usando secretos docker-keys
apiVersion: apps/v1 kind: Deployment metadata: name: docker-private-repository labels: app: docker-private-repository spec: replicas: 1 selector: matchLabels: app: docker-private-repository template: metadata: labels: app: docker-private-repository spec: imagePullSecrets: - name: docker-keys containers: - name: docker-private-repository image: docker-username/docker-private-repository:latest imagePullPolicy: Always ports: - containerPort: 3000Traté de buscar una solución, pero siempre terminé con la configuración anterior.
Actualización 1: el servicio Secrets y el pod se ejecutan en el mismo espacio de nombres default . Tirar manualmente desde docker-hub funciona
docker pull docker-username/docker-private-repository:latest latest: Pulling from docker-username/docker-private-repository 0ecb575e629c: Already exists ... 7467d1831b69: Already exists Digest: sha256:153643ecb19c2ce54635839ce9393b2e256ce6c34a2fe75b91c7a41525a6a535 Status: Downloaded newer image for docker-username/docker-private-repository:latest docker.io/docker-username/docker-private-repository:latest Update2 kubectl describe pod
Tengo 2 servicios de sercrets, uno para las credenciales de dockerhub y otro es token-rzlx6 por el motivo que sea. La cuestión es que cuando ejecuto describe pod, no veo los secretos para que dockerhub se monte como token-rzlx6 , ¿podría ser esta la razón? ¿Y por qué no está montado?
... Volumes: default-token-rzlx6: Type: Secret (a volume populated by a Secret) SecretName: default-token-rzlx6 Optional: false QoS Class: BestEffort Node-Selectors: <none> ...Entonces, el problema era el valor del servidor acoplable. Según los tutoriales que he visto, estaba usando api V1, mientras que mi imagen fue enviada/creada a dockerhub con V2, puede que no sea relevante y que V1 esté en desuso. Cuando creo un servicio secreto, necesito usar el servidor V2 https://index.docker.io/v2/ , como:
kubectl create secret docker-registry docker-keys \ --docker-username=yyyyyy \ --docker-password=xxxxx \ --docker-email=my@mail.com \ --docker-server=https://index.docker.io/v2/Algo simple, que tomó días descubrir, ya que muchos artículos tienen V1 o no lo muestran en absoluto o usan el registro privado de Docker. Los documentos están aquí. https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
Actualizar:
Una cosa más por la que no estaba prestando atención a la versión de la API es el archivo de docker config , que tiene V1 como API y desde aquí tomé el punto final para crear un servicio secreto, mientras que funcionaba solo con V2.
cat ~/.docker/config.json { "auths": { "https://index.docker.io/v1/": {} }, "credsStore": "osxkeychain" }% Actualización 2: Sin embargo, cuando saqué la imagen localmente con el comando docker pull , la imagen se extrajo correctamente usando la URL v1. Se supone que api V1 funciona dentro de docker, pero no en kubernetes.
estaba teniendo este problema, si cambio mi repositorio a público, funciona.