1 Root CA용 crt 생성
1) 기존 설정
#Export 변수 값으로 도메인 파일 생성
export domain=harbor.com
#변수 확인
echo $domain
#인증서 폴더 생성
mkdir certs
2) openssl CA private key 생성
openssl genrsa -out ca.key 4096
3) CA Certificate 생성
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=$domain" \
-key ca.key \
-out ca.crt
2. 서버 인증서용 crt, cert 생성
1) 서버 Certificate를 위한 Private Key 생성
openssl genrsa -out $domain.key 4096
2) CSR 생성
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=$domain.com" \
-key $domain.key \
-out $domain.csr
3) x509 v3 extention 파일 생성
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=$domain
DNS.2=$domain
DNS.3=hostname
EOF
4) v3.ext 파일을 certificate를 생성하는데 사용
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in $domain.csr \
-out $domain.crt
5) 도커가 쓸 수 있도록 cert로 변환
openssl x509 -inform PEM -in $domain.crt -out $domain.cert
3. 인증서 복사
1) 폴더 생성 및 복사
mkdir /etc/docker/certs.d/$domain/
cp $domain.cert /etc/docker/certs.d/$domain/
cp $domain.key /etc/docker/certs.d/$domain/
cp ca.crt /etc/docker/certs.d/$domain/
2) CRI 설정(Containerd) – 필수
- CRI마다 설정법이 다르며, 설정을 안할 경우 Harbor 이미지 배포 에러 발생
- 경로 : /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.com"]
endpoint = ["https://harbor.com"]
insecure = true
4. 인증서 설치
1) 인증서 복사
harbor 인증서 경로에 존재하는 파일 서버 인증서 경로 복사
(서버 인증서 경로 (우분투): /usr/share/ca-certificates/mozila/
인증서 복사 후
dpkg-reconfigure ca-certificates
실행시 인증서 설치
2) 서비스 재시작
systemctl restart containerd
systemctl restart docker
3) 파드 테스트
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: harbor.com/kjt/nginx:1.0