Google Cloud의 다른 프로젝트에서 Docker 이미지를 가져오는 동안 ImagePullBackOff 오류가 발생했습니다.

Google Cloud의 다른 프로젝트에서 Docker 이미지를 가져오는 동안 ImagePullBackOff 오류가 발생했습니다.

비공개 이미지를 가져오려고 합니다.유물 등록소kubectl을 사용하여 다른 Google Cloud 프로젝트에서 실행되는 kubernetes 클러스터의 Google Cloud 저장소입니다.

kubernetes version 1.20.15-gke.1000 

이미지가 kubernetes 서비스 계정과 다른 프로젝트에 있으므로 kubernetes의 서비스 계정에는 이미 Artifactregistry.reader 및 StorageObject.viewer 권한이 부여되었습니다.

아래 yaml을 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

cloud-sql-proxy 이미지를 가져오고 컨테이너는 실행 중이지만 개인 저장소의 이미지는 가져오지 않습니다. "us-central1-docker.pkg.dev/myproject/docker-repo/test-app:v1 "

포드를 확인할 때 다음 오류가 표시됩니다.

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

누구든지 이 문제를 해결하는 방법을 말해 줄 수 있습니까?

답변1

이번 주에도 비슷한 문제가 발생했습니다. GKE와 서비스 계정이 프로젝트 A에 있고 아티팩트 레지스트리가 프로젝트 B에 있다고 가정해 보겠습니다.

  1. artifactregistry.reader프로젝트 B(A가 아님)에 역할을 부여했는지 확인하세요 .
  2. 이 역할을 올바른 서비스 계정에 부여했는지 확인하세요. 이미지를 가져오는 서비스 계정은 포드의 서비스 계정이 아닌 노드의 서비스 계정입니다. 제 경우에는 TerraForm을 통해 구성된 GKE Autopilot을 사용하고 있었습니다. Terraform 모듈의 버그로 인해 노드에서 사용하는 서비스 계정은 default(기본 컴퓨팅 서비스 계정입니다. 예: <project_number>@cloudservices.gserviceaccount.com)

명령 을 사용하면 노드 풀이 실행 중인 서비스 계정을 확인할 수 있습니다 gcloud container clusters describe ....

이게 도움이 되길 바란다!

답변2

구성에서 다른 프로젝트의 이미지 사용

이 페이지에서는 배포 관리자가 다른 프로젝트에 속한 운영체제 이미지를 사용하여 Compute Engine 가상 머신 인스턴스를 만들 수 있도록 프로젝트를 구성하는 방법을 설명합니다.

이를 사용하여 프로젝트 간 레지스트리를 업데이트할 수 있기를 바랍니다.

관련 정보