webentwicklung-frage-antwort-db.com.de

Kubernetes können kein Image aus dem privaten Docker-Image-Repository abrufen

Ich habe Probleme mit kubernetes (minikube) und ziehe Images aus dem lokalen Image-Repository auf Docker . Das Docker-Repository wurde erstellt:

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

Dann möchte ich einen einfachen Pod mit einem Bild erstellen, das erfolgreich in das lokale Repository hochgeladen wurde:

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

Ich habe auch Geheimnis auf Minikube-Cluster mit:

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

und definieren Sie einen einfachen Pod:

    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

leider werde ich still:

Image "car/configuration: latest" konnte nicht abgerufen werden: rpc-Fehler: code = Unknown desc = Fehlerantwort vom Daemon: Pull-Zugriff für .__ verweigert. Auto/Konfiguration, Repository ist nicht vorhanden oder erfordert 'Docker Anmeldung'

Wie kann ich dieses Problem beheben?

4
lukisp

Das Problem ist mit der Image-Pull-Policy - Sie haben thist auf Always (Standardeinstellung) gesetzt, und der Docker-Deamon versucht immer, ein Image aus der äußeren Docker-Registry zu ziehen - und Sie möchten stattdessen ein lokales verwenden

versuchen Sie, beim Erstellen der Bereitstellung --image-pull-policy=Never hinzuzufügen

ein gutes Tutorial für die Verwendung von lokal erstellten Bildern ist hier (es hat mir geholfen):

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

5
Pawel B

Das Problem bezieht sich auf den Bildnamen, den Sie in der POD-yaml-Datei angeben. 

bild: Auto/Konfiguration: aktuell

Dadurch wird versucht, aus der globalen Registrierung statt aus der lokalen Registrierung zu ziehen. Ändern Sie den Image-Namen, um auch das Repository einzuschließen.

bild: localhost: 5000/Auto/Konfiguration: aktuell

Stellen Sie sicher, dass Sie eine unsichere Registrierung in Ihre Docker-Daemon-Konfiguration aufgenommen haben, wenn Ihre Registrierung nicht gesichert ist.

3
Pramod V

Da Minikube VM kein lokaler Host ist. Sie versuchen diesen Code eval $(minikube docker-env)https://kubernetes.io/docs/getting-started-guides/minikube) /

  1. Öffnen Sie das Terminal
  2. eval $(minikube docker-env)
  3. docker bauen.
  4. kubectl create -f deployment.yaml

gültig nur dieses Terminal. Wenn das Terminal wieder geschlossen ist, öffne das Terminal und schreibe eval $(minikube docker-env)

eval $(minikube docker-env) dieses Code-Build-Image in Minikube

3
Onur Yartaşı

Wenn Sie Kubernetes in Docker for Desktop ausführen, verwenden Ihre Anwendungen in Docker und Kubernetes dieselbe Image-Registrierung. Liste od alle Bilder:

docker images --all

Wähle sie aus und starte sie mit geändertem Attribut --image-pull-policy=Never. Zum Beispiel:

kubectl run ContainerName --image=myimage/server --port=8080 --image-pull-policy=Never 

Standardmäßig versucht das Kubelet, jedes Bild aus der angegebenen Registrierung abzurufen. Wenn jedoch die Eigenschaft imagePullPolicy des Containers auf IfNotPresent oder Never gesetzt ist, wird ein lokales Image verwendet (bevorzugt bzw. ausschließlich). Link

Es ist gemein, dass Kubernetes Bilder aus der lokalen Registrierung und nicht aus der Remote-Cloud bezieht.

0
ypaseka

Private Registry in Minikube

kubectl create -f kube-registry.yaml

(Ergreifen Sie kube-registry.yaml von diesem Gist auf github.)

und Sie benötigen einen Port-Forward-Minikube zu localhost (Nur Image-Build-Zeit)

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

Danach sollte vom Host curl localhost:5000 eine gültige Antwort aus der Docker-Registry zurückgegeben werden, die auf minikube ausgeführt wird

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

Bild ziehen: localhost: 5000/bildname: bildtag

Referenz: https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615

0
Onur Yartaşı

Ich wollte eine einzeilige Lösung in meinem Terminal ausführen. Alles andere, was ich ausprobierte, war zu komplex, um mit Minikube zu autorisieren.

Dies ist mein Befehl für das aws-ecr-Login, das ich jeden Tag ausführen werde, da das Token abläuft. Die folgenden Beispiele beziehen sich auf Debian 9 mit AWS ECR.

Schale

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