비공개 이미지를 가져오려고 합니다.유물 등록소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에 있다고 가정해 보겠습니다.
artifactregistry.reader
프로젝트 B(A가 아님)에 역할을 부여했는지 확인하세요 .- 이 역할을 올바른 서비스 계정에 부여했는지 확인하세요. 이미지를 가져오는 서비스 계정은 포드의 서비스 계정이 아닌 노드의 서비스 계정입니다. 제 경우에는 TerraForm을 통해 구성된 GKE Autopilot을 사용하고 있었습니다. Terraform 모듈의 버그로 인해 노드에서 사용하는 서비스 계정은
default
(기본 컴퓨팅 서비스 계정입니다. 예: <project_number>@cloudservices.gserviceaccount.com)
명령 을 사용하면 노드 풀이 실행 중인 서비스 계정을 확인할 수 있습니다 gcloud container clusters describe ...
.
이게 도움이 되길 바란다!
답변2
이 페이지에서는 배포 관리자가 다른 프로젝트에 속한 운영체제 이미지를 사용하여 Compute Engine 가상 머신 인스턴스를 만들 수 있도록 프로젝트를 구성하는 방법을 설명합니다.
이를 사용하여 프로젝트 간 레지스트리를 업데이트할 수 있기를 바랍니다.