はじめに
TKGで作成したKubernetesクラスタ用にプライベートレポジトリを試してみたくなったので、vSphere上にUbuntu 18.04仮想マシンを作成してHarborをインストールしてみました。
準備
Harborの公式ドキュメントでは、以下がインストールに必要な最低スペックとして記載されています。このスペックに合わせて、仮想マシンを作成しUbuntu 18.04をインストールします。
- CPU:2 CPU
- メモリ:4 GB
- ストレージ:40GB
ソフトウェア観点では、以下がインストールされている必要があります。
- Docker:17.06.0+
- Docker Compose:1.18.0+
- OpenSSL:できる限り最新のもの
ネットワーク観点では、以下のポートが開放されている必要があります。
- 443(HTTPS)
- 4443(HTTPS)
- 80(HTTP)
なお、今回の環境ではネットワークは以下のような設定になっています。
- ホスト名:
harbor
- IPアドレス:
192.168.7.103
- FQDN:
harbor.tta.local
DockerとDocker Composeのインストール
DockerとDocker Composeのインストールに関しては、公式ドキュメントだけ記載します。
証明書の作成
Harbor自体は証明書がなくてもインストール可能ですが、HTTPSアクセスができないと使用できない機能があります。今回は全ての機能について有効化するため、公式ドキュメントの手順に従って、CA証明書とサーバ証明書を作成します。
-
作業用ディレクトリ
cert
をホームディレクトリ配下に作成します。$ mkdir ~/cert $ cd ~/cert
-
CA用の秘密鍵
ca.key
を生成します。$ openssl genrsa -out ca.key 4096
-
CA証明書
ca.crt
を生成します。コモンネームには、Harborをインストールする仮想マシンのFQDNを指定します。$ openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=JP/ST=Tokyo/L=Tokyo/O=homelab/OU=homelab/CN=harbor.tta.local" \ -key ca.key \ -out ca.crt
-
サーバ証明書用の秘密鍵
harbor.tta.local.key
を生成します。$ openssl genrsa -out harbor.tta.local.key 4096
-
CSRを生成します。
$ touch ~/.rnd $ openssl req -sha512 -new \ -subj "/C=JP/ST=Tokyo/L=Tokyo/O=homelab/OU=homelab/CN=harbor.tta.local" \ -key harbor.tta.local.key \ -out harbor.tta.local.csr
-
X509 v3 extensionファイル
v3.ext
を生成します。[alt_names]
には、Harbor用仮想マシンのFQDN、ホスト名、IPアドレスを指定します。$ cat > v3.ext <<EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=harbor.tta.local DNS.2=harbor IP.1=192.168.7.103 EOF
-
v3.ext
を使って、Harbor用のサーバ証明書を生成します。$ openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in harbor.tta.local.csr \ -out harbor.tta.local.crt
証明書の配置
-
/data/cert
ディレクトリを作成して、サーバ証明書をコピーします。$ sudo mkdir -p /data/cert $ sudo cp harbor.tta.local.crt /data/cert/ $ sudo cp harbor.tta.local.key /data/cert/
-
Docker用に証明書と秘密鍵をコピーします。
$ openssl x509 -inform PEM -in harbor.tta.local.crt -out harbor.tta.local.cert $ sudo mkdir -p /etc/docker/certs.d/harbor.tta.local $ sudo cp harbor.tta.local.cert /etc/docker/certs.d/harbor.tta.local $ sudo cp harbor.tta.local.key /etc/docker/certs.d/harbor.tta.local $ sudo cp ca.crt /etc/docker/certs.d/harbor.tta.local
-
Dockerをリスタートします。
$ sudo systemctl restart docker
Harborのインストール
-
Harborのリリースページからオンラインインストーラーをダウンロードして、展開します。※今回は、1.10.2をインストールします。
$ wget https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-online-installer-v1.10.2.tgz $ tar -xzvf harbor-online-installer-v1.10.2.tgz
-
インストーラーに含まれている
harbor.yml
を以下のように編集します。$ cd ./harbor $ grep -v -e '^\s*#' -e '^\s*$' harbor.yml hostname: harbor.tta.local http: port: 80 https: port: 443 certificate: /etc/docker/certs.d/harbor.tta.local/harbor.tta.local.cert private_key: /etc/docker/certs.d/harbor.tta.local/harbor.tta.local.key harbor_admin_password: VMware123! database: password: VMware123! max_idle_conns: 50 max_open_conns: 100 data_volume: /data clair: updaters_interval: 12 jobservice: max_job_workers: 10 notification: webhook_job_max_retry: 10 chart: absolute_url: disabled log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor _version: 1.10.0 proxy: http_proxy: https_proxy: no_proxy: components: - core - jobservice - clair - trivy
-
インストールスクリプトを実行します。
$ sudo ./install.sh --with-notary --with-clair --with-chartmuseum
-
インストール完了後、
https://harbor.tta.local
にアクセスすると以下のようにログイン画面が表示されます。
HarborにDockerイメージをpushする
macOSからnginx
イメージをHarborにpushしてみます。
-
CA証明書をMacにインポートします。
$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ./ca.crt
-
Dockerを一度再起動した後、Harborにログインします。
$ docker login harbor.tta.local Username: admin Password: Login Succeeded
-
nginx
イメージをpullします。$ docker pull nginx:latest
-
nginx
イメージをHarborにpushします。$ docker tag nginx:latest harbor.tta.local/library/nginx:latest $ docker push harbor.tta.local/library/nginx:latest
-
Harborの[Projects]画面から
library
プロジェクトに移動し、[Repositories]タブから一覧にnginx
イメージがpushされていることを確認します。