ECR-자격증명-갱신기
Source: Dev.to
Private 레지스트리 인증 방법
- 각 노드에서 컨테이너 런타임을 설정 – 예를 들어, k3s는
/etc/rancher/k3s/registries.yaml파일의 존재 여부를 확인하고, 해당 설정을 containerd 구성에 포함시켜 프라이빗 레지스트리 인증을 수행합니다. - kubelet 자격 증명 제공 플러그인 사용 – kubelet이 플러그인 바이너리를 호출하도록 구성하여 레지스트리 자격 증명을 동적으로 가져옵니다.
동기
이 경우 목표는 AWS Elastic Container Registry (ECR) 에서 이미지를 풀링하면서 앞서 언급한 클러스터‑레벨 설정을 수정할 수 없는 상황을 해결하는 것이었습니다. ecr-creds-refresher 오퍼레이터는 편리한 우회 방법을 제공합니다.
사전 요구 사항
- 필요한 ECR 권한을 가진 AWS 사용자 또는 역할.
- 클러스터에서 사용할 수 있는 유효한 AWS 자격 증명 (
AWS_ACCESS_KEY_ID와AWS_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 상태가 됩니다.
필요한 수정 사항
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY를 저장하는 시크릿 생성.- ECR 인증 토큰 획득. 이것이 바로
ecr-creds-refresher가 자동화하는 작업입니다.
ecr-creds-refresher 작동 방식
- 시작 단계: 구성된 시크릿에서 AWS 자격 증명을 읽어옵니다 (시크릿은 어느 네임스페이스에 있어도 됩니다).
- 감시:
ECRPullSecret커스텀 리소스를 모니터링합니다. 생성, 업데이트, 혹은 재개 시에 다음을 수행합니다.- AWS 로부터 최신 ECR 토큰을 가져옵니다.
- 토큰을 보관하는 시크릿을 업데이트합니다.
- 커스텀 리소스에 지정된 네임스페이스의 기본
ServiceAccount를 패치합니다.
- 주기적 갱신: 정해진 간격으로 ECR 토큰을 갱신하고, 지정된 네임스페이스에 있는 모든 관련 시크릿을 업데이트합니다.
Desired namespaces는 프라이빗 ECR 레포지토리에서 이미지를 풀링하는 pod 를 실행하려는 네임스페이스를 의미합니다. 이러한 네임스페이스는 오퍼레이터의 커스텀 리소스를 통해 설정할 수 있습니다.
데모 및 저장소
- 데모:
🔄 Operator 👉 demo - 소스 코드:
ecr-creds-refresher(GitHub 저장소)