내 경우, 위 문서의 예제 명령에서 "yourdomain.com" 부분만 실제 나의 internet domain name으로 변경하고 인증서를 만들었다.
4) 설정 파일 harbor.yaml 작성하기
위에서 다운로드한 'harbor-offline-installer-v2.7.0.tgz' 파일에 harbor.yml.tmpl 파일이 있다.
이 설정 파일을 내 상황에 맞게 편집하면 되는데, 솔직히 항목이 많고 설명을 읽어도 아리송한 부분이 있다.
내 경우는 전체 설정 항목 중에서 아래 예시와 같이 몇 개만 수정했다.
##
## 설정 Template 파일을 복사
##
$ cp harbor.yml.tmpl harbor.yml
##
## 설정 파일을 편집하기
##
$ vi harbor.yml
... 중간 생략 ...
hostname: registry.sejong-world.kr
... 중간 생략 ...
https:
port: 443
certificate: /data/cert/sejong-world.kr.crt
private_key: /data/cert/sejong-world.kr.key
harbor_admin_password: MyNewPass56789
$
연동할 Registry 주소가 Server 인증서의 SAN(Subject Alt Name) 리스트에 포함되지 않은 경우
연동하려는 Registry 주소가 인증서 발급 시 설정한 SAN(Subject Alternative Name) 리스트에 포함되어 있지 않으면 발생하는 인증 에러이다.
따라서 SAN(Subject Alternative Name) 리스트에 있는 주소 값으로 접속 시도해야 한다.
##
## Certificate(인증서) 만들 때, SAN(Subject Alt Name)에 없는 주소 값을 이용하여
## Container Image Registry에 접근하려고 하면, 아래와 같이 오류가 발생한다.
## 즉, Docker Registry(v2) 또는 Harbor를 구동할 때 사용한 Server Certificate이 있을 텐데,
## 그 Certificate을 만들 때 "Subject Alternative Name" 리스트에 서버의 domain name 주소나 IP Address를
## 입력했었을 것이다.
## 그 입력했던 "Subject Alt Name" 리스트 중에 아래와 같이 Registry에 접속할 때 사용한 Server의 주소 값이 없으면
## "Authenticting creds error"가 발생한다.
##
$ podman login 10.10.12.10:5000
Username: myid
Password: ~~~~~
Error: error authenticating creds for "10.10.12.10:5000": error pinging docker registry 10.10.12.10:5000: Get "https://10.10.12.10:5000/v2/": x509: cannot validate certificate for 10.10.12.10 because it doesn't contain any IP SANs
##
## 인증서의 Subject Alt Name과 동일한 값으로 Registry에 접근하면 문제 없이 접속된다.
## 즉, 아래 예제로 본다면, "my-registry.my-domain"이
## 인증서의 Subject Alt Name인 것이다.
##
$ podman login my-registry.my-domain:5000
Username: myid
Password: ~~~~~
Login Succeeded!
Case (B)
Client OS에 Server Certificate이 등록되지 않은 경우
정확히 표현하면, Podman 명령, Docker 명령을 실행하려는 장비에 Harbor 또는 Docker Registry의 Server Certificate(인증서)가 등록되어 있지 않은 경우에 이런 Unknown Authority 에러가 발생한다.
보통 Self-signed Certificate을 사용한 경우라면, 이 인증 에러가 발생할 것이다.
심각한 에러는 아니고, Podman명령을 수행할 장비(예: Macbook, Ubuntu, Windows 10, Windows 11)에서 아래와 같이 OS에 Self-signed Certificate을 신뢰(Trust)하겠다는 명령만 수행하면 된다.
##
## podman 명령이나 docker 명령을 수행하는 Client OS 쪽에 CA로부터 Sign받은 Server Certificate 이 없는 경우,
## 아래와 같이 인증 에러가 발생한다.
##
$ podman login my-registry.my-domain:5000
Username: myid
Password: ~~~~~
Error: authenticating creds for "my-registry.my-domain:5000":
error pinging docker registry registry.base.twcm.cloud:5000:
Get "https://registry.base.twcm.cloud:5000/v2/": x509:
certificate signed by unknown authority
$
##
## 이럴 때는 CA에게 Sign받은 Certificate을 아래와 같이 Client OS에 복사해주고 등록(Update)하면 된다.
##
## 참고 사항: my-server-domain.crt 파일은 Image Registry를 구동할 때 사용했던 파일이다.
## (즉, my-server-domain.crt는 harbor 구동시 사용한 server certificate이라는 뜻이다)
##
$ cp my-server-domain.crt /etc/pki/ca-trust/source/anchors/my-server-domain.crt
$ update-ca-trust
$ podman login my-registry.my-domain:5000
Username: myid
Password: ~~~~~
Login Succeeded!
$
참고: 위 설명은 CentOS, RHEL을 사용할 때를 예로 든 것이고, Ubuntu OS에서 Server Certificate 등록하는 방법은 아래와 같다.
##
## Ubuntu OS를 사용하는 경우는 아래처럼 update-ca-certificates 명령을 사용해야 한다.
## Ubuntu에서 Certificate을 등록하는 방법은 CentOS, RHEL 8와 다르다.
##
$ cp my-domain.crt /usr/local/share/ca-certificates/domain.crt
$ update-ca-certificates
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
$ podman login my-registry.my-domain:5000
Username: myid
Password:
Login Succeeded!
$