728x90
1. 환경 정보
- OS : Ubuntu24.04
- Docker : 27.3.1
- Docker Compose version v2.25.0
2. 사전 준비
2.1 Docker 설치
sudo apt update
sudo apt install docker.io
2.2 Docker Compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/v2.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 설치 확인
3. 인증서 생성 및 구성
- Docker에서는 .crt 파일을 CA (인증 기관)의 인증서라고 간주
- 서버의 인증서라는 것을 표현하고 싶다면 .crt 형식이 아닌 .cert 형식으로 변환해주어야 하고 server.crt 파일을 server.cert 파일로 변환
3.1 Certification 파일 디렉터리 생성
mkdir ~/certs
cd ~/certs
3.2 Root CA (인증 기관) 생성
- 실제 RootCA (신뢰할 수 있는 루트 인증 기관)를 사용하는게 아니라면, 직접 CA (인증 기관)를 생성하여 Server의 인증서가 안전하다고 인증해주어야 한다.
- 따라서 아래의 명령어로 개인용 Root CA 역할을 할 CA.key를 생성하고, CA.key의 짝이 되는 CA.crt 공개키를 생성
openssl genrsa -out ca.key 4096
#CA인증서 개인키를 활용하여 인증서 생성
#아래 커맨드를 입력하면,여러가지를 물어보는데 별도로 설정하지 않으려면 엔터치면 됨
openssl req -x509 -new -nodes -sha512 -days 365 -key ca.key -out ca.crt
3.3 서버 인증서 생성
- 서버의 인증서를 생성한다.
- Root CA의 비밀키와 공개키를 만들 때와 마찬가지로 서버의 비밀키를 생성하고, 생성한 비밀키를 넣어 CSR 파일을 생성한다.
- CSR 파일은 Certificate Signing Request 파일로, 인증서를 발급하기 위해 필요한 정보를 담고 있는 데이터
- CSR 파일은 SSL 발급을 신청하기 위해 해당 파일 내용을 Root CA에 제출하는 용도로 사용하게 된다
- 생성할 때 Harbor 서버의 IP 또는 DNS 주소 이름으로 생성한다.
openssl genrsa -out harbor.sj.io.key 4096
#Server의 CSR 파일 생성
#아래 커맨드를 입력하면,여러가지를 물어보는데 별도로 설정하지 않으려면 엔터치면 됩니다.
openssl req -sha512 -new -key harbor.sj.io.key -out harbor.sj.io.csr
3.4 SAN 등록
이제 위에서 생성한 서버의 CSR 파일을, 직접 만든 Root CA에 인증해달라고 요청하는 작업을 수행한다 CSR 파일을 가지고 서버의 인증키를 생성하게 된다
#FQDN또는 IP주소를 사용하는지에 대한 관계 없이 Harbor 호스트에 대한 인증서를 생성할 수 있도록 v3ext파일을 만들어야 합니다.
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=192.168.207.210 #하버서버 IP주소
DNS.2=harbor.sj.io
DNS.3=harbor
EOF
3.5 서버 인증서 생성
# 위파일을 만들었으면, 해당파일을 가지고 하버호스트에 대한 인증서를 생성합니다.
openssl x509 -req -sha512 -days 365 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor.sj.io.csr -out harbor.sj.io.crt
3.6 인증서 파일 복사
# 서버 인증서와 키를 Harbor 호스트의 인증서 폴더에 복사합니다.
mkdir -p /data/cert
cp harbor.sj.io.crt /data/cert/
cp harbor.sj.io.key /data/cert/
3.7 Docker 인증서 업데이트
Docker에서는 .crt 파일을 CA (인증 기관)의 인증서라고 간주
서버의 인증서라는 것을 표현하고 싶다면 .crt 형식이 아닌 .cert 형식으로 변환해주어야 하고 server.crt 파일을 server.cert 파일로 변환
# .crt를 .cert로 변환
openssl x509 -inform PEM -in harbor.sj.io.crt -out harbor.sj.io.cert
# Docker 인증서 디렉터리 생성 및 복사
mkdir -p /etc/docker/certs.d/harbor.sj.io
cp harbor.sj.io.cert /etc/docker/certs.d/harbor.sj.io/
cp harbor.sj.io.key /etc/docker/certs.d/harbor.sj.io/
cp ca.crt /etc/docker/certs.d/harbor.sj.io/
# 인증서 시스템 신뢰 설정
cp ca.crt /usr/local/share/ca-certificates/harbor.sj.io.crt
sudo update-ca-certificates
# Docker 재시작
sudo systemctl restart docker
참고
HTTPS 연결이 안된다면 아래와 같이 진행
(아래와 같이 OS단에서 인증서를 신뢰할 수 있도록 설정 해야 할 수 있음.)
# update-ca-trust ##커맨드가 없다면 아래 커맨드를 실행하여 설치 진행
sudo yum update
sudo yum install ca-certificates
cp harbor.sj.io.crt /etc/pki/ca-trust/source/anchors/harbor.sj.io.crt
update-ca-trust
4. Harbor 설치
4.1 Harbor 패키지 다운로드 및 압축 해제
#홈 디렉터리로 이동
cd ~
#설치 파일을 다운로드
wget https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-offline-installer-v2.2.2.tgz
#다운로드한 파일을 압축 해제 합니다.
tar xzvf harbor-offline-installer-v2.2.2.tgz
#압축이 해제된 harbor 디렉터리로 이동하여 작업을 수행합니다.
cd ~/harbor
4.2 Harbor 설정 파일 수정
# 호스트네임 및 인증서 위치 설정을 위해 harbor.yml 수정
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
hostname: harbor.sj.io
certificate: /etc/docker/certs.d/harbor.sj.io/harbor.sj.io.cert
private_key: /etc/docker/certs.d/harbor.sj.io/harbor.sj.io.key
5. 하버 Deploy 및 로그인
위 문단에서 작업한 harbor.yml의 작성이 끝나면, Harbor 설치의 사전 작업을 수행하는 prepare 스크립트를 실행
prepare 스크립트는 결과적으로 prepare 컨테이너를 생성
# 하버 서버에서 hosts파일 내용을 수정합니다.
vi /etc/hosts
192.168.207.210 harbor.sj.io
( {하버서버IP} harbor.sj.io )
cd ~/harbor
./prepare
./install.sh
#하버 로그인
docker login harbor.sj.io 또는 docker login IP
admin
Harbor12345
- 완료 Message
[Step 5]: starting Harbor ...
WARN[0000] /root/harbor/docker-compose.yml: `version` is obsolete
[+] Running 9/10
⠹ Network harbor_harbor Created 4.7s
✔ Container harbor-log Started 1.3s
✔ Container redis Started 2.0s
✔ Container harbor-portal Started 1.9s
✔ Container registry Started 2.0s
✔ Container registryctl Started 2.0s
✔ Container harbor-db Started 2.0s
✔ Container harbor-core Started 2.7s
✔ Container nginx Started 4.0s
✔ Container harbor-jobservice Started 3.2s
✔ ----Harbor has been installed and started successfully.----
6. 완료
7. TEST
docker tag nginx:latest harbor.sj.io/test/nginx:1.0
docker push harbor.sj.io/test/nginx:1.0
8. 재부팅 후 재시작 시 manual
재부팅하면 harbor 웹이 올라오지 않는다 이때 아래와 같이 docker-compose를 해주면 정상적으로 web page로 접근 가능하다.
# cd /root/harbor
# docker-compose down
# docker-compose up -d
'DevOps > CICD' 카테고리의 다른 글
[DevOps] 다양한 사용자가 GitLab 환경을 사용할 때 설정가이드 (0) | 2024.12.10 |
---|---|
[DevOps]GitLAB 설치 (0) | 2024.12.06 |
[DevOps]DevOps 환경에서 CI/CD 프로비저닝 구성하기: 이미지 기반 파이프라인과 인프라 자동화 (0) | 2024.11.15 |
GitHub Actions: 소개 및 가이드 (0) | 2024.05.25 |
쿠버네티스 환경에서 CI/CD 구현 (0) | 2024.05.24 |