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?
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]
où [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.