2016-04-18 2 views
0

Kubernetes docs sagen mit AWS ECR wird unterstützt, aber es funktioniert nicht für mich. Meine Knoten verfügen über eine EC2-Instanz Rolle mit all den richtigen Berechtigungen verbunden sind, aber kubectl run debug1 -i --tty --restart=Never --image=672129611065.dkr.ecr.us-west-2.amazonaws.com/debug:v2 Ergebnisse in failed to "StartContainer" for "debug1" with ErrImagePull: "Authentication is required."Kubernetes Authentifizierung Probleme ziehen ECR Bilder

Einzelheiten

Die Fälle haben alle eine Rolle zugeordnet ist, und diese Rolle hat diese Politik angehängt:

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Action": [ 
      "ecr:GetAuthorizationToken", 
      "ecr:BatchCheckLayerAvailability", 
      "ecr:GetDownloadUrlForLayer", 
      "ecr:GetRepositoryPolicy", 
      "ecr:DescribeRepositories", 
      "ecr:ListImages", 
      "ecr:BatchGetImage" 
     ], 
     "Resource": "*" 
    }] 
} 

Und die Kubelet Logs sehen so aus:

Apr 18 19:02:12 ip-10-0-170-46 kubelet[948]: I0418 19:02:12.004611  948 provider.go:91] Refreshing cache for provider: *credentialprovider.defaultDockerConfigProvider 
Apr 18 19:02:12 ip-10-0-170-46 kubelet[948]: E0418 19:02:12.112142  948 pod_workers.go:138] Error syncing pod b21c2ba6-0593-11e6-9ec1-065c82331f7b, skipping: failed to "StartContainer" for "debug1" with ErrImagePull: "Authentication is required." 
Apr 18 19:02:27 ip-10-0-170-46 kubelet[948]: E0418 19:02:27.006329  948 pod_workers.go:138] Error syncing pod b21c2ba6-0593-11e6-9ec1-065c82331f7b, skipping: failed to "StartContainer" for "debug1" with ImagePullBackOff: "Back-off pulling image \"672129611065.dkr.ecr.us-west-2.amazonaws.com/debug:v2\"" 

Antwort

0

Ge Wenn Sie Berechtigungen für ein InstanceProfil ändern, werden sie sofort wirksam. Es muss jedoch eine Art Setup-Phase für das Kubelet geben, für die bereits die Berechtigungen festgelegt werden müssen. Ich habe meinen CloudFormation-Stack komplett gebounced, so dass der mit den neuen Berechtigungen gebootet wurde und das hat den Trick gemacht. Ich kann jetzt ECR-Bilder ohne Problem verwenden.

0

Ich denke, Sie brauchen auch das Bild Pull-Secret für ecr Bilder konfiguriert. Sie können die folgenden Links für Details referenzieren.

http://kubernetes.io/docs/user-guide/images/#specifying-imagepullsecrets-on-a-pod

http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_GetStarted.html

https://github.com/kubernetes/kubernetes/issues/499

1) Rufen Sie den Login-Befehl Docker, die Sie Ihren Docker-Client, um Ihre Registrierung authentifizieren können:

aws ecr get-Login - region us-east-1

2) Führen Sie den Docker Login Comman aus d das wurde im vorherigen Schritt zurückgegeben.

3) geheimer Docker Login gespeichert /root/.dockercfg

4) Encode Docker Konfigurationsdatei

echo $(cat /root/.dockercfg) | base64 -w 0 

5) Kopieren und Einfügen von Ergebnis zu geheimem YAML auf das alte Format basiert:

apiVersion: v1 
    kind: Secret 
    metadata: 
     name: aws-key 
     type: kubernetes.io/dockercfg 
    data: 
     .dockercfg: <YOUR_BASE64_JSON_HERE> 

6) Mit diesem AWS-Schlüssel geheim dem Bild zugreifen

apiVersion: v1 
    kind: Pod 
    metadata: 
     name: foo 
     namespace: awesomeapps 
    spec: 
     containers: 
     - name: foo 
      image: janedoe/awesomeapp:v1 
     imagePullSecrets: 
     - name: aws-key 
+4

Das Problem ist, dass ECR-Anmeldeinformationen nur für 12 Stunden funktionieren, so dass diese Lösung nur funktionieren würde, bis die Anmeldeinformationen ablaufen. –

2

Aus diesen Protokollen, vermute ich, eine von drei Dingen:

  • Sie haben die --cloud-provider=aws arg auf dem kubelet nicht bestanden.
  • Die korrekten IAM-Berechtigungen waren nicht vorhanden, als Ihr kubelet gestartet wurde. Wenn dies der Fall ist, sollte ein einfacher Bounce des Kubelet-Daemon für Sie funktionieren.
  • Sie sind auf einer k8s Version < 1.2. Obwohl dies angesichts des Datums Ihrer Frage unwahrscheinlich erscheint.
+0

Ja, es war eine Art Cloud-Provider-Flag. Ich hatte die Markierung hinzugefügt und dann ECR der Rolle hinzugefügt, die ich den Knoten zugewiesen hatte, aber es funktionierte nicht. Wie in meiner Antwort unten erwähnt, musste ich auch den CloudFormation-Stack abwerfen, da sich das Kubelet selbst nach dem Neustart mit den neuen Berechtigungen nicht neu konfigurieren würde. Es muss irgendwo Staat gerettet haben. –