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 をデプロイしてみる話でした。