web-dev-qa-db-fra.com

Kubernetes ne peut pas extraire une image d'un référentiel d'images de docker privé

J'ai un problème avec kubernetes (minikube) et extrait les images du référentiel d'images local sur docker .

docker run --entrypoint htpasswd registry:2 -Bbn zordon examplePassword > /mnt/LINUX/auth/htpasswd

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /mnt/LINUX/dockerreg:/var/lib/registry \
  -v /mnt/LINUX/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

Ensuite, je veux créer un simple pod avec une image qui a été chargée avec succès dans un référentiel local:

curl localhost:5000/v2/_catalog
{"repositories":["car/configuration"]}

J'ai aussi créé secret sur le cluster minikube avec:

kubectl create secret docker-registry docregkey --docker-server=localhost:5000 --docker-username=zordon --docker-password=examplePassword [email protected]

et définir un Pod simple:

    apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: car/configuration:latest
    imagePullPolicy: Always
  restartPolicy: Always
  imagePullSecrets:
  - name: docregkey

malheureusement je reste immobile:

Échec d'extraction de l'image "voiture/configuration: dernière": erreur rpc: code = Unknown desc = Réponse d'erreur du démon: accès bloqué refusé pour voiture/configuration, le référentiel n'existe pas ou peut nécessiter un menu fixe s'identifier'

Comment je peux résoudre ce problème?

4
lukisp

Le problème est lié à la stratégie d’extraction d’image - vous avez défini thist sur Always (paramètre par défaut), ce qui signifie que docker deamon tente toujours d’extraire une image du registre de docker externe - et vous souhaitez utiliser l’image locale à la place.

essayez de vous ajouter --image-pull-policy=Never lors de la création du déploiement

bon tutoriel d'utilisation de l'image créée localement est ici (cela m'a aidé):

https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-docker-container-image

5
Pawel B

Le problème concerne le nom de l'image que vous mentionnez dans le fichier POD yaml. 

image: voiture/configuration: dernière

Cela tentera d'extraire du registre global plutôt que du registre local.Changez le nom de l'image pour inclure également le référentiel.

image: localhost: 5000/car/configuration: dernière

Et assurez-vous que vous avez inclus le registre non sécurisé dans la configuration de votre démon docker si ce dernier n'est pas sécurisé.

3
Pramod V

Registre privé dans Minikube

kubectl create -f kube-registry.yaml

(Prenez kube-registry.yaml de ce Gist sur github.)

et vous avez besoin d'un minikube à transfert de port sur localhost (il suffit de créer une image)

kubectl port-forward --namespace kube-system \
$(kubectl get po -n kube-system | grep kube-registry-v0 | \
awk '{print $1;}') 5000:5000

Après cela, de l'hôte curl localhost:5000 devrait renvoyer une réponse valide du registre de docker s'exécutant sur minikube

Repo: http: // localhost: 5000/v2/_catalog

Pull image: localhost: 5000/nom_image: image_tag

Référence: https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615

0
Onur Yartaşı

Je voulais une solution d'une ligne à exécuter dans mon terminal. Tout le reste que j'ai essayé était trop complexe pour autoriser ecr avec minikube.

C'est ma commande pour la connexion à aws ecr que je lance chaque jour car le jeton expire. Les exemples ci-dessous concernent Debian 9 avec AWS ECR.

Coquille

kubectl create secret docker-registry aws-ecr-credentials \
--docker-server=$ECR_REGISTRY \
--docker-username=AWS \
--docker-password=$(aws ecr get-login | awk '{print $6}') \
--docker-email=$IAM_EMAIL \
--namespace=$KUBE_NAMESPACE

template.yml

spec:
  imagePullSecrets:
    - name: aws-ecr-credentials
0
Ligemer