vSphere with Tanzu にて、NSX-T なしでの Tanzu Kubernetes クラスタをしていきます。
今回は、NSX-T によるロードバランサーの代わりとなる、HAProxy 仮想アプライアンスをデプロイします。
前回はこちら。
vSphere 7.0 U1 での with Tanzu ラボ環境構築。Part-01 事前準備編
HAProxy 仮想アプライアンスについて。
HAProxy の仮想アプライアンス(.ova ファイル)のダウンロードサイトは、
KB などでも案内されていますが、MyVMware ではありません。
Where to find HA Proxy OVA Image and Configuration Requirements for vSphere with Tanzu (80735)
https://kb.vmware.com/s/article/80735
HAProxy Technologies の GitHub ページからダウンロードできます。
今回は、vmware-haproxy-v0.1.8.ova ファイルをダウンロードして使用しています。
GitHub - haproxytech/vmware-haproxy
HAProxy のデプロイ。
HAProxy は、一般的な仮想アプライアンスと同様、vSphere Client などからデプロイします。
今回は、スーパーバイザー クラスタにする(ワークロード管理を有効化する)クラスタの中に
HAProxy の .ova ファイルをデプロイします。
クラスタを右クリック →「OVF テンプレートのデプロイ」を開きます。
私のラボ環境だと、URL を直接指定すると失敗しやすいので、
vmware-haproxy-v0.1.8.ova ファイルをローカルにダウンロードしたうえで指定しています。
仮想マシン名とデータセンター(またはフォルダ)を指定して「次へ」。
クラスタ(またはリソースプール)を選択して「次へ」。
.ova ファイルの内容確認画面も「次へ」。
使用許諾契約書を読んで、チェックをいれて「次へ」。
ここから、HAProxy ならではのパラメータ指定がはじまります。
「デプロイ構成」では、「Default」と、「Frontend Netowrk」(を追加する構成)が選択できます。
今回はできるだけシンプルなラボ構成にしたいため、「Default」を選択しています。
今回は NFS データストアに、シン プロビジョニングでデプロイします。
容量はシステム要件に対してだいぶ少ない(200GB)ですが、ラボの構築は可能です。
ちなみに、すでに消費されている容量は Tanzu Kubernetes Grid のコンテンツ ライブラリによるものです。
「ネットワークの選択」では、事前作成してある分散ポートグループを選択します。
今回は「Default」構成のため、Frontend で選択したポートグループは無視されます。
そこで下記のように適当に選択しています。
- Management: DPortGroup-0010-MGMT
- Workload: DPortGroup-0021-WL1
- Frontend: 適当なポートグループ
「テンプレートのカスタマイズ」でパラメータを入力しつつ、下にスクロールしていきます。
- OS の root ユーザのパスワードを入力します。
- root ユーザでのログインを許可(Permit Root Login のチェックをオン)しておきます。
- TLS 証明書のパラメータは、今回はデフォルトのまま空欄にしています。
そして画面を下にスクロール・・・
下記を入力して、下にスクロールします。
- ホスト名
- DNS サーバのアドレス(カンマ区切り)
- Management IP
- HAProxy のネットワーク アダプタ 1 に設定される。
- このあと「ワークロード管理」の有効化で、「データプレーン API のアドレス」として指定することになる。
- Management Gateway
- Management IP のデフォルト ゲートウェイ。
ワークロード ネットワークのアドレスを入力して、下にスクロールします。
- Workload IP
- HAProxy のネットワーク アダプタ 2 に設定される。
- Kubernetes のワークロード(制御プレーンや Pod)が通信するネットワークの IP アドレス。
- Workload Gateway
- ワークロード ネットワークのゲートウェイ。
ロードバランサーの設定(Load Balancing)のパラメータを入力します。
- Load Balancer IP Range
- Kubernetes の Load Balancer リソースによる VIP に払い出す IP アドレスのレンジを指定します。
- あとで「ワークロード管理」の有効化でも、このレンジに合わせたアドレス入力があります。
- このレンジの IP アドレスは、実際に VIP を払い出してなくても HAProxy が応答するようになってしまうので、
他で利用している IP アドレスとは重ならないように指定します。 - 今回はワークロード ネットワークとして 192.168.21.0/24 を用意しているので、
このレンジでは 192.168.21.128/25(192.168.21.128 ~ .254 に応答するようになる)を指定します。
- Dataplane API Management Port
- デフォルトのまま 5556。
- HAProxy User ID
- デフォルトだと空欄なので、今回は「admin」。
- HAProxy Password
- HAProxy User ID で入力したユーザの、パスワードを指定(2回入力)
パラメータを入力したら、「次へ」をクリックします。
確認画面が表示されるので、「完了」をクリックするとデプロイが開始されます。
HAProxy の起動。
デプロイ処理が完了したら、パワーオンします。
ちなみに「Default」構成のため Frontend として指定したポートグループは無視され、
ネットワーク アダプタは 2つのみ作成されています。
VM 起動後は、ゲスト OS で自動的にネットワーク設定や HAProxy の設定は実行されます。
そのため少し待っておきます。
CA 証明書の取得。
このあとに実施する「ワークロード管理」の有効化で、
HAProxy 仮想アプライアンスで自動生成された CA 証明書が必要になります。
これは、VM の詳細設定から取得できます。
起動後の HAProxy VM で、右クリック →「設定の編集」を開きます。
「仮想マシン オプション」タブにある、「詳細」→「詳細設定」を開きます。
「構成パラメータ」画面が開くので、「guestinfo.dataplaneapi.cacert」の長い文字列を記録しておきます。
これが、Base64 エンコーディングされた CA 証明書です。
この長い文字列は、Linux であれば下記のように base64 -d コマンドで証明書にデコードできます。
$ echo "長い文字列" | base64 -d
Windows の PowerShell では、下記のようにデコードできます。
PS> $Base64cert = "長い文字列"
PS> [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String($Base64cert.Value))
ちなみに、個人的には、vSphere with Tanzu Quick Start Guide | VMwareを参考にして
下記のような PowerShell / PowerCLI スクリプトを用意して証明書を取得しています。
get_haproxy_vm_cacert.ps1 · GitHub
$VMname = $args[0]
$AdvancedSettingName = "guestinfo.dataplaneapi.cacert"
$Base64cert = Get-VM $VMname | Get-AdvancedSetting -Name $AdvancedSettingName
$cert = [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String($Base64cert.Value))
$cert
下記のような感じで証明書が取得できます。
「-----BEGIN CERTIFICATE-----」 ~ 「-----END CERTIFICATE-----」の文字列を、
そのままこの後で入力することになります。
PS> Connect-VIServer lab-vc-04.go-lab.jp -Force
PS> .\get_haproxy_vm_cacert.ps1 lab-haproxy-41
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJAL1hdYJhEykrMA0GCSqGSIb3DQEBBQUAMG4xCzAJBgNV
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlQYWxvIEFsdG8x
・・・
awIo/nyGgU48YiylWNyJKtjO7rJ01TLEoq6KSAzPw1Y/MMunJCeCAZqoS9X/2pUL
nF4DBb08fK97UpSBSaaHzugJEAIeiTXmGot4ScPegKJzOzM9zKzfjBu84b0FYoxM
S8HtOipnxBTPS3iGgCQ05OKP9pAqi7l1lliiHMS7VNJvzxYhtycY9O7Gu3qA6PKm
TQt7IUDi3+cr8RFuFY2TJ+3zRqTf
-----END CERTIFICATE-----
つづく!