본문 바로가기

Micro Service Architecture/Harbor

[Harbor] 설치 및 LDAP 연동, 이미지 Push/Pull 해보기

반응형

harbor는 private container image registry이다.

harbor를 docker로 배포하고 계정 인증(LDAP)이나 기타 사항에 대한 내용을 생각나는 대로 정리해보고자 한다.

 

환경

Rocky Linux 9

Harbor 2.12.2

 

Docker 설치

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

systemctl enable docker
systemctl start docker

 

Docker-compose 설치

curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

 

Harbor 다운로드

wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
tar zxvf harbor-offline-installer-v2.12.2.tgz 
cd harbor

 

Harbor.yml 수정

hostname에 접근할 도메인이나 IP주소를 입력한다.

http로 구성하기 위해 https 부분은 주석처리 한다.

admin 계정의 초기 password를 입력한다.

cp -arf harbor.yml.tmpl harbor.yml

vim harbor.yml
hostname: harbor.test.com

# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path

max_open_conns: 1024
harbor_admin_password: Harbor12345

 

Harbor 설치

취약점 스캐너인 trivy 도 같이 설치한다.

# 설치하기 전에
./prepare --with-trivy

# 설치
./install.sh --with-trivy

설치가 완료되면 docker-compose 파일이 생성된다.

ls -al
...
-rw-r--r-- 1 root root      6562 Jan 24 11:49 docker-compose.yml
...

 

Harbor 이미지 확인

docker-compose -f docker-compose.yml ps

      Name                     Command                  State                      Ports                
--------------------------------------------------------------------------------------------------------
harbor-core         /harbor/entrypoint.sh            Up (healthy)                                       
harbor-db           /docker-entrypoint.sh 14 15      Up (healthy)                                       
harbor-jobservice   /harbor/entrypoint.sh            Up (healthy)                                       
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp           
harbor-portal       nginx -g daemon off;             Up (healthy)                                       
nginx               nginx -g daemon off;             Up (healthy)   0.0.0.0:80->8080/tcp,:::80->8080/tcp
redis               redis-server /etc/redis.conf     Up (healthy)                                       
registry            /home/harbor/entrypoint.sh       Up (healthy)                                       
registryctl         /home/harbor/start.sh            Up (healthy)                                       
trivy-adapter       /home/scanner/entrypoint.sh      Up (healthy)

 

Http 접속을 위한 Docker 설정 

vim /etc/docker/daemon.json 

{    "insecure-registries" : ["harbor.test.com"]
}

# docker 재시작
systemctl restart docker

 

Harbor LDAP 연동하기

harbor.yml 에서 설정한 admin 패스워드를 사용하여 Harbor GUI 로그인한다.

관리 - 설정 - 인증 에서 인증모드 LDAP에 대한 설정을 한다.

AD에서 harbor에 대한 그룹을 생성하고 해당 그룹에 속한 사용자만 접속이 허용되도록 필터 설정한다.

&(objectCategory=User)(memberOf=cn=harbor,DC=test,DC=com)

참고 : 데이터베이스 사용자가 1명 이상 있는 상태에서는 다른 인증 모드로 변경이 되지 않는다. 사용자를 모두 삭제해야만 다른 인증모드로 변경이 가능해 진다.

 

Harbor 프로젝트 생성

프로젝트 - 새프로젝트 에서 test라는 이름으로 비공개 프로젝트를 생성한다.

 

Docker 이미지 Push/Pull

test 프로젝트를 클릭하고 들어가면 푸시 명령어를 볼수 있다.

위 내용대로 일단 Docker에 로그인 하기 위해 robot 계정을 생성한다.

robot 계정은 이미지 Push를 위한 CI 툴 등에서 사용 할때 적합하다.

프로젝트 - test - 로봇계정 - 새로봇계정 에서 test-robot라는 이름으로 만료가 없는 계정을 생성한다.

테스트를 위해 모든 권한을 준다.
생성 된 계정은 잘 보관하도록 한다.

Robot 계정을 이용하여 Docker 로그인한다.

robot\$test+test-robot 에서 문자처리를 위해 $앞에  \를 추가한다.
docker login harbor.test.com -u robot\$test+test-robot -p x3IYNoNWoClQdLTq9R6feLvQqi2wABHB

 

이미지 tag 후 push/pull 한다.

# push
docker tag nginx:latest harbor.test.com/test/nginx:0.0.1
docker push harbor.test.com/test/nginx:0.0.1

# pull
docker pull harbor.test.com/test/nginx:0.0.1

 

 

[참고] Docker 토막 지식

# 서비스 중지
docker-compose -f docker-compose.yml stop

# 서비스 시작
docker-compose -f docker-compose.yml start

# 서비스 중지 및 삭제
docker-compose -f docker-compose.yml down

# 관련 리소스 삭제
docker-compose down --rmi all --volumes --remove-orphans

# 사용되지 않는 모든 이미지 삭제
docker image prune -a 

# 사용되지 않는 모든 볼륨 삭제
docker volume prune

모든 중지된 컨테이너 삭제
docker container prune

 

 

반응형