SLASH 기술 블로그

Kubernetes에서 GitHub Container Registry 사용 시 주의점 본문

인프라/쿠버네티스

Kubernetes에서 GitHub Container Registry 사용 시 주의점

SLASH 2021. 5. 10. 15:09
반응형

GitHub Container Registry가 생기고 나서 나처럼 간단하게 테스트용으로 사용해보려는 사람들이 있을 것 같은데, 사용하면서 몇 가지 주의해야할 점들이 있어서 간단하게 정리해보았다. (짧음)

 

GitHub pacakge의 public 설정

GHCR은 이미지를 업로드하면 기본적으로 private 상태가 된다. private 이미지의 경우 무료로 사용하면 용량이나 data transfer 제한이 있기 때문에, 테스트용으로 사용하는 이미지라면 public으로 해두는 게 좋다.

 

[GitHub 프로필] - [Packages] 탭에 들어가면 내가 올려둔 패키지 목록이 나오는데, 원하는 패키지를 클릭하고 오른쪽에 작게 위치한 [Package settings]를 누르면 패키지의 visibility를 설정할 수 있다.

Package settings

 

Kubernetes Deployment의 imagePullSecrets 설정

위처럼 public으로 설정하지 않고 private으로 사용할 경우 쿠버네티스에서 이미지를 사용하기 위해서접근하기 위해서는 별도의 설정이 필요하다. Kubernetes 공식 문서에서 권장하는 방법인 secret을 사용해보자.

 

우선 쿠버네티스에서 비밀번호, SSL 인증 등에 사용할 수 있는 Secret을 만든다. docker-registry secret은 도커 레지스트리를 식별하기 위한 타입의 secret이다. 다음과 같이 생성할 수 있다.

$ kubectl -n <namespace> create secret docker-registry <secret-name> \
    --docker-server=ghcr.io \
    --docker-username=<username> \
    --docker-password=<personal-access-token> \
    --docker-email=<email>

 

이후 Deployment의 컨테이너 스펙에 아래와 같이 imagePullSecrets 섹션을 추가하자. 이전에 만들었던 secret의 이름이 ghcr-turastory라면 다음과 같이 설정하면 된다.

spec:
  containers: ...
  imagePullSecrets:
    - name: ghcr-turastory

private 저장소에 올라와 있는 이미지들은 모두 이와 같은 방법으로 처리할 수 있다.

 

Service Account를 통해서 private registry 관리하기

쿠버네티스의 모든 네임스페이스는 기본적으로 default라는 이름의 service account를 가지고 있다. 자세한 내용은 공식 문서를 참고하면 좋을 것 같고, 여기서는 서비스 어카운트로 imagePullSecrets 설정을 각 컨테이너별로 하지 않고 네임스페이스에 대해 설정할 수 있는 방법을 알아보자.

 

쿠버네티스의 모든 네임스페이스에는 기본적으로 default라는 이름을 가진 서비스 어카운트가 존재한다.

$ kubectl get serviceaccounts
NAME      SECRETS   AGE
default   1         40h

 

첫 번째 방법은 patch를 통해서 서비스 어카운트를 수정하는 것이다. -p 옵션 뒤에 JSON 형태로 변경하고자 하는 내용을 입력하면 된다.

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "ghcr-turastory"}]}'

 

이 방법이 마음에 들지 않는다면, serviceaccount 정보를 YAML 파일로 추출한 다음 수정해도 된다.

$ kubectl get serviceaccounts default -o yaml > ./sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata: ...
imagePullSecrets:
  - name: ghcr-turastory

그 외에 주의할 점이라고 한다면 private 레지스트리의 제한이 생각보다 낮아서 사용할 때 신경을 좀 써야 한다는 점..? 확실히 별도의 설정이나 레포지터리를 만들 필요 없이 push하기만 하면 되서 편한 것 같다.

 

@turastory

반응형
Comments