Harborは、Dockerコンテナの管理と保持に優れた手法です。著名な仮想マシンメーカーであるVMwareがHarborを開発し、その後、世界最大級のオープンソースプロジェクトとされるCNCFに引き継がれました。
Harborプロジェクトは、harbor dockerのプログラミング言語から発展しました。開発者やボランティアが協力して機能の向上やセキュリティ脅威の解消に努めました。
どちらの取り組みも、世界中のプログラマーの労力によって支えられました。そのため、一部で一貫性に欠ける可能性がありましたが、Harbor Container Registryでは、以前のバージョンよりも安全性を高めるために尽力しています。
Harborはクラウド上で開発されました。保存するだけでなく、画像の詳細なセキュリティ脆弱性のチェックも行います。また、開発者は自身のキーを使ってレジストリにアップロードした画像の正当性を確認できるため、コンテナ画像の信頼性が保証されます。
他のソリューションではなく、なぜHarborを選ぶべきか疑問に思うかもしれません。しかし、他のプログラムより優れている多くの理由があります。
レジストリを自由に制御し、望む通りにカスタマイズできる点が大きな魅力です。多くのプロバイダが多数の設定を提供しているにもかかわらず、提供された展開方法に縛られることが多いです。セルフホスティングであれば、実装の方法を自由に設定できます。
さらに、Harborには他では得られない独自の特徴があります。開発、品質保証、運用といった各環境ごとに異なるレジストリを持つのは一般的ですが、Harborではそれぞれを連携させながら管理することが容易です。複数の管理段階で画像を同期させながら運用を進める柔軟性も備えています。
商用環境では、AWSやGCP上にHarbor Kubernetesサーバを構築するのが一般的ですが、学習用としては複雑すぎます。ここでは、Kubernetesクラスターを手軽に立ち上げるMinikubeを使用します。minikube導入後、以下のコマンドで新しいクラスターを起動してください:
$ minikube start --vm-driver virtualbox
コマンド完了後、少々時間はかかりますが、動作するテクノロジースタックが得られます。次に、Harbor設定に接続するため、以下のコマンドでingressアドオンを有効にしてください:
$ minikube addons enable ingress
この時点でminikubeが設定されているはずです。その後、HelmのソースにHarborリポジトリを追加し、Helmテンプレートをインストールします:
$ helm repo add harbor https://helm.goharbor.io
ソース追加後、以下の手順でHelmチャートをデプロイしてください:
$ helm install my-release harbor/harbor
すべてのポッドが動作するまで待機する必要があります。kubectl get podsコマンドで状態を確認してください。依存関係により、一部が一時的に正常動作しない場合があります。大体15~20分程度待つことになるでしょう。ポッドにIPが割り当てられたら、minikube ipコマンドで確認してください。
次に、このIPを用いて/etc/hostsファイルを編集します。初期設定のURLはhttps://core.harbor.domainですが、ブラウザに入力した際にクラスターに接続されるよう設定する必要があります。以下の2行を/etc/hostsファイルに追加してください:
<ip-of-minikube> core.harbor.domain
<ip-of-minikube> notary.harbor.domain
これにより、https://core.harbor.domainへアクセスし、初期のユーザー名とパスワードでログインできるようになります。
username: admin
password: Harbor12345
動作中のHarborデプロイメントの利用を検討してもよいですが、レジストリとしてのみ使用する場合は注意が必要です。レジストリがアクセス不能にならないよう、Harborの認証情報をシステムに設定してください。
まず、minikube版のDockerサーバを利用するように設定する必要があります。LinuxまたはOS Xをお使いの場合、以下の方法を試してください:
その後、環境変数がminikubeのDockerサーバを参照するよう設定されます。次に、KubernetesのSecretから証明書を取得してください:
kubectl -n harbor get secrets harbor-ingress -o jsonpath="{.data['ca\.crt']}" | base64 -D > harbor-ca.crt
【注意】base64 -Dを使用しますが、Linuxではbase64 -dを使用してください。
これで、証明書を含むharbor-ca.crtファイルを入手しました。次に、認証情報をminikube VMにコピーして、Dockerサーバで利用できるようにしてください:
$ scp -o IdentitiesOnly=yes -i $(minikube ssh-key) harbor-ca.crt docker@$(minikube ip):./harbor-ca.crt
証明書の転送が完了したら、minikube VM上で以下のようにインストールしてください:
$ minikube ssh
$ sudo mkdir -p /etc/docker/certs.d/core.harbor.domain
$ sudo cp harbor-ca.crt /etc/docker/certs.d/core.harbor.domain
通常の端末に戻るにはexitを実行してください。認証情報が設定された後、ログインしてdocker画像をプッシュし、動作確認を行ってください:
$ docker login core.harbor.domain --username=admin --password Harbor12345
# Docker Hubから画像を取得
$ docker pull nginx
# 画像がプッシュ可能な状態でないため、タグ付けしてから実施
$ docker tag nginx core.harbor.domain/library/nginx:latest
# 画像をレジストリへプッシュ
$ docker push core.harbor.domain/library/nginx:latest
統合されたUAA認証: Harbor、VMware Tanzu Application Service for VMs (TAS for VMs)およびTKGIはUAA認証を共有できます。
LDAP/Active Directory (AD)との相互運用性: 身元管理やシステム管理のため、Harborは企業のLDAP/ADシステムと連携します。
RESTful API: 外部システムとの連携が容易なRESTful APIが、ほとんどの管理作業に利用できます。 RESTful APIs
プロジェクトの再作成: Harborはプロジェクトの複製をサポートし、あるHarborアカウントから別のアカウントへソースを複製できます。
ここまで進めば、Harborはインストールされ動作しており、自社専用のレジストリとして利用可能です。これにより、レジストリの使い方や実装方法を自由に設定できます。また、攻撃検知やコンテナ画像の複製検出など、オープンソースプログラムの全機能を活用できます。
最新情報を購読