web-dev-qa-db-fra.com

Accédez au registre de conteneurs google sans le client gcloud

Je souhaite lancer l'exécution de conteneurs sur un hôte docker CoreOS, mais lorsque j'essaie d'utiliser la commande docker pour extraire l'image du registre privé de conteneur Google ( https://cloud.google.com/tools/container- registry/ ), j’obtiens un 403. J’ai fait quelques recherches, mais je ne sais pas comment joindre l’authentification (ou où générer le paquet user + pass à utiliser avec la commande docker login).

Quelqu'un at-il eu de la chance en tirant des conteneurs privés de Google? Je ne parviens pas à installer la commande gcloud car Coreos n'est pas livré avec python, ce qui est une exigence.

docker run -p 80:80 gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403

Update: après avoir reçu les réponses de @mattmoor et @Jesse: 

La machine dont je tire est devaccess

curl -H 'Metadata-Flavor: Google' http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/scopes
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/datastore
----> https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/sqlservice.admin
https://www.googleapis.com/auth/taskqueue
https://www.googleapis.com/auth/userinfo.email

De plus, j'ai essayé d'utiliser la méthode de connexion _token

jenkins@riskjenkins:/home/andre$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' 'http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/token' | cut -d'"' -f 4)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   142  100   142    0     0  14686      0 --:--:-- --:--:-- --:--:-- 15777
jenkins@riskjenkins:/home/andre$ echo $ACCESS_TOKEN
**************(redacted, but looks valid)
jenkins@riskjenkins:/home/andre$ docker login -e [email protected] -u _token -p $ACCESS_TOKEN http://gcr.io
Login Succeeded
jenkins@riskjenkins:/home/andre$ docker run gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403
28
Andre

Le schéma d'authentification de Google Container Registry consiste à utiliser simplement:

username: '_token'
password: {oauth access token}

Sur Google Compute Engine, vous pouvez vous connecter sans gcloud avec:

$ METADATA=http://metadata.google.internal./computeMetadata/v1
$ SVC_ACCT=$METADATA/instance/service-accounts/default
$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token \
    | cut -d'"' -f 4)
$ docker login -e [email protected] -u '_token' -p $ACCESS_TOKEN https://gcr.io

Mise à jour sur {asia, eu, us, b} .gcr.io

Pour accéder à un référentiel hébergé dans un référentiel localisé, vous devez vous connecter au nom d’hôte approprié dans la commande docker login ci-dessus.

Mise à jour sur les citations autour de _token

À partir de la version 1.8 de docker, la connexion à docker requiert que l'option -u soit dans qoutes ou commence par une lettre.

Quelques conseils de diagnostic ...

Vérifiez que vous avez la portée Cloud Storage via:

$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/scopes
...
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/devstorage.read_only
...

NOTE: "docker pull" nécessite "read_only", mais "docker Push" nécessite "read_write".

Pour permettre à ce robot d'accéder à un compartiment dans un autre projet, plusieurs étapes sont nécessaires.

Tout d’abord, recherchez l’identité du compte de service VM (autrement dit robot) via:

$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/email
[email protected]

Ensuite, trois listes de contrôle d'accès importantes doivent être mises à jour:

1) Bucket ACL (nécessaire pour répertorier les objets, etc.)

PROJECT_ID=correct-answer-42
[email protected]
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com

2) Bucket Default ACL (modèle pour la future # 3)

gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com

3) ACL d'objets (nécessaire uniquement lorsque le compartiment n'est pas vide)

gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com

Une partie de la raison pour laquelle cela ne figure pas encore dans notre documentation officielle est que nous voulons une meilleure histoire de haut niveau, mais nous respectons les ACL de GCS.

44
mattmoor

Les réponses présentées ici concernent l’accès au menu fixe à partir d’une instance de Google Compute Engine.

Si vous souhaitez utiliser le registre de conteneurs Google sur une machine ne se trouvant pas dans Google Compute Engine (localement) à l'aide de Vanilla docker, vous pouvez suivez les instructions de Google .

Les deux méthodes principales utilisent un jeton d'accès ou un fichier de clé JSON.

Notez que _token et _json_key sont les valeurs réelles fournies pour le nom d'utilisateur (-u)}

Jeton d'accès

$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io

Fichier clé JSON

$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io

Pour créer un fichier de clé, vous pouvez suivre ces instructions:

  1. Ouvrez la page Informations d'identification.
  2. Pour configurer un nouveau compte de service, procédez comme suit:
    • Cliquez sur Ajouter les informations d'identification> Compte de service.
    • Choisissez si vous souhaitez télécharger la clé publique/privée du compte de service en tant que fichier P12 standard ou en tant que fichier JSON pouvant être chargé par une bibliothèque cliente Google API.
    • Votre nouvelle paire de clés publique/privée est générée et téléchargée sur votre ordinateur. c'est la seule copie de cette clé. Vous êtes responsable de le stocker en toute sécurité.

Vous pouvez consulter la documentation de Google sur la génération d'un fichier de clé ici .

18
anthonator

Lorsque vous avez créé votre VM, lui avez-vous donné les étendues nécessaires pour pouvoir lire dans le registre?

les instances de calcul gcloud créent INSTANCE\ --scopes https://www.googleapis.com/auth/devstorage.read_write

Si vous l'avez fait, aucune autre authentification n'est requise.

1
Jesse

Il existe un fichier officiel Google Container Registry Auth Plugin publié. Vous pouvez l’essayer et laisser des commentaires/signaler des problèmes.

0
Wei