[kubernetes] podman을 통한 local image registry 구축 방법

김동완 (Joseph Kim)·2023년 5월 30일
0

kubernetes

목록 보기
3/3
post-thumbnail

포스팅 이유

외부망 통신이 가능한 환경에서는 docker hub를 비롯한 외부 hub를 통해 image pull.
하지만 폐쇄망 환경에서는 내부에 별도의 image registry를 구성해야(ex. harbor..) image pull이 가능.
폐쇄망 환경에서의 운영을 위해 podman을 통한 local image registry를 구성.


사전 준비 목록

  1. registry 이미지
  2. podman 설치용 rpm 파일

Registry 이미지 준비

외부망이 되는 환경에서 작업을 진행합니다.

## 원하는 버전이 있을경우 뒤에 tag를 수정하여 진행
$ podman pull registry
$ podman save -o registry.tar docker.io/library/registry:latest

Podman 설치

1. RPM 패키지 준비

RPM 설치방법

다음 포스트를 참고하여 podman 설치에 필요한 패키지와 디펜던시들을 외부망이 되는 환경에서 사전에 다운 받아 폐쇄망 환경으로 옮깁니다.

2. Podman rpm 설치

폐쇄망 환경에서 옮겨진 파일을 가지고 진행합니다.

## podman이라는 directory에 다운받은 rpm을 넣어둔다.
$ rpm -ivh --nodeps --force ./podman/*.rpm

local registry 구축

사전에 준비한 registry.tar 파일을 사용해 local registry를 구축합니다.

## registry 이미지 load
$ podman load -i registry.tar

# ex)
# podman run -it -d --name {registry-name} -p {image registry ip:port}:5000 --privileged -v {image 저장할 경로}:/var/lib/registry registry

## registry 컨테이너 실행
$ podman run -it -d --name registry -p 192.168.178.53:5000:5000 --privileged -v /registry:/var/lib/registry registry 

## registry 구동 확인
$ podman ps 

insecure registry 등록

local registry를 구축한 노드에서 수행합니다.

$ vi /etc/containers/registries.conf

# registries.conf 파일에서 다음 부분을 추가
ex)
[[registry]]
location = "{image registry ip:port}"
insecure = true

...
[[registry]]
location = "192.168.178.53:5000"
insecure = true
...

system에 local registry 등록

노드 재기동 이후에도 registry가 자동으로 올라가게 설정합니다.

$ podman generate systemd --name registry > /etc/systemd/system/registry.service
$ systemctl enable registry.service


마무리

  1. 폐쇄망 환경에서 혹은 내부에 image registry를 구성하여 외부 통신이 안돼도 이미지를 pull 해올 수 있게 설정할 수 있습니다.
  1. local registry에 이미지를 push하기 위해서는 image tag를 선행해야 합니다.

    ## 예시
    # podman tag docker.io/library/registry:latest {image registry ip:port}/docker.io/library/registry:latest
    
    $ podman tag docker.io/library/registry:latest 192.168.178.53:5000/docker.io/library/registry:latest
    $ podman push 192.168.178.53:5000/docker.io/library/registry:latest
profile
Kubernetes / DevOps / Git / Network / AWS / Terraform / Opensource / Java / Springboot

0개의 댓글