vm.gowatana.jp

NEOにほんごVMware(仮)

TKG の Harbor 2.7.1 OVA をデプロイしてみる。

Tanzu Kubernetes Grid(TKG)2.2 には、さりげなく Harbor 2.7.1 の OVA が同梱されています。これは TKG の Management Cluster をインターネット隔離環境にインストールするためだけに提供されているようですが、自宅ラボむけに便利なのでためしにデプロイしてみました。

 

ドキュメントは下記のあたりです。

 

今回の内容です。

 

OVA ファイルの入手

Customer Connect にある TKG 2.2.0 のダウンロード ページから、下記をダウンロードしておきます。

VMware Tanzu Kubernetes Grid 2.2.0 ダウンロード ページ

 

Photon v4 Harbor v2.7.1 OVA のファイル

  • photon-4-harbor-v2.7.1+vmware.1-dfd94f1401c510c355438a02521e72ce5e8042b5.ova

 

OVA のデプロイ

一般的な OVA と同様に、vSphere Client の「OVF テンプレートのデプロイ」からデプロイします。ただし特別なことは 1箇所くらいしかないので、ひたすら普通に進めます。

 

1. OVF テンプレートの選択

「ローカル ファイル」を選択して、OVA ファイルをアップロードします。

 

2. 名前とフォルダの選択

仮想マシン名と、仮想マシン フォルダを選択します。

 

3. コンピューティング リソースの選択

リソース プール(もしくは、クラスタやホスト)を選択します。

 

4. 詳細の確認

ただ確認して次へ・・・

 

5. 使用許諾契約書

使用許諾契約書に同意します。

 

6. ストレージの選択

データストアを選択します。

 

7. ネットワークの選択

ポートグループを選択します。

 

8. テンプレートのカスタマイズ

今回は、Harbor で使用する証明書を自動生成しようと思うので、ここから注意が必要です。

Root Password には、OS の root ユーザに設定するパスワードを入力します。

 

Hostname には、Harbor のゲスト OS に設定するホスト名を設定します。ただし、ここで入力する文字列は、自動生成される証明書の CN / SAN フィールドにも設定されます。

つまりホスト名を入力するのであれば、Web ブラウザ / docker CLI などから Harbor に アクセスする際に指定する名前を入力する必要があります。そのため、ショート ネームではなく FQDN(lab-harbor-03 ではなく lab-harbor-03.go-lab.jp といったように)を入力しておきます。

ちなみに Hostname が空欄の場合は、CN / SAN には IP アドレスが設定されます。

 

Harbor の Administrator(admin)ユーザと、内部で利用されるデータベースのパスワードもここで設定します。

 

証明書を自動生成するため、「Use Self-Signed Certificate for Harbor」のチェックはオン(デフォルトのまま)にしておきます。

 

そして、ネットワーク設定のパラメータも入力しておきます。

ちなみにここで DNS を「,」区切りで複数指定すると、Harbor の起動まで成功しますが、DNS アドレスは設定されません。

 

Hostname に FQDN を入力したことを確認して「完了」をクリックします。

 

OVA のデプロイが完了したら、仮想マシンをパワーオンしてしばらく待ちます。

 

Harbor の Web UI へのログイン

Harbor のアドレスに HTTPS でアクセスして、ブラウザの証明書エラーを無視して進めると、Harbor のログイン画面が表示されます。

下記でログインできます。

  • ユーザ: admin
  • パスワード: OVA デプロイ中に Administrator Password として設定したもの

 

ログインできました。

 

証明書を確認すると、一般名(CN:コモンネーム)には、期待通りショート ネームではなく FQDN が設定されています。

 

そしてサブジェクト代替名(SAN)にも FQDN が設定されています。

 

クライアントからのアクセス

docker CLI などからアクセスするため、Harbor の CA Root 証明書を入手します。

これは「Configuration」→「System Settings」にある、Registry Root Certificate の「Download」ボタンからダウンロードできます。

もしくは、curl などで下記の URL から直接ダウンロードすることも可能です。ちなみに証明書のダウンロードについては、ユーザ認証は不要です。

 

