Docker 환경 Harbor 프라이빗 레지스트리 설치 및 SSL 연동

💡 핵심 요약 (Executive Summary)

본 가이드는 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 다운로드

설치
bash
# 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

bash
# 정상적인 경우
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 세팅

인증기관 인증서 생성
bash
# 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
서버 인증서 생성
bash
# 개인 키 생성
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에 인증서 제공
bash
# 서버 인증서와 키를 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 재구성
bash
# 이미 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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *