Contents
概要
Harborはオープンソースのプライベートレジストリです。業務でコンテナを使用する(Docker, Kubernetes等)場合にDocker HUBを使用することはセキュリティ上少ないと思いますので、何らかのプライベートレジストリは必須です。
事前設定
TLS証明書
こちらを参考に自己署名証明書を作成します。
こちらを参考に自己署名証明書のルート証明書を信頼します。
Docker
この操作はDockerからHarborを利用する全ホストに必要となります。
こちらを参考にDocker, Docker Composeをインストールします。
こちらを参考にDockerをTLS化します。
Harborの設定
ダウンロードと展開
Harborはコンテナイメージで公開されています。最新バージョンはこちらを参照して下さい。本稿の手順では/opt/harborをHarborのディレクトリとして使用していますが、このディレクトリは任意です。
myadmin@ubuntu:~$ sudo wget -P /opt https://github.com/goharbor/harbor/releases/download/v2.4.2/harbor-offline-installer-v2.4.2.tgz myadmin@ubuntu:~$ sudo tar xzvf /opt/harbor-offline-installer-v2.4.2.tgz -C /opt myadmin@ubuntu:~$ sudo rm -f /opt/harbor-offline-installer-v2.4.2.tgz
harbor.yml
Harborの設定ファイルはharbor.ymlです。
デフォルト値
サンプルとしてharbor.yml.tmplが用意されています。コメント行を削除したデフォルト値は下記の通りです。
myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /opt/harbor/harbor.yml.tmpl
hostname: reg.mydomain.com
http:
port: 80
https:
port: 443
certificate: /your/certificate/path
private_key: /your/private/key/path
harbor_admin_password: Harbor12345
database:
password: root123
max_idle_conns: 100
max_open_conns: 900
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
insecure: false
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: 2.4.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
設定値
設定例は下記の通りです。基本的に変更すべき個所は僅かです。各ディレクトリはHarborの起動時に自動で作成されます。
myadmin@ubuntu:~$ sudo tee /opt/harbor/harbor.yml <<"EOF"
hostname: harbor.si1230.com
http:
port: 80
https:
port: 443
certificate: /etc/docker/certs.d/si1230.com-docker.cert
private_key: /etc/docker/certs.d/si1230.com.key
harbor_admin_password: password
database:
password: password
max_idle_conns: 100
max_open_conns: 900
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
insecure: false
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: 2.4.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
EOF
Harborの起動
Harborを起動します。内部的にはDocker Composeを呼び出しています。指定したオプションは、--with-chartmuseum:Helm Chartリポジトリの有効化、--with-trivy:SCANの有効化となります。SCANを有効化するとHarborにアップロードしたコンテナイメージの脆弱性をチェックすることができます。
myadmin@ubuntu:~$ sudo /opt/harbor/prepare myadmin@ubuntu:~$ sudo /opt/harbor/install.sh --with-chartmuseum --with-trivy
systemd
Harborをsystemdに登録します。
myadmin@ubuntu:~$ sudo tee /etc/systemd/system/harbor.service <<"EOF" [Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml up ExecStop=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml down [Install] WantedBy=multi-user.target EOF myadmin@ubuntu:~$ sudo chmod 644 /etc/systemd/system/harbor.service myadmin@ubuntu:~$ sudo systemctl enable harbor.service
rebootしてHarborが起動することを確認しておきましょう。
myadmin@ubuntu:~$ sudo reboot myadmin@ubuntu:~$ systemctl status harbor.service
DockerにHarborのクレデンシャルを登録
Harbor(Dockerレジストリ)に対してpull/pushを行う際に認証が必要となります。一度ログインするとクレデンシャルが保存されるため次回からは入力不要です。この操作はDockerからHarborを利用する全ホストに必要となります。
myadmin@ubuntu:~$ docker login harbor.si1230.com