INTRO
RHOCP(OpenShift) 테스트를 위해 최소한의 스펙으로 VM을 준비하였습니다.
Machine | OS | CPU (vCPU) | RAM (GB) | Storage (GB) | Container Tool |
harbor | RHEL 8.8 | 2 | 4 | 100 + NFS | Docker |
bastion1 | RHEL 8.8 | 2 | 4 | 100 | Podman |
bastion2 | RHEL 8.8 | 2 | 4 | 100 | Podman |
bootstrap | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
master1 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
master2 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
master3 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
worker1 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
worker2 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
Private registry로 Harbor를 선택한 이유는 Docker Registry를 구축하여 간단하게 사용하는 방법도 있지만 사용자 친화적인 웹 페이지를 사용하고 싶어서 Harbor를 선택하게 되었습니다.
☞ Private Registry: 개인 서버에 구축하는 이미지 저장소(Image Registry)
Harbor 설치 전 확인사항
Harbor 설치를 위해 필요한 최소 사양은 아래와 같습니다.
Docker Compose를 사용해서 컨테이너에서 운영되므로 OS는 Docker 17.06.0을 설치할 수 있는 환경이라면 크게 문제되지 않을 것 같습니다.
Chart Museum 기능을 사용하기 위해 Latest Version인 2.8.0이 아닌 2.7.0을 설치하였습니다.
Resource | Minimum | Recommended |
CPU | 2 CPU | 4 CPU |
MEM | 4 GB | 8 GB |
Disk | 40 GB | 160 GB |
Docker engine | 17.06.0 이상 | |
Docker Compose | v1.18.0 이상 or v2 | |
OpenSSL | 최신 버전 선호 (크게 상관 없음) |
Harbor 오프라인 설치 전 사전 작업 (Docker Local DNF Repository 구축)
CentOS 계열의 Docker-CE 레포를 추가합니다. (외부망과 통신이 되는 서버)
# cat << EOF >> /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF
reposync 명령을 통해 Repository를 서버에 다운로드 받습니다. (외부망과 통신이 되는 서버)
# reposync -p /root/repo/docker --download-metadata --repo=docker-ce-stable
-p: RPM 다운로드 경로, --download-metadata: Repository의 metadata 다운로드, --repo: 다운로드할 Repo ID
정상적으로 다운로드가 되면 다운로드한 Repository를 DNF Repo 서버에 옮겨줍니다. (외부망과 통신이 되는 서버)
# rsync -az /root/repo/docker bastion1:/data/repo
Harbor 서버에 DNF Repository 설정합니다. (Harbor 서버)
# cat << EOF >> /etc/yum.repos.d/docker-ce.repo
[docker-ce]
name=docker-ce
baseurl=repo.example.com
gpgcheck=0
enabled=1
EOF
# dnf repolist -vv
Harbor Offline Installation (Harbor 오프라인 설치)
Docker를 설치합니다.
# dnf install docker-ce docker-ce-cli
Docker Compose를 업로드한 후 명령어를 편하게 사용하기 위해서 "/usr/local/bin"으로 옮깁니다.
# chmod +x docker-compose-linux-x86_64 docker-compose
# mv docker-compose-linux-x86_64 docker-compose
# mv docker-compose /usr/local/bin/docker-compose
Harbor Offline 설치 파일 압축을 해제합니다.
# tar xzf harbor-offline-installer-v2.7.1.tgz -C /usr/local/harbor-2.7.1
# ln -s /usr/local/harbor-2.7.1 /usr/local/harbor
Harbor 설정 템플릿 파일을 복사하여 Harbor 설정 파일을 생성합니다.
# cp /usr/local/harbor/harbor.yml.tmpl /usr/local/harbor/harbor.yml
Harbor 설정을 위해 아래의 설정을 수정합니다.
아래는 설정파일에서 주석을 제외하고 출력한 내용이며 "/data" 경로는 OCP 클러스터 및 Operator 이미지로 인해 많은 용량이 필요해 NFS로 마운트하였습니다.
# cat /usr/local/harbor/harbor.yml |grep -v "#"
hostname: harbor.example.com # Harbor DNS 주소
http:
port: 80
https:
port: 443
certificate: /usr/local/harbor/certs/harbor.example.com.crt #Harbor SSL 인증서 crt 파일
private_key: /usr/local/harbor/certs/harbor.example.com.key #Harbor SSL 인증서 key 파일
harbor_admin_password: Harbor12345 # Harbor Password
database:
password: root123
max_idle_conns: 100
max_open_conns: 900
conn_max_lifetime: 5m
conn_max_idle_time: 0
data_volume: /data/harbor # Harbor 저장소
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
security_check: vuln
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.7.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
upload_purging:
enabled: true
age: 168h
interval: 24h
dryrun: false
cache:
enabled: false
expire_hours: 24
Harbor에 SSL을 적용하기 위해 OpenSSL을 이용하여 Harbor용 SSL 사설 인증서를 만듭니다.
# openssl genrsa -out ca.key 4096
# openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=OO/L=OO/O=example/OU=lilo/CN=harbor.example.com" -key ca.key -out ca.crt
# openssl genrsa -out harbor.example.com.key 4096
# openssl req -sha512 -new -subj "/C=CN/ST=OO/L=OO/O=example/OU=lilo/CN=harbor.example.com" -key harbor.example.com.key -out harbor.example.com.csr
# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermen
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.example.com
DNS.2=harbor
EOF
# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor.example.com.csr -out harbor.example.com.crt
# openssl x509 -inform PEM -in harbor.example.com.crt -out harbor.example.com.cert
인증서 만드는 단계에 대한 자세한 내용은 아래의 Harbor 문서를 참고해주시면 됩니다.
Docker를 사용하는 Registry를 사용하다 보면 아래의 인증서 에러가 발생하면서 로그인이 되지 않는 현상이 발생합니다.
HTTPS 인증을 위해 CA 인증서를 설치하는 작업을 진행합니다.
<docker login 명령어 로그인시 에러 로그>
Error response from daemon: Get https://<Registry 주소>/v1/users/: x509: certificate signed by unknown authority
# mkdir -p /etc/docker/certs.d/harbor.example.com
# cp /usr/local/harbor/certs/harbor.example.com.cert /etc/docker/certs.d/harbor.example.com
# cp /usr/local/harbor/certs/harbor.example.com.key /etc/docker/certs.d/harbor.example.com
# cp /usr/local/harbor/certs/ca.crt /etc/docker/certs.d/harbor.example.com
설치 전 모든 사전 작업이 완료되었으니 Harbor 설치를 진행합니다.
앞에서 언급한 부분과 같이 Harbor 2.7.0을 선택한 이유가 Chart museum 기능을 사용하기 위해서였습니다.
설치 옵션에 "--with-chartmuseum" 인자를 추가해줍니다. (2.8.0 이상부터는 chart museum이 아닌 OCI를 확인 바랍니다.)
# cd /usr/local/harbor/
# ./install.sh --with-chartmuseum
브라우저에서 화면을 확인합니다.
Harbor 기동 방법
시작
# cd /usr/local/harbor
# docker-compose up -d
중지
# cd /usr/local/harbor
# docker-compose down -v
상태
[root@harbor ~]# docker-compose -f /usr/local/harbor/docker-compose.yml ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
harbor-core goharbor/harbor-core:v2.7.1 "/harbor/entrypoint.…" core 6 days ago Up 6 days (healthy)
harbor-db goharbor/harbor-db:v2.7.1 "/docker-entrypoint.…" postgresql 6 days ago Up 6 days (healthy)
harbor-jobservice goharbor/harbor-jobservice:v2.7.1 "/harbor/entrypoint.…" jobservice 6 days ago Up 6 days (healthy)
harbor-log goharbor/harbor-log:v2.7.1 "/bin/sh -c /usr/loc…" log 6 days ago Up 6 days (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal goharbor/harbor-portal:v2.7.1 "nginx -g 'daemon of…" portal 6 days ago Up 6 days (healthy)
nginx goharbor/nginx-photon:v2.7.1 "nginx -g 'daemon of…" proxy 6 days ago Up 6 days (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp
redis goharbor/redis-photon:v2.7.1 "redis-server /etc/r…" redis 6 days ago Up 6 days (healthy)
registry goharbor/registry-photon:v2.7.1 "/home/harbor/entryp…" registry 6 days ago Up 6 days (healthy)
registryctl goharbor/harbor-registryctl:v2.7.1 "/home/harbor/start.…" registryctl 6 days ago Up 6 days (healthy)
'Linux > OpenShift' 카테고리의 다른 글
RHOCP Installation (5) - DNS 서버 구축 및 이중화 (0) | 2023.07.22 |
---|---|
RHOCP Installation (4) - Local DNF Repository 구성 (0) | 2023.07.22 |
RHOCP Installation (3) - TB Architecture 구상 (0) | 2023.07.21 |
RHOCP Installation (1) - 설치 전 준비사항 (0) | 2023.07.17 |
OpenShift Container Platform이란? (0) | 2023.07.16 |