Pod 가 ImagePullBackOff 에 걸렸다면 Kubernetes 는 애플리케이션 자체보다 이미지 pull 이 제대로 되지 않는다고 알려 주는 것입니다. 해결 경로도 대개 애플리케이션 내부가 아닙니다. image reference 실수, registry 인증, secret 누락, 혹은 cluster 가 registry 에 접근하지 못하는 문제인 경우가 많습니다.
짧게 말하면 핵심은 이것입니다. 정확한 image reference 와 pod event 부터 봐야 합니다. 가장 빠르게 해결되는 경우는 의외로 가장 단순합니다. 잘못된 image name, 잘못된 tag, 잘못된 registry path, 존재하지 않는 tag 같은 경우죠.
정확한 image reference 부터 본다
secret 이나 네트워크를 보기 전에, Kubernetes 가 정확히 어떤 이미지를 가져오려는지부터 확인해야 합니다.
즉 아래를 봐야 합니다.
- full image name
- registry hostname
- repository path
- image tag 또는 digest
- pull 관련 pod event
실제 문제는 단순한 image reference 오류인데, 바로 복잡한 인증 문제처럼 파고들다가 시간이 길어지는 경우가 많습니다.
ImagePullBackOff 는 보통 무엇을 뜻하나
실전에선 보통 아래 중 하나입니다.
- 잘못된 image name 또는 tag
- registry 인증 실패
- 빠졌거나 잘못 연결된
imagePullSecrets - 기대한 secret 를 참조하지 않는 service account
- registry 또는 네트워크 reachability 실패
핵심은 “이미지가 없다” 와 “이미지는 있지만 cluster 가 못 가져온다” 를 구분하는 것입니다.
흔한 원인
1. image name 또는 tag 가 틀렸다
tag 가 존재하지 않거나, registry path 가 틀리거나, repo name 이 조금만 어긋나도 pull 은 바로 실패합니다.
특히 이런 뒤에 자주 보입니다.
- 수동 tag 변경
- manifest 복붙
- registry 이동
2. registry 인증이 없다
private registry 는 보통 아래가 필요합니다.
imagePullSecrets- service account 연결
- node-level credential
즉 이미지 자체는 멀쩡해도 cluster 에서 접근 권한이 없을 수 있습니다.
3. network 또는 registry availability 가 깨졌다
cluster 에서 registry endpoint 로 못 나가거나, registry 자체가 간헐적으로 실패하는 경우입니다.
이쯤 오면 manifest bug 라기보다 infrastructure connectivity incident 에 가깝습니다.
4. secret 는 있는데 잘못 연결됐다
imagePullSecrets 가 아래일 수 있습니다.
- 다른 namespace 에 있다
- 잘못된 service account 에 붙어 있다
- pod 에서 전혀 참조하지 않는다
이 경우 secret 는 존재하는데 pod 는 여전히 못 쓰기 때문에 특히 헷갈립니다.
5. image pull policy 또는 rollout 가정이 틀렸다
문제가 auth 나 naming 이 아니라, 어떤 이미지가 이미 있어야 하는지, Kubernetes 가 얼마나 자주 가져오려 하는지에 대한 가정일 수도 있습니다.
rollout 이 잦거나 private registry rate limit 이 있는 환경에서 더 중요합니다.
실전 점검 순서
1. kubectl describe pod event 에서 pull error 를 본다
event 문구는 보통 실패 유형을 꽤 직접 말해 줍니다.
- not found
- unauthorized
- forbidden
- connection failure
- timeout
가장 빠른 첫 단서입니다.
2. full image name 과 tag 를 검증한다
기억에 의존하지 말고, manifest 와 실제 registry 경로를 직접 비교해야 합니다.
3. registry 가 private 인지, credential 이 필요한지 확인한다
필요하다면 pod 가 그 credential 에 도달할 수 있는 실제 경로가 있는지 봐야 합니다.
4. imagePullSecrets, service account, namespace 연결을 점검한다
“secret 는 있는데요?” 문제가 가장 많이 풀리는 단계입니다.
5. cluster 가 registry 에 실제 접근 가능한지 확인한다
naming 과 auth 가 맞다면, 그다음은 connectivity 쪽일 가능성이 큽니다.
이 시점부터는 image reference 자체보다 infra path 문제에 가깝습니다.
빠른 명령
kubectl describe pod <pod> -n <ns>
kubectl get secret -n <ns>
kubectl get sa <service-account> -n <ns> -o yaml
정확한 image pull error 와, pod 또는 service account 가 기대한 registry secret 를 실제로 참조하는지 확인하는 데 좋습니다.
ErrImagePull 상세 내용, 잘못되었거나 빠진 imagePullSecrets, 존재하지 않는 tag 또는 registry path 를 먼저 보세요.
failure mode 를 찾은 뒤 무엇을 바꾸면 좋나
tag 또는 name 이 틀렸다면
이미지 reference 를 먼저 고쳐야 합니다. 존재하지 않는 이미지는 인증을 아무리 맞춰도 안 됩니다.
auth 가 빠졌다면
올바른 namespace 의 secret 를, 올바른 pod 또는 service account 경로에 연결해야 합니다.
connectivity 가 깨졌다면
deployment typo 보다 네트워크 또는 registry availability incident 로 다뤄야 합니다.
secret 가 있는데 사용되지 않는다면
service account 또는 pod 참조 경로를 고쳐야 합니다.
rollout 가정이 틀렸다면
pull policy, tag 운영 방식, image publish discipline 을 다시 봐야 합니다.
장애 중에 던져볼 질문
이 질문이 꽤 유용합니다.
Kubernetes 가 실패하는 이유가 image reference 자체가 틀려서인가, credential 이 틀려서인가, 아니면 cluster 가 유효한 registry 에 접근하지 못해서인가?
이 구분만 해도 fix path 가 빠르게 갈립니다.
FAQ
Q. ImagePullBackOff 면 무조건 secret 문제인가
아닙니다. 잘못된 tag, repo path, registry connectivity 문제도 흔합니다.
Q. 가장 빠른 첫 단계는 무엇인가
pod event 와 실제 image reference 를 같이 보는 것입니다.
Q. secret 가 있으면 항상 pull 돼야 하나
아닙니다. 올바른 namespace 에 있어야 하고, 올바르게 연결돼 있어야 합니다.
Q. 이건 앱 버그인가
보통은 아닙니다. image, registry, cluster access 쪽 문제인 경우가 많습니다.
Read Next
- image 는 받아 오지만 시작 직후 실패한다면 Kubernetes CrashLoopBackOff 를 이어서 보세요.
- scheduling 이나 storage 문제부터 있다면 Kubernetes Pod Pending 과 비교해 보세요.
- 전체 인프라 글 흐름은 Infra 카테고리 에서 이어 볼 수 있습니다.
Related Posts
Sources:
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.
먼저 읽어볼 가이드
검색 유입이 많은 핵심 글부터 이어서 보세요.
- 미들웨어 트러블슈팅 가이드: Redis vs RabbitMQ vs Kafka 개발자를 위한 미들웨어 트러블슈팅 허브 글입니다. Redis, RabbitMQ, Kafka 중 어떤 증상부터 먼저 봐야 하는지와 어떤 문제 패턴이 각 시스템에 가까운지 정리합니다.
- Kubernetes CrashLoopBackOff: 먼저 볼 것들 startup failure, probe, config, resource limit 관점에서 CrashLoopBackOff를 어떻게 나눠서 봐야 하는지 정리한 가이드입니다.
- Kafka consumer lag가 계속 늘 때: 트러블슈팅 가이드 Kafka consumer lag가 계속 늘어날 때 무엇부터 봐야 하는지 정리합니다. poll 주기, 처리 속도, rebalance, consumer 설정까지 실전 기준으로 다룹니다.
- Kafka Rebalancing Too Often 가이드 Kafka consumer group에서 rebalance가 너무 자주 일어날 때 membership flapping, poll timing, protocol, assignment churn을 어떤 순서로 봐야 하는지 설명하는 실전 가이드입니다.
- Docker container가 계속 재시작될 때: 먼저 확인할 것들 exit code, command failure, environment mistake, health check 관점에서 Docker restart loop를 푸는 실전 가이드입니다.
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.