web-dev-qa-db-fra.com

Extraire des images de GCR dans GKE

Aujourd'hui est mon premier jour à jouer avec GCR et GKE. Excusez-moi si ma question vous semble enfantine.

J'ai donc créé un nouveau registre dans GCR. C'est privé. En utilisant la documentation this , j'ai mis la main sur mon jeton d'accès en utilisant la commande

gcloud auth print-access-token
#<MY-ACCESS_TOKEN>

Je sais que mon nom d'utilisateur est oauth2accesstoken

Sur mon ordinateur portable local lorsque j'essaie

docker login https://eu.gcr.io/v2
Username: oauth2accesstoken
Password: <MY-ACCESS_TOKEN>

Je reçois:

Login Successful

Alors maintenant, il est temps de créer un docker-registry secret à Kubernetes.

J'ai exécuté la commande ci-dessous:

kubectl create secret docker-registry eu-gcr-io-registry --docker-server='https://eu.gcr.io/v2' --docker-username='oauth2accesstoken' --docker-password='<MY-ACCESS_TOKEN>' --docker-email='<MY_EMAIL>'

Et puis ma définition de pod ressemble à:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest
    ports:
    - containerPort: 8090
  imagePullSecrets:
  - name: eu-gcr-io-registry

Mais quand je tourne le pod, j'obtiens l'ERREUR:

Warning  Failed                 4m (x4 over 6m)   kubelet, node-3  Failed to pull image "eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest": rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

J'ai vérifié mes secrets en vérifiant le fichier YAML et en faisant un base64 --decode sur le .dockerconfigjson et c'est correct.

Alors qu'est-ce que j'ai raté ici?

8
user4889345

Si votre cluster GKE et votre registre GCR sont dans le même projet: Vous n'avez pas besoin de configurer l'authentification. Les clusters GKE sont autorisés à extraire des registres GCR privés dans le même projet sans configuration. (Vous êtes très probablement ça!)


Si votre cluster GKE et votre registre GCR sont dans différents projets GCP: Suivez ces instructions pour donner un "compte de service" à votre accès au cluster GKE pour lire des images privées dans votre cluster GCR: https://cloud.google.com/container-registry/docs/access-control#granting_users_and_other_projects_access_to_a_registry

En bref, cela peut être fait par:

gsutil iam ch  serviceAccount:[PROJECT_NUMBER][email protected]:objectViewer gs://[BUCKET_NAME]

[BUCKET_NAME] est le compartiment GCS stockant vos images GCR (comme artifacts.[PROJECT-ID].appspot.com) et [PROJECT_NUMBER] est l'ID de projet GCP numérique hébergeant votre cluster GKE.

14
AhmetB - Google