harbor SSL 인증서 적용 및 kubernetes 연동

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

4. Harbor 접속(도메인 적용)