2015-12-15 13 views
7

Ich habe Schwierigkeiten, Kubernetes mit meinem privaten Hub.docker.com Registry Image arbeiten zu lassen.Kubernetes PullImageError mit Docker Hub mit einem privaten Bild

Ich verwende kubectl Version: Client Version: version.Info{Major:"1", Minor:"1+", GitVersion:"v1.1.0-alpha.0.1588+e44c8e6661c931", GitCommit:"e44c8e6661c931f7fd434911b0d3bca140e1df3a", GitTreeState:"clean"} Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}

und Vagrant 1.7.4 auf Mac OS X Yosemite 10.10.5

ich die hier aufgeführten Hinweise gefolgt: https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/images.md#pre-pulling-images

Auf den Punkt gebracht, heißt es zum Anmelde sollte Registrierung dann base64 kodieren Sie den Inhalt der resultierenden .docker/config.json, und verwenden Sie das in einem Yaml-Dokument wie folgt:

apiVersion: v1 
kind: Secret 
metadata: 
    name: myregistrykey 
data: 
    .dockercfg: eyAiYXV0aHMiOiB7ICJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOiB7ICJhdXRoIjogImFXNTBjbWx1YzJsak9tSTJVVTR5Z...h1YkBpbnRyaW5zaWMud29ybGQiIH0gfSB9Cg== 
type: kubernetes.io/dockercfg 

Dann füttern, dass zu kubectl. Ich habe dann die resultierenden Schlüssel (hier genannt myregistrykey) in meiner pod Definition:

apiVersion: v1 
kind: Pod 
metadata: 
    name: authorities-backend 
spec: 
    containers: 
    - name: authorities-backend 
     image: intrinsic/authorities-backend:latest 
    imagePullSecrets: 
    - name: myregistrykey 

und kubectl create d es.

jedoch kubectl hält andernfalls das Bild abzurufen:

[[email protected] intrinsic]# kubectl get pods 
NAME     READY  STATUS   RESTARTS AGE 
authorities-backend 0/1  PullImageError 0   7m 

Docker Zug am Kubernetes Master jedoch gearbeitet.

Was fehlt mir?

UPDATE

In der Schote Definition oben hatte ich die Registry-Host, das heißt docker.io angeben weggelassen. Es zu beheben, wird es: image: docker.io/intrinsic/authorities-backend:latest Das Problem besteht jedoch weiterhin. kubectl get events -w tun bekommt mir: 6s 0s 2 authorities-backend Pod spec.containers{authorities-backend} Failed {kubelet 10.245.1.3} Failed to pull image "docker.io/intrinsic/authorities-backend": image pull failed for docker.io/intrinsic/authorities-backend, this may be because there are no credentials on this request. details: (Error: image intrinsic/authorities-backend:latest not found) Ich kenne das Geheimnis richtig registriert wurde, wie ich es unter kubectl get secrets haben: NAME TYPE DATA AGE default-token-a7s5n kubernetes.io/service-account-token 2 51m myregistrykey kubernetes.io/dockercfg 1 50m

Immer noch verwirrt ...

Candide

Antwort

5

Die Dokumentation ist veraltet, da sie sich auf .dockercfg statt .docker/config.json bezieht. Ich werde es aktualisieren. Wenn Sie das neue Format .docker/config.json verwenden, müssen Sie type: kubernetes.io/dockerconfigjson anstelle von type: kubernetes.io/.dockercfg eingeben.

Unterstützung für type: kubernetes.io/dockerconfigjson wurde in v1.1.0 hinzugefügt, so dass es von Ihrem Server unterstützt wird, aber nicht von Ihrem Client unterstützt wird (was v1.1.0-alpha ist, das älter ist als v1.1.0).

Wenn Sie type: kubernetes.io/dockerconfigjson verwenden, sollte es Ihre geheimen Inhalte überprüfen.

Mit type: kubernetes.io/dockerconfigjson möchten Sie die auths Wrapper behalten.

+0

https://github.com/kubernetes/kubernetes/pull/18777 behebt die Dokumentation. Ihre Rezension wäre willkommen. –

+0

Aufgrund eines Versehens überprüft Kubernetes momentan nicht 'type: kubernetes.io/dockerconfigjson'. Ich schrieb https://github.com/kubernetes/kubernetes/pull/18790, um das zu beheben. –

+0

Danke für diesen Eric - die Dokumentation funktioniert super. Geringfügige Beschwerde: Ich kann 'nodes = $ (kubectl get nodes -o jsonpath = '{range.items [*] .metadaten} {. Name} {end}'' 'nicht ausführen (bekomme' error: output format' jsonpath = {range.items [*]. metadata} {. name} {end} "nicht erkannt") wahrscheinlich aufgrund meiner Unkenntnis darüber, wie dies zu tun ist. Trotzdem wäre es nett, wenn es etwas expliziter wäre. – candide

5

So Ich recherchierte ständig im Web nach einer Antwort auf mein Problem und fand schließlich folgendes:

https://github.com/kubernetes/kubernetes/issues/7954#issuecomment-115241561

Am Ende des Threads hat jjw27 es genagelt. Die kubernetes documentation erwähnt die .dockercfg.json Datei nur um zu sagen, dass der Inhalt base64-codiert werden muss. Es gibt eigentlich zwei Probleme mit dieser Datei:

  1. es sieht aus wie es in eine andere Datei verwandelt tatsächlich, dh .docker/config.json
  2. die Authentifizierungsinformationen in dieser Datei um weitere auths Objekte gewickelt ist, die Sie loswerden von.

Zitiert jjw27

Hat nicht funktioniert:

{ 
    "auths": { 
    "hub.example.com:1024": { 
     "auth": "asdf=", 
     "email": "[email protected]" 
    } 
    } 
} 

Arbeitete:

{ 
    "hub.example.com:1024": { 
    "auth": "asdf=", 
    "email": "[email protected]" 
    } 
} 

Google, benutzen Sie bitte dieses Dokument aktualisieren !!

Nachricht an Kubernetes devs # 2: Es ist auch sehr irreführend, sich nicht mit einem fehlerhaften base64-verschlüsselten Geheimnis zu beschweren. Bitte überprüfen Sie die Benutzereingaben und beschweren Sie sich, wenn sie Fehler enthalten.

Verwandte Themen