← 문제 라이브러리
K8s 입문 K8S 004 · 17분

운영 네임스페이스에서만 ImagePullBackOff: 프라이빗 레지스트리 401

새 결제 워커를 사내 프라이빗 레지스트리(registry.acme.dev)에서 받아 배포합니다.

검수된 문제무료
시나리오

새 결제 워커를 사내 프라이빗 레지스트리(registry.acme.dev)에서 받아 배포합니다. 스테이징 네임스페이스에서는 잘 떴는데, 같은 매니페스트를 운영 네임스페이스(prod)에 적용하자 파드가 ImagePullBackOff에 빠졌습니다. 담당자는 이미지 태그가 틀렸다며 CI 로그에서 태그를 다시 확인하고 있습니다. 스테이징에는 반년 전에 레지스트리 자격 증명 시크릿을 손으로 만들어 두었습니다. 결제 워커가 뜨지 않아 오늘 들어온 결제 건의 정산 처리가 멈춰 있습니다.

단서
kubectl -n prod get pods ; describe (이벤트 일부)
NAME                          READY   STATUS             RESTARTS
pay-worker-6f8d9c7b5-kx2pq    0/1     ImagePullBackOff   0

Warning  Failed   kubelet  Failed to pull image "registry.acme.dev/pay/worker:1.4.2": failed to authorize: 401 Unauthorized
Normal   BackOff  kubelet  Back-off pulling image "registry.acme.dev/pay/worker:1.4.2"
배포 매니페스트 (일부)
spec:
  imagePullSecrets:
    - name: regcred
  containers:
    - name: worker
      image: registry.acme.dev/pay/worker:1.4.2
시크릿 확인
$ kubectl -n staging get secret regcred
NAME      TYPE                             DATA   AGE
regcred   kubernetes.io/dockerconfigjson   1      183d

$ kubectl -n prod get secret regcred
Error from server (NotFound): secrets "regcred" not found

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 이미지 태그 오류와 인증 오류의 이벤트 메시지 차이
  • 시크릿이 어느 범위(네임스페이스)에 속하는지
점검 체크리스트
  1. kubectl describe pod 의 Failed 이벤트 메시지(not found인지 401인지)
  2. 매니페스트의 imagePullSecrets 이름
  3. kubectl -n <ns> get secret <이름> 으로 그 네임스페이스에 시크릿이 있는지