Harbor(プライベートコンテナレジストリ)のインストール

ITのブログ

概要

kubernetesを使う上でコンテナレジストリの機能が欲しいと思いましたので、インストール手順を確認してみました。

環境

#ソフトウェアバージョン
1Virtualbox7.0.4
2Rocky Linux9.1
3docker-ce20.10.22-3
4containerd.io1.6.14.03.1
5docker-compose-plugin2.14.1-3
6harbor2.7.0

前提

  • Rocky Linuxのインストールで「最小限のインストール」を選択
  • 検証であるため、firewalldを無効化
  • Harborオフラインインストールパッケージの配置については省略
  • インターネットに接続できる環境で実施

手順

事前設定

1.ホスト名の設定

hostnamectl set-hostname <ホスト名>

2.hostsの修正
※必要な名前解決を追加する。

vi /etc/hosts

3.OSの再起動

shutdown -r now

dockerのインストール

1.dockerのrepoを登録

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

2.dockerのインストール
※対話は全て「y」を押下する。

dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3.dockerの起動と自動起動設定

systemctl enable --now docker

HTTPS用の証明書作成

1.ディレクトリ移動

cd /tmp/harbor

2.CA証明書のプライベートキーを作成

openssl genrsa -out ca.key 4096

3.CA証明書の作成
※サブジェクトは所属している組織に合わせて修正が必要です。

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=<ドメイン名>" \
 -key ca.key \
 -out ca.crt

4.プライベートキーの作成

openssl genrsa -out <ドメイン名>.key 4096

5.CSRの作成
※サブジェクトは所属している組織に合わせて修正が必要です。

openssl req -sha512 -new \
    -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=<ドメイン名>" \
    -key <ホスト名>.key \
    -out <ホスト名>.csr

6.x509 v3 拡張ファイルの作成

6.x509 v3 拡張ファイルの作成
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=<ドメイン名>
DNS.2=<サブドメイン名>
DNS.3=<ホスト名>
EOF

7.v3.extファイルを使用して証明書の作成

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in <ホスト名>.csr \
    -out <ホスト名>.crt


Harbor及びDockerへ証明書の配置

1.harborが使用する証明書とプライベートキーの配置
※後ほどharbor.ymlファイルにパスを記載します。

mkdir -p /data/cert
cp <ホスト名>.crt /data/cert/
cp <ホスト名>.key /data/cert/

2.Dockerが使用可能な証明書に変換

openssl x509 -inform PEM -in <ホスト名>.crt -out <ホスト名>.cert

3.Dockerが使用する証明書フォルダに配置

mkdir -p /etc/docker/certs.d/<ホスト名>:<ポート>/
例:mkdir -p /etc/docker/certs.d/harbor:443/

cp <ホスト名>.cert /etc/docker/certs.d/<ホスト名>:<ポート>/
cp <ホスト名>.key /etc/docker/certs.d/<ホスト名>:<ポート>/
cp ca.crt /etc/docker/certs.d/<ホスト名>:<ポート>/

4.dockerの再起動

systemctl restart docker

harborのインストール

1.オフラインインストールパッケージの解凍
※事前に/data/harborに配置しています。

tar xzvf harbor-offline-installer-<バージョン>.tgz

2.harbor.ymlの編集

cd ./harbor
mv harbor.yml.tmpl harbor.yml
vi harbor.yml
※以下のオプション(★の箇所)を修正する。
----------------------------------------------------
# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: <ホスト名>★

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to h
ttps port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/<ホスト名>.crt★
  private_key: /data/cert/<ホスト名>.key★

※以下省略
----------------------------------------------------

3.harborのインストール

./install.sh

その他手順

Harborの起動停止

Harborの起動

cd <harborのdocker-compose.ymlが配置されているディレクトリ>
docker compose start

Harborの停止

cd <harborのdocker-compose.ymlが配置されているディレクトリ>
docker compose stop

レジストリ登録手順例

hello-worldのコンテナをレジストリに登録する手順となります。

1.tagを変更

ocker tag <IMAGE ID> <ホスト名>:443/library/hello-world

2.harborにログイン

docker login <ホスト名>:443

3.コンテナをレジストリに登録

docker push <ホスト名>:443/library/hello-world

コメント

タイトルとURLをコピーしました