여러 팀과 함께 서비스를 운영하다보면 현재 사용 중인 서버가 속한 AWS Account 외에 다른 Account의 ECR에 존재하는 컨테이너 이미지를 Pull 받아야하는 경우가 있다. 이 때 해당 Account에서 ECR의 read only 권한을 가진 IAM User의 Access Key를 사용하여 로그인을 수행한 후 컨테이너 이미지를 Pull 받을 수 있다.
먼저 ~/.aws/credentials 파일에 default 또는 별도 profile을 지정하여 Access Key를 등록한다.
[ecr-readonly]
aws_access_key_id = <Access Key>
aws_secret_access_key = <Secret Key>
다음 명령으로 ECR에 로그인 한다.
aws ecr get-login-password --region ap-northeast-2 --profile ecr-readonly | docker login --username AWS --password-stdin <ACCOUNT ID>.dkr.ecr.ap-northeast-2.amazonaws.com
로그인에 성공하면 아래와 같이 ~/.docker/config.json 파일에 로그인 정보가 기록된다.
{
"auths": {
"354304228313.dkr.ecr.ap-northeast-2.amazonaws.com": {
"auth": "인증토큰"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.13 (linux)"
}
}
Kubernetes에서는 위에서 진행한 Docker Login의 인증 정보를 사용하여 Private Registry로부터 컨테이너 이미지를 Pull 받기 위해 Secret을 사용한다. 아래와 같이 Secret을 생성한다.
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=~/.docker/config.json \
--type=kubernetes.io/dockerconfigjson
Secret이 정상적으로 생성되면 아래와 같이 Deployment 또는 Pod manifest의 imagePullSecrets에 설정하여 Private Registry의 컨테이너 이미지를 Pull 할 수 있게 된다.
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: regcred
대다수의 컨테이너 이미지가 해당 인증 정보를 사용한다면 매번 imagePullSecrets을 설정하는 것이 번거로울 수 있다. 이 때는 Kubernetes의 서비스 어카운트에 imagePullSecrets를 설정하여 기본으로 해당 인증정보를 사용하도록 설정하면 편리하다.
이를 위해 먼저 현재 서비스 어카운트 정보를 확인한다.
kubectl get sa
현재 사용 중인 서비스 어카운트를 수정한다. (여기서는 서비스 어카운트명이 default)
kubectl edit sa default
아래와 같이 수정한다.
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2015-08-07T22:02:39Z
name: default
namespace: default
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge
imagePullSecrets:
- name: regcred
이 후 부터는 Deployment 나 Pod에 imagePullSecrets 설정 없이 기본으로 해당 인증을 사용할 수 있다.
'Work > 개발 노트' 카테고리의 다른 글
[Docker] Secret 사용 해보기 (0) | 2020.10.04 |
---|---|
[nginx] 정규표현식으로 패턴 매치 후 proxy pass 시 쿼리 파라미터 포함하기 (0) | 2020.09.28 |
[Go언어] embedded struct bson marshaling 시 struct 이름으로 키가 생성되는 문제 (0) | 2020.09.18 |
[Go언어] tcp로 웹 서버 구동시 tcp6로 Listen (0) | 2020.09.14 |
[Flutter] Drawer 위젯 만들어보기 (1) | 2020.09.11 |
댓글