Harbor Server の https 設定
Harbor は http でも設定できますが、helm などのコンポーネントと連携するならば、https で建てた方が便利です。
ラボ環境なので、CA がなくて、Self Signed Cert を使います。
設定方法は Harbor docs を参照します。
まずは Harbor Server で CA 証明書を作成します。
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt
そして、Server 用の key を作成し、Sign Request を作成します。
openssl genrsa -out yourdomain.com.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr
Harbor Https Host の証明書は x509 v3 を準拠する必要があるので、x509 v3 extension file を作成します。
DNS.1/.2/.3 に Subject Alternative Name (SAN) を入れます。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
x509 v3 extension file と ca 証明書を持って、server の証明書をサインします。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
作られた証明書とkey を証明書フォルダー(harbor.yml に記載するパス)に移動します。
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
Docker 用として、証明書を PEM フォーマットに変換し、/etc/docker/certs.d/yourdomain.com に入れます。
もし/etc/docker/certs.d/yourdomain.com が存在しないなら、手動で作成します。
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/
最後に、docker と harbor を再起動し、設定を反映させます。
systemctl restart docker
# harbor の再起動には harbor.yml および docker-compose.yml が必要なので、harbor/ フォルダに移動してから実施
./prepare
docker-compose down -v
docker-compose up -d
Harbor Client 側の設定
Harbor Server 側が設定完了しましたが、Self-signed Cert なので、Client 側にも CA 証明書をいれなければいけないです。
Client にアクセスし、/etc/docker/certs.d/yourdomain.com/ を作成し、ca.crt を server からコピーしてきます。
Harbor の Https Server にアクセスしてみる
設定後、Https をアクセスしてみます
curl -k https://yourdomain.com
docker login https://yourdomain.com
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /home/administrator/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded