일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 시험
- cloudmonitor
- cicd
- slack
- Naver Cloud
- CKAD
- Cluster
- cloud monitor
- IAC
- hashicorp
- argocd
- alibabacloud
- GIT
- 알리바바클라우드
- 테라폼
- alibaba
- helm
- RollingUpdate
- NCP
- terraform
- recreate
- 자동화
- 쿠버네티스
- k8s
- slack app
- kubeadm
- Deployment
- 네이버클라우드
- alibaba cloud
- Kubernetes
- Today
- Total
Room9
Harbor - Installation 본문
Details
- 인증서구성
- Harbor 설치
- 컨테이너 이미지 PUSH / PULL
인증서 구성
자체 서명된 인증서 구성이 필요함
- CA 인증서 생성(자체 서명된 인증서를 위함)
- 서버 인증서 생성
- Harbor 및 Docker에 인증서 제공
인증서 구성과 관련된 용어
https://guide.ncloud-docs.com/docs/privateca-glossary
CA 인증서 생성
프로덕션 환경에서는 CA에서 인증서를 받아야 합니다. 테스트 또는 개발 환경에서는 자체 CA를 생성할 수 있습니다. 내부 사설 레지스트리로 사용할 것이기 때문에 아래와 같이 진행합니다.
CA 인증서 개인키 생성
openssl genrsa -out ca.key 4096
CA 인증서 생성
openssl req -x509 -new -nodes -sha512 -days 3650
파라미터
- -x509 : CSR 대신 자체 서명된 인증서를 생성
- -new : 새 CSR 파일을 생성
- -nodes : 개인 키를 암호화하지 않고 평문으로 저장
- -sha512 : SHA-512 해시 알고리즘을 사용하여 인증서를 서명
- -days <숫자> : 인증서의 유효기간을 일단위로 설정
ca.key , ca.crt 파일이 생성되게 됩니다.
서버 인증서 생성
위에서 만든 CA 인증서를 통한 서버 인증서를 생성합니다.
서버 인증서 개인키 생성(KEY)
openssl genrsa -out harbor.key 4096
서버 인증서 서명 요청서 생성(CSR)
openssl req -sha512 -new \\
-subj "/C=KR/ST=Seoul/L=Seoul/O=<회사명>/OU=<부서명>/ \\
CN=<도메인또는IP>" \\
-key harbor.key \\
-out harbor.csr
명령어 실행하면 harbor.key 와 harbor.csr 파일이 생성되게 됩니다.
x509 v3 확장 파일 생성
Harbor 호스트에 연결하기 위해 FQDN 또는 IP 주소를 사용하든 관계없이 이 파일을 만들어야 SAN(Subject Alternative Name) 및 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=<하버에서 사용할 도메인 or IP 주소>
DNS.2=<하버에서 사용할 도메인 or IP 주소>
DNS.3=hostname
EOF
v3.ext 파일을 사용하여 서버 인증서 생성
openssl x509 -req -sha512 -days 3650 \\
-extfile v3.ext \\
-CA ca.crt<실제 ca.crt 파일의 경로> -CAkey ca.key -CAcreateserial \\
-in harbor.csr
-out harbor.crt
해당 명령을 실행하게되면 harbor.crt 파일이 생성되고, 디렉토리에 남게되는 최종파일들의 목록은 아래와 같음
-rw-r--r-- 1 root root 1931 11월 21 16:01 ca.crt
-rw------- 1 root root 3247 11월 21 15:59 ca.key
-rw-r--r-- 1 root root 41 11월 22 13:25 ca.srl
-rw-r--r-- 1 root root 1854 11월 21 16:03 harbor.crt
-rw-r--r-- 1 root root 1679 11월 21 16:03 harbor.csr
-rw------- 1 root root 3243 11월 21 16:02 harbor.key
-rw-r--r-- 1 root root 75 11월 21 16:01 v3.ext
Harbor 및 Docker에 인증서 제공
생성된 서버인증서 harbor.key 와 harbor.crt 파일을 Harbor와 Docker에 제공하고 적용
Docker에 적용
Docker 데몬은 .crt 파일을 CA인증서로, .cert 파일을 서버인증서로 해석하기 때문에 형식 변환이 필요합니다.
아래 명령어를 통해 crt 파일을 cert 파일로 형식을 변환합니다.
openssl x509 -inform PEM -in harbor.crt -out harbor.cert
ca.crt , harbor.cert , harbor.key 파일을 Docker 인증서 디렉토리로 복사해줍니다.
docker에서 인증서를 읽는 패턴은 /etc/docker/certs.d/<도메인 or IP:port> 경로입니다.
mkdir -p /etc/docker/certs.d/<IP주소>:443
cp ca.crt harbor.key harbor.cert /etc/docker/certs.d/<IP주소>:443/
docker 다시시작
systemctl restart docker
Harbor에 적용
아직 harbor를 설치하지 않았지만, 설치시에 harbor가 인증서를 읽는 경로를 /data/cert/ 경로로 수정할 예정이기 때문에 사전에 인증서를 옮겨둡니다.
cp harbor.crt harbor.key /data/cert/
Harbor 설치
Harbor다운로드 및 설정
wget을 이용하여 설치파일을 다운로드 받고 압축을 해제 합니다.
다음 링크에서 원하는 버전의 인스톨러를 다운받을 수 있습니다.
https://github.com/goharbor/harbor/releases/
wget <https://github.com/goharbor/harbor/releases/> \\
download/v2.8.0/harbor-online-installer-v2.8.0.tgz
tar xf harbor-online-installer-v2.8.0.tgz
이후 압축 해제된 디렉토리에서 harbor.yaml.tmpl 파일을 harbor.yml 로 복사합니다.
cd harbor
cp harbor.yml.tmpl harbor.yml
harbor.yml 파일을 열어서 내용 수정
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: <hostname>
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
certificate: /data/cert/harbor.crt
private_key: /data/cert/harbor.key
harbor.yml을 기반으로 설치 스크립트를 실행
./prepare # --with-trivy (trivy설치옵션사항)
./install.sh
설치가 완료되고 난 뒤 docker의 프로세스를 확인하면 다음과 같은 내용을 확인할 수 있습니다.
계정은 admin / Harbor12345(초기비밀번호) 로 로그인 할 수 있습니다. 로그인까지 완료되었다면, 설치는 완료되었습니다. 저장소를 설치한 목적이 컨테이너 이미지를 push하고 pull하는 목적이기 때문에 이어서 push 및 pull 해보겠습니다.
다음 링크에서 원하는 버전의 인스톨러를 다운받을 수 있습니다.
https://github.com/goharbor/harbor/releases/
wget <https://github.com/goharbor/harbor/releases/> \\
download/v2.8.0/harbor-online-installer-v2.8.0.tgz
tar xf harbor-online-installer-v2.8.0.tgz
이후 압축 해제된 디렉토리에서 harbor.yaml.tmpl 파일을 harbor.yml 로 복사합니다.
cd harbor
cp harbor.yml.tmpl harbor.yml
harbor.yml 파일을 열어서 내용 수정
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: <hostname>
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
certificate: /data/cert/harbor.crt
private_key: /data/cert/harbor.key
harbor.yml을 기반으로 설치 스크립트를 실행
./prepare # --with-trivy (trivy설치옵션사항)
./install.sh
설치가 완료되고 난 뒤 docker의 프로세스를 확인하면 다음과 같은 내용을 확인할 수 있습니다.
계정은 admin / Harbor12345(초기비밀번호) 로 로그인 할 수 있습니다. 로그인까지 완료되었다면, 설치는 완료되었습니다. 저장소를 설치한 목적이 컨테이너 이미지를 push하고 pull하는 목적이기 때문에 이어서 push 및 pull 해보겠습니다.
컨테이너 이미지 PUSH / PULL
컨테이너 이미지 PUSH
harbor에 이미지를 push하기 위해서 로그인과정을 거쳐야합니다.
docker login <서버IP>:443
Username: admin
Password :
Login Succeeded
Push 명령어를 이용하여 생성된 이미지를 harbor로 push 합니다. 기존 사용하고 있는 이미지의 태그를 변경해줍니다.
docker tag optimal-img:0.0.1 <서버IP>:443/library/optimal-img:latest
docker push <서버IP>:443/library/optimal-img:latest
웹 콘솔화면에서도 이미지가 PUSH 된 것을 확인할 수 있습니다.
컨테이너 이미지 PULL
기존 로컬에 저장되어있는 이미지를 삭제하고 Harbor에 등록되어 있는 이미지는 PULL해보겠습니다.
docker rmi 39f7c7795b88
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/redis-photon v2.8.0 ef1f410f9255 19 months ago 127MB
goharbor/harbor-registryctl v2.8.0 165749c6eedc 19 months ago 141MB
goharbor/registry-photon v2.8.0 8bfd12c2163d 19 months ago 78.5MB
goharbor/nginx-photon v2.8.0 cfc2401896e1 19 months ago 126MB
goharbor/harbor-log v2.8.0 f31ccc3d46f0 19 months ago 134MB
goharbor/harbor-jobservice v2.8.0 1b00a3a474e1 19 months ago 140MB
goharbor/harbor-core v2.8.0 15f4066c1707 19 months ago 164MB
goharbor/harbor-portal v2.8.0 ae18a071cdce 19 months ago 133MB
goharbor/harbor-db v2.8.0 f3d4373617a2 19 months ago 179MB
goharbor/prepare v2.8.0 daa44ccf3b06 19 months ago 170MB
harbor 관련 이미지를 제외하고 나머지 이미지는 삭제된것을 확인할 수 있습니다.
docker pull <서버IP>:443/library/optimal-img:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<서버IP>:443/library/optimal-img latest 39f7c7795b88 8 days ago 148MB
docker pull 명령어를 통해 harbor에 업로드된 이미지를 당겨옵니다. 이후 당겨온 이미지를 통해 애플리케이션을 실행합니다.