yeonghoon.kim

  • 게시판
  • 갤러리

GitLab Registry PAT 만료로 이미지 Pull 실패

김영훈 2026.07.08 12:33 조회 수 : 14

GitLab Registry 인증에 쓰던 PAT 문제로 Kubernetes Pod가 이미지를 받지 못하는 상황이 생김.

증상은 ImagePullBackOff.

처음에는 Registry나 네트워크 문제처럼 보일 수 있지만, 실제로는 registry pull Secret에 들어 있던 인증 정보가 더 이상 유효하지 않은 상태였음.

Pod 상태 확인.

# Pod 상태를 확인한다.
kubectl get pods -A

문제 namespace에서 이벤트 확인.

# 이미지 pull 실패 이벤트를 확인한다.
kubectl -n <namespace> describe pod <pod-name>

확인할 것.

ImagePullBackOff
ErrImagePull
403 Forbidden
authentication required
denied
unauthorized

Registry Secret 확인.

# registry pull Secret이 존재하는지 확인한다.
kubectl -n <namespace> get secret gitlab-registry-secret

Secret이 존재해도 인증 정보가 만료되었거나 해지되었으면 image pull은 실패함.

이 경우 Secret 존재 여부만 보면 안 되고, 실제 인증 정보가 유효한지 봐야 함.

새 GitLab PAT 발급 후 registry Secret을 다시 생성.

# 새 GitLab PAT 기준으로 registry pull Secret을 다시 만든다.
kubectl -n <namespace> create secret docker-registry gitlab-registry-secret \
  --docker-server=registry.yeonghoon.kim \
  --docker-username=<gitlab-username> \
  --docker-password=<new-pat> \
  --docker-email=<email> \
  --dry-run=client -o yaml | kubectl replace -f -

SOPS로 관리하는 경우에는 평문 Secret을 그대로 남기지 않고 encrypted manifest로 갱신.

# SOPS로 암호화된 registry pull Secret을 복호화해서 반영한다.
SOPS_AGE_KEY_FILE=/home/ioniere/.config/sops/age/dgx-sops-poc-daily.agekey \
  sops -d secrets/<namespace>/gitlab-registry-secret.enc.yaml | \
  kubectl replace -f -

반영 후 Pod 재시작.

# 이미지 pull을 다시 시도하도록 Deployment를 재시작한다.
kubectl -n <namespace> rollout restart deployment/<deployment-name>

상태 확인.

# Pod가 정상적으로 이미지를 받는지 확인한다.
kubectl -n <namespace> get pods -o wide

ArgoCD 상태 확인.

# ArgoCD Application 상태를 확인한다.
kubectl -n argocd get app

정리.

ImagePullBackOff가 보인다고 바로 Registry 장애로 보면 안 됨.

이번 경우는 Registry endpoint 문제가 아니라 GitLab Registry 인증에 쓰던 PAT가 만료/해지되어 pull Secret이 더 이상 유효하지 않은 문제였음.

이후 registry pull Secret은 SOPS 관리 대상으로 두고, PAT 교체 시 Secret 갱신과 Pod 재시작까지 같이 확인하는 기준으로 정리.


  • 추천 0

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
339 yeonghoon.kim php 업그레이드 new 김영훈 2026.07.09 0
» GitLab Registry PAT 만료로 이미지 Pull 실패 김영훈 2026.07.08 14
337 Stateful과 Stateless 구분해보기 김영훈 2026.07.02 23
336 Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 김영훈 2026.06.29 19
335 OutOfSync와 Degraded 구분하기 김영훈 2026.06.28 25
334 control-plane 장애 시나리오 관찰 김영훈 2026.06.27 12
333 worker 재부팅 전 drain 절차 정리 김영훈 2026.06.26 20
332 ImagePullBackOff와 registry pull secret 누락 김영훈 2026.06.22 17
331 ArgoCD 복구 중 GitLab 접근 문제 정리 김영훈 2026.06.22 26
330 관측 스택과 앱 배포 저장소 구조 정리 김영훈 2026.06.19 23
329 SOPS Secret 복구와 ArgoCD root Application 적용 김영훈 2026.06.18 28
328 복구 런북 초반 누락 사항 정리 김영훈 2026.06.17 15
327 CoreDNS로 GitLab Registry 내부 주소 고정 김영훈 2026.06.17 19
326 ArgoCD와 GitOps 구조 준비 김영훈 2026.06.16 16
325 SOPS age로 Kubernetes Secret 암복호화 김영훈 2026.06.15 23
324 yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] 김영훈 2026.06.12 18
323 Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] 김영훈 2026.06.10 20
322 Kubernetes 기본 클러스터, ingress-nginx 설치 김영훈 2026.06.09 15
321 DGX Kubernetes 구성 계획 김영훈 2026.06.08 25
320 2026년 일본 여행(21일) 요약 김영훈 2026.06.02 17
쓰기 태그
 첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지