2015-12-15 9 views
7

私は、私の個人のhub.docker.comレジストリイメージで動作させるためにKubernetesを動作させるのに苦労しています。マックOS X Yosemite 10.10.5Docker Hubをプライベートイメージで使用したKubernetes PullImageError

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"}

とベイグラント1.7.4私はここに与えられた指示に従った:私はkubectlバージョン使用しています

一言で言えばhttps://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/images.md#pre-pulling-images

を、それはあなたがにログインする必要がありますと言いますレジストリをbase64に変換すると、結果として得られる.docker/config.jsonの内容がエンコードされ、yamlドキュメントで次のように使用されます。

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

それからkubectlにフィードしてください。

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

kubectl create Dそれ:私はその後、私のポッド定義で(ここではmyregistrykeyと呼ばれる)を得られたキーを使用していました。

しかし、kubectlは、画像を取得するために失敗し続けている:Kubernetesマスター上

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

ドッカプルしかし働いていました。

私には何が欠けていますか?上記ポッド定義で

UPDATE

、私はすなわちdocker.io、レジストリのホストを指定するために省略していました。これを修正すると、次のようになります。 image: docker.io/intrinsic/authorities-backend:latest ただし、問題は解決しません。 kubectl get events -wを行うと、私を取得します。 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) 私はkubectl get secretsの下でそれを持っているように秘密が適切に、登録されている知っている: NAME TYPE DATA AGE default-token-a7s5n kubernetes.io/service-account-token 2 51m myregistrykey kubernetes.io/dockercfg 1 50m

まだ混乱して...

キャンディー

答えて

5

.docker/config.jsonの代わりに.dockercfgを参照しているため、マニュアルの内容が古くなっています。私はそれを更新します。

新しい.docker/config.json形式を使用する場合、type: kubernetes.io/.dockercfgの代わりにtype: kubernetes.io/dockerconfigjsonを設定する必要があります。

のサポートはv1.1.0で追加されたため、ご使用のサーバーでサポートされていますが、クライアント(v1.1.0より前のv1.1.0-alpha)ではサポートされていません。

type: kubernetes.io/dockerconfigjsonを使用する場合は、秘密の内容を検証する必要があります。

type: kubernetes.io/dockerconfigjsonの場合は、authsラッパーを使用します。

+0

https://github.com/kubernetes/kubernetes/pull/18777はドキュメントを修正します。あなたのレビューは大歓迎です。 –

+0

実際に、見落としのため、Kubernetesは現在 'type:kubernetes.io/dockerconfigjson'の検証を行っていません。私はこの問題を解決するためhttps://github.com/kubernetes/kubernetes/pull/18790を書きました。 –

+0

このEricのおかげで - ドキュメントは素晴らしいです。私は実際に 'nodes = $(kubectl get node -o jsonpath = '{range.items [*]。メタデータ} {。name} {end}')' ''(エラー:出力形式を取得する) jsonpath = {range.items [*]。metadata} {。name} {end} "認識されません")おそらくこれを行う方法に関する私の無知のために。もしそれがもう少し明白であったなら、それでも素晴らしいだろう。 – candide

5

ので、私は問題を解決するためにウェブを調査し、最終的にこれを見つけました:

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

スレッドの最後で、jjw27がそれを釘付けにしました。 kubernetes documentationには.dockercfg.jsonというファイルが記載されていますが、その内容はbase64でエンコードする必要があります。このファイルには2つの問題は、実際にあります。

  1. それは実際には別のファイルにモーフィングのように見える、すなわち.docker/config.jsonこのファイルの認証情報は、あなたが取り除くために必要があり、追加authsオブジェクトによってラップさ
  2. の。jjw27

    を引用

は動作しませんでした:

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

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

Googleは、このドキュメントを更新してください!

Kubernetes devs#2へのメッセージ:また、誤った形式のbase64でコード化された秘密に不満を抱くことはありません。ユーザーの入力を検証し、エラーが含まれていると文句を言ってください。

関連する問題