クライアントとして、VMware Photon OS 5.0 の OVA をデプロイしてあります。

root@lab-photon50-01 [ ~ ]# cat /etc/photon-release
VMware Photon OS 5.0
PHOTON_BUILD_NUMBER=dde71ec57

 

docker サービスを起動しておきます。

root@lab-photon50-01 [ ~ ]# systemctl start docker
root@lab-photon50-01 [ ~ ]# systemctl enable docker

 

このままだと、Harbor レジストリにアクセスする際に証明書エラーとなってしまいます。

root@lab-photon50-01 [ ~ ]# docker login lab-harbor-03.go-lab.jp
Username: admin
Password:
Error response from daemon: Get "https://lab-harbor-03.go-lab.jp/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

 

そこで、Harbor の CA Root 証明書をダウンロードして、docker CLI 実行ホストの下記ディレクトリに配置します。

  • /etc/docker/certs.d/<Harbor のアドレス>
root@lab-photon50-01 [ ~ ]# mkdir -p /etc/docker/certs.d/lab-harbor-03.go-lab.jp
root@lab-photon50-01 [ ~ ]# curl -k -o /etc/docker/certs.d/lab-harbor-03.go-lab.jp/ca.crt https://lab-harbor-03.go-lab.jp/api/v2.0/systeminfo/getcert

 

これで、docker CLI から Harbor にアクセスできるようになります。

root@lab-photon50-01 [ ~ ]# docker login lab-harbor-03.go-lab.jp
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

とりあえず Docker Hub から busybox のコンテナ イメージを pull して・・・

root@lab-photon50-01 [ ~ ]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
809d8e20e203: Pull complete
Digest: sha256:2376a0c12759aa1214ba83e771ff252c7b1663216b192fbe5e0fb364e952f85c
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

 

Harbor に push できました。

root@lab-photon50-01 [ ~ ]# docker tag busybox lab-harbor-03.go-lab.jp/library/busybox:latest
root@lab-photon50-01 [ ~ ]# docker push lab-harbor-03.go-lab.jp/library/busybox:latest
The push refers to repository [lab-harbor-03.go-lab.jp/library/busybox]
feb4513d4fb7: Pushed
latest: digest: sha256:67a8ef886e2ca4055f00e7cd13aedb9b24148c1451a6832d16fcc997a157eedc size: 528

 

Web UI でも、デフォルトで作成されている「library」プロジェクトに push できていることが確認できます。

 

おまけ

Harbor が自己署名の証明書を利用しているので、curl でのアクセスでは「-k」オプションを付けないと証明書エラーになります。

root@lab-photon50-01 [ ~ ]# curl https://lab-harbor-03.go-lab.jp/api/v2.0/systeminfo/getcert
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

 

この証明書エラーは、Photon OS 5.0 の場合は /etc/pki/tls/certs/ca-bundle.crt ファイルに CA Root 証明書を追加すると解消できます。

ca-bundle.crt ファイルをバックアップして、CA Root 証明書を追加します。

root@lab-photon50-01 [ ~ ]# cp -p /etc/pki/tls/certs/ca-bundle.crt ./ca-bundle.crt.bk
root@lab-photon50-01 [ ~ ]# curl -k https://lab-harbor-03.go-lab.jp/api/v2.0/systeminfo/getcert >> /etc/pki/tls/certs/ca-bundle.crt

 

curl でも「-k」オプションなしで Harbor にアクセス可能になりました。

root@lab-photon50-01 [ ~ ]# curl https://lab-harbor-03.go-lab.jp/api/v2.0/systeminfo/getcert | head -3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1972  100  1972    0     0  21184      0 --:--:-- --:--:-- --:--:-- 21434
-----BEGIN CERTIFICATE-----
MIIFgzCCA2ugAwIBAgIUcAfFDbwW5rRf9Gj5rKyJe405nS4wDQYJKoZIhvcNAQEL
BQAwUTELMAkGA1UEBhMCQ04xDDAKBgNVBAgMA1BFSzEQMA4GA1UEBwwHQmVpSmlu

 

以上、TKG の Harbor OVA をデプロイしてみる話でした。