手当たり次第に書くんだ

飽きっぽいのは本能

Harbor プライベートコンテナレジストリ構築 – Kubernetes / Docker 向け内部レジストリを用意する

Harbor は、Docker や Kubernetes で利用するコンテナイメージを内部で保管するためのプライベートコンテナレジストリです。Docker Hub などの外部レジストリだけに依存せず、検証済みイメージや内部向けイメージを管理したい場合に使います。

この記事では、Harbor を単なる Docker 手順としてではなく、Kubernetes や Helm Chart 管理とつながる内部レジストリとして整理します。重要なのは、イメージを置けることだけではなく、TLS、証明書信頼、harbor.yml、クライアント側の認証、再現性をまとめて扱うことです。

なぜ Harbor が必要なのか

  • 内部でビルドしたコンテナイメージを保管する
  • 外部レジストリへの依存を減らす
  • 閉域環境やプロキシ環境でイメージ配布を安定させる
  • Kubernetes ノードから取得するイメージを管理する
  • Helm Chart や OCI artifact の保管場所としても使える

Kubernetes を運用すると、イメージの取得元はインフラの一部になります。Pod 定義や Helm Chart だけを管理しても、参照先のイメージが消えたり、外部通信に依存したりすると再現性が落ちます。

構成の前提

Harbor は Web UI、registry、database、jobservice など複数のコンポーネントで構成されます。小規模環境では Harbor のインストーラを使って Docker Compose ベースで起動する構成が扱いやすいです。

  • Harbor 用の FQDN を用意する
  • TLS 証明書を用意する
  • Docker または containerd から信頼できる CA を配置する
  • Harbor のデータ保存先を決める
  • バックアップ対象を明確にする

TLS 証明書を用意する

Harbor は内部向けでも TLS を前提にした方がよいです。自己署名証明書や内部 CA を使う場合は、Harbor サーバーだけでなく、Docker / containerd / Kubernetes ノード側で CA を信頼させる必要があります。

sudo mkdir -p /etc/docker/certs.d/harbor.example.com
sudo cp ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt
sudo systemctl restart docker

containerd を使う Kubernetes ノードでは、containerd 側のレジストリ設定や OS の信頼ストアも確認します。証明書の問題は、ログインや pull の失敗として現れやすいです。

Harbor インストーラを取得する

Harbor のバージョンは更新されるため、実際に構築する時点でリリースを確認します。以下は流れの例です。

sudo mkdir -p /opt/harbor
cd /opt
sudo wget https://github.com/goharbor/harbor/releases/download/vX.Y.Z/harbor-offline-installer-vX.Y.Z.tgz
sudo tar xzf harbor-offline-installer-vX.Y.Z.tgz
sudo rm -f harbor-offline-installer-vX.Y.Z.tgz

古い手順の固定バージョンをそのまま使うのではなく、利用する Docker / Kubernetes / Harbor の組み合わせを確認してから進めます。

harbor.yml を設定する

Harbor の主要設定は harbor.yml に記述します。サンプルをコピーしてから編集します。

cd /opt/harbor
sudo cp harbor.yml.tmpl harbor.yml
sudo sed -n '1,160p' harbor.yml

最低限、hostname、TLS 証明書、データ保存先、管理者パスワードを確認します。

hostname: harbor.example.com

https:
  port: 443
  certificate: /path/to/server.crt
  private_key: /path/to/server.key

data_volume: /data/harbor

hostname は、Docker / containerd / Kubernetes から参照するレジストリ名と一致させます。ここが曖昧だと、証明書の名前不一致や pull 失敗につながります。

Harbor を起動する

設定ができたら、インストールスクリプトで Harbor を起動します。

cd /opt/harbor
sudo ./prepare
sudo ./install.sh
sudo docker compose ps

古い環境では docker-compose、新しい環境では docker compose を使う場合があります。環境に合わせて確認します。

ログインと push / pull を確認する

Docker クライアントから Harbor にログインし、イメージを push / pull できるか確認します。

docker login harbor.example.com
docker pull nginx:latest
docker tag nginx:latest harbor.example.com/library/nginx:latest
docker push harbor.example.com/library/nginx:latest
docker pull harbor.example.com/library/nginx:latest

ここで失敗する場合は、認証、プロジェクト権限、TLS 証明書、名前解決、プロキシ設定を切り分けます。

Kubernetes から利用する

Kubernetes から private image を取得する場合は、imagePullSecret を使います。

kubectl create secret docker-registry harbor-regcred \
  --docker-server=harbor.example.com \
  --docker-username=<user> \
  --docker-password=<password> \
  --docker-email=admin@example.com
apiVersion: v1
kind: Pod
metadata:
  name: harbor-pull-test
spec:
  imagePullSecrets:
    - name: harbor-regcred
  containers:
    - name: nginx
      image: harbor.example.com/library/nginx:latest

Kubernetes ノード側で Harbor の CA を信頼していない場合、Secret が正しくても pull に失敗します。認証と TLS 信頼は別の問題として確認します。

運用で管理するもの

  • Harbor の FQDN と TLS 証明書
  • Harbor のデータディレクトリ
  • プロジェクトと権限
  • イメージのタグ付けルール
  • Kubernetes 側の imagePullSecret
  • バックアップとリストア手順

まとめ

Harbor は、内部コンテナレジストリとして Docker / Kubernetes の運用を支える基盤です。単にイメージを置くだけではなく、TLS、証明書信頼、認証、プロジェクト権限、Kubernetes からの pull、バックアップまで含めて設計します。

Kubernetes を継続運用するなら、マニフェストや Helm Chart だけでなく、そこから参照されるコンテナイメージも管理対象です。Harbor を用意することで、外部レジストリ依存を減らし、閉域環境や自宅インフラでも再現性のあるコンテナ運用を作りやすくなります。

参考
書籍
参考書籍

Kubernetes完全ガイド 第2版

Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連記事

Harbor プライベートコンテナレジストリ構築 – Kubernetes / Docker 向け内部レジストリを用意する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る