반응형
Harbor private registry 구축
Certification 생성
인증서 생성 및 기타 작업을 수행하기 위한 디렉터리를 생성함.
[명령어]
mkdir /certs
cd /certs
CA Certificates 생성
실제 RootCA (신뢰할 수 있는 루트 인증 기관)를 사용하는게 아니라면,
직접 CA (인증 기관)를 생성하여 Server의 인증서가 안전하다고 인증해주어야 함.
따라서 아래의 명령어로 개인용 Root CA 역할을 할 CA.key를 생성하고,
CA.key의 짝이 되는 CA.crt 공개키를 생성함.
[Root CA의 비밀키 생성]
openssl genrsa -out ca.key 4096
[Root CA의 비밀키와 짝을 이룰 공개키 생성]
openssl req -x509 -new -nodes -sha512 -days 365 \
-key ca.key \
-out ca.crt
[주의]
Common Name 항목은 private registry domain 주소를 입력해줘야함.
ex) iksoon.registry.com
이외는 모두 enter로 넘어감.
Server Certificates 생성
서버의 인증서를 생성.
Root CA의 비밀키와 공개키를 만들 때와 마찬가지로 서버의 비밀키를 생성하고,
생성한 비밀키를 넣어 CSR 파일을 생성함.
CSR 파일은 Certificate Signing Request 파일로,
인증서를 발급하기 위해 필요한 정보를 담고 있는 데이터임.
CSR 파일은 SSL 발급을 신청하기 위해 해당 파일 내용을 Root CA에 제출하는 용도로 사용함.
[Server의 비밀키 생성]
openssl genrsa -out server.key 4096
[Server의 CSR 파일 생성]
openssl req -sha512 -new \
-key server.key \
-out server.csr
SAN 등록
이제 위에서 생성한 서버의 CSR 파일을,
직접 만든 Root CA에 인증해달라고 요청하는 작업을 수행함.
CSR 파일을 가지고 서버의 인증키를 생성하게 됩니다.
[설정 파일 생성]
vi v3ext.cnf
subjectAltName = IP:10.0.2.5,IP:127.0.0.1,DNS:iksoon.registry.com
참고 : 10.0.2.5는 private registry ip 주소이고 iksoon.registry.com은 domain 주소.
[SAN 등록하는 작업 수행]
openssl x509 -req -sha512 -days 365 \
-extfile v3ext.cnf \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr \
-out server.crt
Certificate 업데이트
Docker에서는 .crt 파일을 CA (인증 기관)의 인증서라고 간주함.
서버의 인증서라는 것을 표현하고 싶다면
".crt" 형식이 아닌 ".cert" 형식으로 변환해주어야 함.
따라서 server.crt 파일을 server.cert 파일로 변환함.
[명령어]
openssl x509 -inform PEM -in server.crt -out server.cert
만들어진 인증서 파일들을 Docker와 Host에 등록, 업데이트하는 작업을 수행
[명령어]
cp server.cert /etc/docker/certs.d/iksoon.registry.com
cp server.key /etc/docker/certs.d/iksoon.registry.com
cp ca.crt /etc/docker/certs.d/iksoon.registry.com
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/
sudo cp server.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
Harbor package 다운로드
Harbor는 Offline Install과 Online Install 두 가지 방식으로 설치를 지원하고 있음.
본 포스트에서는 Offline Install 을 기준으로 설치함.
현재 2022년 1월 04일 기준으로 v2.4.1 릴리즈가 최신
[설치 파일 다운로드]
wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
[압축 해제]
tar xzvf harbor-offline-installer-v2.4.1.tgz
[harbor 디렉터리 이동]
cd ~/harbor
harbor.yml 작성
바로 위 문단에서 이동한 디렉터리에서 아래의 작업을 수행함.
기본적으로 디렉터리 내에는 harbor.yml.tmpl 파일이 존재함.
이 파일의 이름을 harbor.yml로 수정하고 내용을 필요에 맞게 수정해야함.
[명령어]
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
[추가 내용]
hostname: iksoon.regsitry.com
https.certificate: {server.cert로 수정 (예시, /etc/docker/certs.d/iksoon.registry.com/server.cert)
https.private_key: {server.key로 수정 (예시, /etc/docker/certs.d/iksoon.registry.com/server.key)
docker-compose 설치
harbor 설치 시 docker compose 가 필요함
[docker compose 파일 download]
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[docker compose 적용]
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[설치 확인]
docker-compose --version
[참고]
Harbor Deploy
위 문단에서 작업한 harbor.yml의 작성이 끝나면,
Harbor 설치의 사전 작업을 수행하는 prepare 스크립트를 실행함.
prepare 스크립트는 결과적으로 prepare 컨테이너를 생성함.
[Harbor 설치 명령어]
./prepare
./install.sh
[설치 확인]
docker-compose ps
Harbor dashboard 접속
상위에서 설정한 domain인
iksoon.registry.com으로 접속하면 확인 가능.
[최초 ID, PW]
ID : admin
PW : Harbor12345
Harbor project 생성
test를 위해 public 으로 생성
Harbor registry image push
Harbor registry에 접속할 host는 아래 명령어로 인증서를 등록해줘야함.
server.crt는 harbor server 설치할 때 생성한 공개키임.
[명령어]
sudo cp server.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
[docker login 명령어]
docker login iksoon.registry.com
id : admin
pw : Harbor12345
image 생성
기존의 peksoon/iksoon_tomcat:1.0.6 image를 push 하기 위해
tag 명령으로 harbor push 용 image 생성
[명령어]
docker tag peksoon/iksoon_tomcat:1.0.6 iksoon.registry.com/testproject/tomcat:1.0.0
[image name 설명]
iksoon.registry.com : harbor 주소
testproject : harbor project 이름
tomcat:1.0.0 : image 이름
[harbor registry의 testproject에 image push]
docker push iksoon.registry.com/testproject/tomcat:1.0.0
[harbor page에서 결과 확인]
Harbor registry image pull (Docker)
다른 host에서 docker로 상위에서 구성한 harbor registry images를 pull하는 방법을 정리
harbor registry domain 추가
vi /etc/hosts
10.0.2.5 iksoon.registry.com
harbor https 접속 용 인증서 설정
상위 harbor 설치 시 사용했던 ca.crt, server.crt, server.cert, server.key 파일을 가져옴
그리고 아래 명령어 실행.
mkdir server.cert /etc/docker/certs.d/iksoon.registry.com
cp server.cert /etc/docker/certs.d/iksoon.registry.com
cp server.key /etc/docker/certs.d/iksoon.registry.com
cp ca.crt /etc/docker/certs.d/iksoon.registry.com
cp server.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
docker login
docker login iksoon.registry.com
docker image pull
docker pull iksoon.registry.com/testproject/tomcat:1.0.0
Harbor registry image pull (ContainerD)
harbor registry image pull 시도
[명령어]
crictl pull iksoon.registry.com/testproject/tomcat:1.0.0
[결과]
추가 설정 없이 image pull을 하게 되면
인증관련 오류가 발생하며 image pull이 되지 않음.
containerd 설정
[containerd 설정 파일 이동]
/etc/contaienrd/config.toml
[private registry 관련 설정 추가]
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."iksoon.registry.com"]
endpoint = ["https://iksoon.registry.com"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".auth]
username = "admin"
password = "Harbor12345"
[plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".tls]
ca_file = "/root/certs/ca.crt"
cert_file = "/root/certs/server.cert"
key_file = "/root/certs/server.key"
|
containerD restart
systemctl restart containerd
결과 확인
harbor private registry로 부터 정상적으로 images 를 받아옴.
반응형
'클라우드 > Docker' 카테고리의 다른 글
18. Docker image layer 정보 확인 (0) | 2022.07.05 |
---|---|
16. Windows 2019 Docker 설치 (0) | 2021.10.20 |
15. Docker 구조 (0) | 2021.10.20 |
14. 개인 인증서를 사용해서 Notary Service 구동 (0) | 2020.11.08 |
13. Notary와 DCT를 사용해서 Private Registry에 서명된 Trust Image Push 하기 (3) | 2020.11.08 |