본 가이드는 docker harbor 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
폐쇄망
준비
ubuntu 20.04
> 💡
docker
– containerd.io/now 1.6.6-1 amd64 \[installed,local\]
– docker-ce-cli/now 5:19.03.15\~3-0\~ubuntu-focal amd64 \[installed,local\]
– docker-ce/now 5:19.03.15\~3-0\~ubuntu-focal amd64 \[installed,local\]
– docker-compose-plugin/now 2.6.0\~ubuntu-focal amd64 \[installed,local\]
– libseccomp2/now 2.5.1-1ubuntu1\~20.04.2 amd64 \[installed,local\]
docker-compose
– docker-compose version 1.21.2, build a133471
nfs-common
– nfs-common/now 1:1.3.4-2.5ubuntu3.4 amd64 \[installed,local\]
pool
> 💡
[https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/](https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/)
https://download.docker.com/linux/\{\{os\}\}/dist/\{\{os-ver\}\}/pool/stable/\{\{architecture\}\}/
— 아래항목 다운로드
– containerd.io\_1.6.6-1\_amd64.deb
– docker-ce-cli\_19.03.15\~3-0\~ubuntu-focal\_amd64.deb
– docker-ce\_19.03.15\~3-0\~ubuntu-focal\_amd64.deb
– docker-compose-plugin\_2.6.0\~ubuntu-focal\_amd64.deb
[http://archive.ubuntu.com/ubuntu/pool/main/libs/libseccomp/libseccomp2\_2.5.1-1ubuntu1\~20.04.2\_amd64.deb](http://archive.ubuntu.com/ubuntu/pool/main/libs/libseccomp/libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb)
— containerd 종속성 다운로드
[http://archive.ubuntu.com/ubuntu/pool/universe/d/docker-compose/](http://archive.ubuntu.com/ubuntu/pool/universe/d/docker-compose/)
— docker-compose 다운로드
설치
# docker.io package 설치
dpkg -i *.deb
# nfs-common package 설치
dpkg -i *.deb
# docker-compose 설치
cp ./docker-compose /usr/bin/
# 데이터경로 지정
mkdir /${TARGET_PATH} # /data
# NFS 마운트
mount -t nfs ${NFS_SERVER_IP}:/${TARGET_NFS_VOLUME} /${TARGET_PATH}
mount -l | grep data
# 가상머신 재기동 해도 NFS 자동 마운트
sudo vi /etc/fstab
--- # 아래 내용 추가
${NFS_SERVER_IP}:/${TARGET_NFS_VOLUME} /${TARGET_PATH} nfs defaults 0
---
# harbor 압축해제
tar xzvf harbor-offline-installer-v2.1.0.tgz
# harbor.yml 작성
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
<--- # 아래 내용 변경
hostname: $harbor_domain
#https
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
harbor_admin_password: $password
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: $password
# The default data volume
data_volume: /data
...
externalHost 변경( 프록시 사용시 )
--->
# harbor 설치
chmod +x install.sh
./install.sh
# insecure 지정
vi /etc/docker/daemon.json
<---
{
"insecure-registries" : ["$domain"]
}
--->
# docker 재시작
systemctl restart docker
docker info | grep insecure
# host 등록 -- haproxy 등록 필요
vi /etc/hosts
{ haproxy host } $harbor_domain
# login
docker login $harbor_domain -u admin -p $password
# 정상적인 경우
systemctl status docker
>>>
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-01-11 11:16:41 UTC; 1min 3s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 19273 (dockerd)
Tasks: 44
Memory: 53.8M
CGroup: /system.slice/docker.service
├─19273 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
├─19428 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 1514 -container-ip 172.18.0.2 -container-port 10514
└─19642 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.10 -container-port 8080
<<<
https 세팅
인증기관 인증서 생성
# CA 인증서 개인키 생성
openssl genrsa -out ca.key 4096
# CA 인증서 생성
# -subj조직을 반영 하도록 옵션의 값을 조정 하십시오. FQDN을 사용하여 하버 호스트를 연결하는 경우 일반 이름( CN) 특성으로 지정해야 합니다.
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=$domain" \
-key ca.key \
-out ca.crt
서버 인증서 생성
# 개인 키 생성
openssl genrsa -out yourdomain.com.key 4096
# 인증서 서명 요청(CSR) 생성
# -subj조직을 반영 하도록 옵션의 값을 조정 하십시오. FQDN을 사용하여 Harbor 호스트를 연결하는 경우 FQDN을 일반 이름( CN) 속성으로 지정하고 키 및 CSR 파일 이름에 사용해야 합니다.
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=$domain" \
-key yourdomain.com.key \
-out yourdomain.com.csr
# x509 v3 확장 파일을 생성
# FQDN 또는 IP 주소를 사용하여 Harbor 호스트에 연결하는지 여부에 관계없이 SAN(주체 대체 이름) 및 x509 v3을 준수하는 Harbor 호스트에 대한 인증서를 생성할 수 있도록 이 파일을 만들어야 합니다. 확장 요구 사항. DNS도메인을 반영 하도록 항목을 바꿉니다 .
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
# 파일을 사용 v3.ext하여 Harbor 호스트에 대한 인증서를 생성하십시오.
# yourdomain.comCRS 및 CRT 파일 이름을 Harbor 호스트 이름으로 바꿉니다 .
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
Harbor 및 Docker에 인증서 제공
# 서버 인증서와 키를 Harbor 호스트의 인증서 폴더에 복사
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
# Docker에서 사용할 수 있도록 로 변환
# Docker 데몬은 .crt파일을 CA 인증서로, .cert파일을 클라이언트 인증서로 해석합니다.
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
# 서버 인증서, 키 및 CA 파일을 Harbor 호스트의 Docker 인증서 폴더에 복사합니다. 먼저 적절한 폴더를 만들어야 합니다.
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/
# nginx기본 포트 443을 다른 포트에 매핑한 경우 폴더 /etc/docker/certs.d/yourdomain.com:port또는 /etc/docker/certs.d/harbor_IP:port.
# Docker 엔진을 다시 시작
systemctl restart docker
#사용자 지정 인증서 사용 구성
/etc/docker/certs.d/
└── yourdomain.com:port
├── yourdomain.com.cert <-- Server certificate signed by CA
├── yourdomain.com.key <-- Server key signed by CA
└── ca.crt <-- Certificate authority that signed the registry certificate
Harbor 재구성
# 이미 HTTP로 Harbor를 배포했으며 HTTPS를 사용하도록 재구성하려는 경우 다음 단계를 수행하십시오.
# prepare스크립트를 실행하여 HTTPS를 활성화하십시오.
# Harbor는 nginx인스턴스를 모든 서비스에 대한 리버스 프록시로 사용합니다. prepare스크립트를 사용하여 HTTPS를 사용하도록 구성 합니다 nginx. 스크립트 prepare와 동일한 수준의 Harbour 설치 프로그램 번들에 있습니다 .install.sh
./prepare
# Harbor가 실행 중인 경우 기존 인스턴스를 중지하고 제거하십시오.
# 이미지 데이터는 파일 시스템에 남아 있으므로 데이터가 손실되지 않습니다.
docker-compose down -v
# 하버 재시작
docker-compose up -d
HTTPS 연결 확인
Harbor에 대해 HTTPS를 설정한 후 다음 단계를 수행하여 HTTPS 연결을 확인할 수 있습니다.
-
브라우저를 열고 https://yourdomain.com 을 입력 합니다. Harbor 인터페이스가 표시되어야 합니다.
일부 브라우저는 인증 기관(CA)을 알 수 없다는 경고를 표시할 수 있습니다. 이는 신뢰할 수 있는 타사 CA가 아닌 자체 서명된 CA를 사용할 때 발생합니다. CA를 브라우저로 가져와서 경고를 제거할 수 있습니다.
-
Docker 데몬을 실행하는 시스템에서
/etc/docker/daemon.json파일을 확인하여 https://yourdomain.cominsecure-registry에 대한 옵션이 설정되어 있지 않은지 확인하십시오 . - Docker 클라이언트에서 Harbor에 로그인합니다.
docker login yourdomain.com
443 포트를 다른 포트에 매핑한 경우 명령 nginx에 포트를 추가합니다 .login
docker login yourdomain.com:port
Leave a Reply