CRD (CustomResourceDefinitions) を作成して NSX ロード バランサの使用状況を監視し、デフォルトのロード バランサでは処理できない Ingress ワークロードを処理するための追加の NSX レイヤー 7 ロード バランサを作成できます。これらの CRD は、Kubernetes LoadBalancer サービス用に作成されたレイヤー 4 ロード バランサのスケーリングのためのものではありません。

この機能をマネージャ モードで使用する場合は、NCP 2.5.1 以降が必要です。ポリシー モードで使用する場合は、NCP 3.0.1 以降が必要です。

次の CRD を作成できます。
  • NSXLoadBalancerMonitor - この CRD は、NSX ロード バランサの使用統計情報を報告するために使用されます。ポリシー モードの場合、この CRD は LoadBalancer CRD で作成された名前空間のロード バランサのみを監視します。
  • LoadBalancer - この CRD は、新しい NSX ロード バランサを作成するために使用されます。このリソースの定義は、NCP YAML ファイルにあります。ポリシー モードと PKS 環境の場合は、名前空間のリソースです。マネージャ モード環境の場合、これはクラスタ全体のリソースになります。
マネージャ モードでこの機能を有効にするには、次の操作を行います。
  • k8s セクションの enable_lb_crd オプションを True に設定します。
  • 次のコマンドを使用して、NCP YAML ファイルを適用します。

    kubectl apply -f ncp-<platform>.yaml

ポリシー モードで有効にする場合は、次の操作を行います。
  • NCP を以前のバージョンから 3.0.1 にアップグレードした場合は、次のコマンドを使用して、古い CRD の定義を削除します。
    kubectl delete crd nsxlbmonitors.vmware.com
    kubectl delete crd loadbalancers.vmware.com
  • k8s セクションの enable_lb_crdenable_vnet_crd オプションを True に設定します。
  • 次のコマンドを使用して、NCP YAML ファイルのポリシー バージョンを適用します。

    kubectl apply -f ncp-<platform>-policy.yaml

マネージャ モードで新しい NSX ロード バランサを作成するには、LoadBalancer CRD を定義している YAML ファイルを適用します。次はその例です。
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    httpConfig: {}
ポリシー モードの場合、 VirtualNetwork を使用して LoadBalancer を作成する必要があります。次はその例です。
apiVersion: vmware.com/v1alpha1
kind: VirtualNetwork
metadata:
    name: vnet
---
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    virtualNetworkName: vnet # Set to match VirtualNetwork object name
    httpConfig: {}

この YAML ファイルは、小規模サイズの NSX ロード バランサと、パーシステンス、SSL、または X-Forward 設定を持たないレイヤー 7 仮想サーバのペアを作成します。仮想サーバの IP アドレスは、ロード バランサ用に設定されたデフォルトの外部プールから割り当てられます。デフォルトのポートは 80 および 443 です。HTTP HOST ヘッダーにカスタム ポートが含まれている場合は、標準以外のポートもサポートされます。

LoadBalancer CRD の作成ステータスを確認するには、次のコマンドを実行します。
kubectl get lb <name of the LoadBalancer> -o yaml
結果は次のようになります。
status:
 conditions:
 - status: "True"
   type: Ready
 httpVirtualIP: <realized virtual IP>

この結果は、作成が成功したことを示します。作成に失敗した場合、status"False" となり、仮想 IP アドレスは含まれません。

NSX ロード バランサおよび仮想サーバの設定をカスタマイズすることもできます。仮想サーバの IP アドレスおよびポートを設定する方法:
spec:
    httpConfig:
        virtualIP: <ip address, default to auto-allocate>
        port: <port number, default to 80>
セッションのアフィニティと X-Forwarded-mode を指定する方法:
spec:
    httpConfig:
         xForwardedFor: <INSERT or REPLACE, default to None>
         affinity:
             type: <source_ip or cookie, default to None>
             timeout: <timeout number, default to 10800>
TLS 設定を構成する方法:
spec:
    httpConfig:
        tls:
            port: <tls port number, default to 443>
            secretName: <name of secret, default to None>
            secretNamespace: <namespace of secret, default to None>
HTTP ポートと HTTPS ポートをデフォルト以外の値に設定しても、Kubernetes の制限により、Ingress ステータスを表示するときに Ingress プリンタには常にデフォルトのポート値(80 および 443)が表示されます。Ingress にアクセスするには、引き続き設定されたポートを使用する必要があります。次はその例です。
curl -I -HHost:tea.example.com http://$INGRESS_IP:$CRD_LB_HTTP_PORT/tea

LoadBalancer の作成前または作成後にシークレットを作成できます。証明書を更新するには、最初に LoadBalancer の仕様から secretName および secretNamespace を削除し、シークレットのデータを更新してから、上記の設定を使用して同じシークレットを再接続します。新しいシークレットの作成および secretNamesecretNamespace の更新も同じ動作をします。異なる CRD ロード バランサ間で同じシークレット データを共有することはサポートされていません。異なる証明書を使用して CRD ロード バランサを設定する必要があります。

NSX ロード バランサのステータスと統計情報を表示するには、次のコマンドを実行します。
kubectl get lbm
これにより、NSX ロード バランサごとに、すべての NSXLoadBlancerMonitors が一覧表示されます。次の情報が表示されます。
  • 使用状況 - NSX ロード バランサ上のワークロードの数。
  • トラフィック - 各仮想サーバの集約された統計情報。
  • 健全性 - このフィールドには 2 つのディメンションがあります。
    • servicePressureIndex - ロード バランサのパフォーマンスを示します。スコアと重要度という 2 つの値が提供されます。
    • infraPressureIndex - 基盤となるインフラストラクチャ コンポーネントのパフォーマンスを示します。NCP 2.5.1 では、この値は必ずしも正確ではありません。
    • フィールド metrics には、健全性スコアの計算時に考慮されるパラメータの概念が示されています。

ロード バランサの servicePressureIndexHIGH の場合は、Ingress のワークロードを別のロード バランサに移行できます。これは、LoadBalancer CRD を使用して作成されたデフォルトのロード バランサである必要があります。

専用ロード バランサに Ingress を配置するには、Ingress の仕様にアノテーションを追加します。次はその例です。
 annotations:
   nsx/loadbalancer: <name of the LoadBalancer CRD>

アノテーションがない場合、または null に設定されている場合、Ingress はデフォルトの NSX ロード バランサに配置されます。