Error de ImagePullBackOff al extraer la imagen de la ventana acoplable en un proyecto diferente en Google Cloud

Error de ImagePullBackOff al extraer la imagen de la ventana acoplable en un proyecto diferente en Google Cloud

Estoy intentando sacar una imagen privada deRegistro de artefactosrepositorio en Google Cloud desde un clúster de Kubernetes que se ejecuta en un proyecto de Google Cloud diferente usando kubectl.

kubernetes version 1.20.15-gke.1000 

A la cuenta de servicio de Kubernetes ya se le han otorgado permisos artefactoregistry.reader y Storageobject.viewer ya que la imagen está en un proyecto diferente al de la cuenta de servicio de Kubernetes.

Aplico el siguiente yaml al comando kubectl.

kubectl apply -f proxy_with_workload_identity.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
spec:
  selector:
    matchLabels:
      app: app-project
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: app-project
    spec:
      containers:
        - env:
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  key: username
                  name: db-credentials
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  key: password
                  name: db-credentials
            - name: DB_NAME
              value: postgres
          image: "us-central1-docker.pkg.dev/myproject/docker-repo/test-app:v1" 
          name: app-project
          ports:
            - containerPort: 9376
              protocol: TCP
        - command:
            - /cloud_sql_proxy 
            - "-instances=demo-dev:us-central1:1-sql-1=tcp:5432"
          image: "gcr.io/cloudsql-docker/gce-proxy:latest"
          name: cloud-sql-proxy
          resources:
            requests:
              cpu: 200m
              memory: 32Mi
          securityContext:
            runAsNonRoot: true
      serviceAccountName: testapp

La imagen cloud-sql-proxy se está extrayendo y el contenedor se está ejecutando, pero la imagen en el repositorio privado no se extrae "us-central1-docker.pkg.dev/myproject/docker-repo/test-app:v1 "

cuando reviso los pods me muestra este error:

code = Unknown desc = failed to pull and unpack image "us-central1-docker.pkg.dev/myproject/docker-repo/test-app:v1:v1": failed to resolve reference "us-central1-docker.pkg.dev/myproject/docker-repo/test-app:v1": failed to authorize: failed to fetch oauth token: unexpected status: 403 Forbidden

¿Alguien puede decirme cómo solucionar esto?

Respuesta1

Tuve un problema similar esta semana. Supongamos que su GKE y su cuenta de servicio están en el proyecto A y que el registro de artefactos está en el proyecto B.

  1. Asegúrate de asignar el artifactregistry.readerrol en el proyecto B (no en el A)
  2. Asegúrese de asignar esta función a la cuenta de servicio correcta. La cuenta de servicio que extrae la imagen es la cuenta de servicio del Nodo, no la cuenta de servicio del Pod. En mi caso, estaba usando GKE Autopilot que se configuró a través de TerraForm. Debido a un error en el módulo Terraform, la cuenta de servicio utilizada por el nodo es default(que es la cuenta de servicio informático predeterminada, por ejemplo, <número_proyecto>@cloudservices.gserviceaccount.com)

Puede verificar qué cuenta de servicio está ejecutando su grupo de nodos con el gcloud container clusters describe ...comando.

¡Espero que esto ayude!

Respuesta2

Usar imágenes de otros proyectos en su configuración

Esta página describe cómo configurar su proyecto para que Deployment Manager pueda crear instancias de máquinas virtuales de Compute Engine usando imágenes del sistema operativo que pertenecen a otro proyecto.

Espero que puedas usar esto para actualizar el registro entre proyectos.

información relacionada