Ubuntu 18.04にHarbor 1.10をインストールする


はじめに

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証明書とサーバ証明書を作成します。

  1. 作業用ディレクトリcertをホームディレクトリ配下に作成します。

    $ mkdir ~/cert
    $ cd ~/cert
    
  2. CA用の秘密鍵ca.keyを生成します。

    $ openssl genrsa -out ca.key 4096
    
  3. 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
    
  4. サーバ証明書用の秘密鍵harbor.tta.local.keyを生成します。

    $ openssl genrsa -out harbor.tta.local.key 4096
    
  5. 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
    
  6. 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
    
  7. 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
    

証明書の配置

  1. /data/certディレクトリを作成して、サーバ証明書をコピーします。

    $ sudo mkdir -p /data/cert
    $ sudo cp harbor.tta.local.crt /data/cert/
    $ sudo cp harbor.tta.local.key /data/cert/
    
  2. 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
    
  3. Dockerをリスタートします。

   $ sudo systemctl restart docker

Harborのインストール

  1. 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
    
  2. インストーラーに含まれている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
    
  3. インストールスクリプトを実行します。

    $ sudo ./install.sh --with-notary --with-clair --with-chartmuseum
    
  4. インストール完了後、https://harbor.tta.localにアクセスすると以下のようにログイン画面が表示されます。

HarborにDockerイメージをpushする

macOSからnginxイメージをHarborにpushしてみます。

  1. CA証明書をMacにインポートします。

    $ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ./ca.crt
    
  2. Dockerを一度再起動した後、Harborにログインします。

    $ docker login harbor.tta.local
    Username: admin
    Password: 
    Login Succeeded
    
  3. nginxイメージをpullします。

    $ docker pull nginx:latest
    
  4. nginxイメージをHarborにpushします。

    $ docker tag nginx:latest harbor.tta.local/library/nginx:latest
    $ docker push harbor.tta.local/library/nginx:latest
    
  5. Harborの[Projects]画面からlibraryプロジェクトに移動し、[Repositories]タブから一覧にnginxイメージがpushされていることを確認します。