ECR-자격증명-갱신기

발행: (2025년 12월 22일 오전 04:40 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Private 레지스트리 인증 방법

  • 각 노드에서 컨테이너 런타임을 설정 – 예를 들어, k3s는 /etc/rancher/k3s/registries.yaml 파일의 존재 여부를 확인하고, 해당 설정을 containerd 구성에 포함시켜 프라이빗 레지스트리 인증을 수행합니다.
  • kubelet 자격 증명 제공 플러그인 사용 – kubelet이 플러그인 바이너리를 호출하도록 구성하여 레지스트리 자격 증명을 동적으로 가져옵니다.

동기

이 경우 목표는 AWS Elastic Container Registry (ECR) 에서 이미지를 풀링하면서 앞서 언급한 클러스터‑레벨 설정을 수정할 수 없는 상황을 해결하는 것이었습니다. ecr-creds-refresher 오퍼레이터는 편리한 우회 방법을 제공합니다.

사전 요구 사항

  1. 필요한 ECR 권한을 가진 AWS 사용자 또는 역할.
  2. 클러스터에서 사용할 수 있는 유효한 AWS 자격 증명 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 혹은 역할을 가정할 때의 임시 자격 증명)

Note: ECR 인증 토큰은 해당 IAM 주체가 접근 가능한 모든 Amazon ECR 레지스트리에 대한 접근 권한을 부여하며 12시간 동안 유효합니다.

적절한 자격 증명이 없을 때 실패하는 예시 pod

kubectl run test \
  --image=255656399702.dkr.ecr.us-east-1.amazonaws.com/os/alpine:latest \
  --image-pull-policy=Always \
  -- sleep 5

위 pod은 프라이빗 ECR 레포지토리에 인증하지 못해 ImagePullBackOff 상태가 됩니다.

필요한 수정 사항

  1. AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 를 저장하는 시크릿 생성.
  2. ECR 인증 토큰 획득. 이것이 바로 ecr-creds-refresher 가 자동화하는 작업입니다.

ecr-creds-refresher 작동 방식

  • 시작 단계: 구성된 시크릿에서 AWS 자격 증명을 읽어옵니다 (시크릿은 어느 네임스페이스에 있어도 됩니다).
  • 감시: ECRPullSecret 커스텀 리소스를 모니터링합니다. 생성, 업데이트, 혹은 재개 시에 다음을 수행합니다.
    1. AWS 로부터 최신 ECR 토큰을 가져옵니다.
    2. 토큰을 보관하는 시크릿을 업데이트합니다.
    3. 커스텀 리소스에 지정된 네임스페이스의 기본 ServiceAccount 를 패치합니다.
  • 주기적 갱신: 정해진 간격으로 ECR 토큰을 갱신하고, 지정된 네임스페이스에 있는 모든 관련 시크릿을 업데이트합니다.

Desired namespaces는 프라이빗 ECR 레포지토리에서 이미지를 풀링하는 pod 를 실행하려는 네임스페이스를 의미합니다. 이러한 네임스페이스는 오퍼레이터의 커스텀 리소스를 통해 설정할 수 있습니다.

데모 및 저장소

  • 데모: 🔄 Operator 👉 demo
  • 소스 코드: ecr-creds-refresher (GitHub 저장소)
Back to Blog

관련 글

더 보기 »