NCP は、各サービス ポートにレイヤー 4 のロード バランサ仮想マシンおよびプールを作成します。

この機能の詳細:
  • TCP および UDP の両方がサポートされます。
  • 各サービスには一意の IP アドレスが割り当てられます。
  • サービスには、LoadBalancer 定義の loadBalancerIP フィールドに基づいて外部 IP アドレス プールから IP アドレスが割り当てられます。loadBalancerIP フィールドは空白の場合もあれば、IP アドレスが設定されている場合もあります。また、IP アドレス プールの名前または ID が指定されている場合もあります。loadBalancerIP フィールドが空白の場合、IP アドレスは、ncp.ini[nsx_v3] セクションにある external_ip_pools_lb オプションで指定された外部 IP アドレス プールから割り当てられます。external_ip_pools_lb オプションがない場合は、external_ip_pools で指定されたプールが使用されます。LoadBalancer サービスは、この IP アドレスとサービス ポートを通じて公開されます。
  • 構成を変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。
  • loadBalancerIP によって指定された IP プールには、scope: ncp/owner, tag: cluster:<cluster_name> タグが必要です。

  • ポリシー モードでは、セレクタのない LoadBalancer タイプのサービスがサポートされます。このようなサービスの場合、NSX ロード バランサの SNAT IP アドレスは LoadBalancer タイプのサービスの IP アドレスになります。LoadBalancer タイプのサービスの IP アドレスを更新すると、NSX ロード バランサの SNAT IP アドレスが更新されます。セレクタのないサービスは、セレクタのない別のサービスのエンドポイントとして構成できません。
  • ポリシー モードでは、注釈 ncp/transparent-lbtrue に設定して、ロード バランサ プールで SNAT を無効にできます。この機能は、単一層トポロジでのみサポートされます。
  • NSX のデフォルトでは、ロード バランサの仮想サーバ、サーバ プール、プール メンバーの数に制限があります。これらの制限を回避するには、[nsx_v3] relax_scale_validationtrue に設定します。
  • NCP のデフォルトでは、ロード バランサのプール メンバー数に制限は適用されません。この動作を変更するには、[nsx_v3] ncp_enforced_pool_member_limit パラメータを使用します。この機能はポリシー モードでのみサポートされています。この機能を使用するには、[nsx_v3] l4_lb_auto_scalingfalse に設定する必要があります。ncp_enforced_pool_member_limit のオプションは次のとおりです。
    • DEACTIVATE - NCP はプール メンバーの制限を適用しません。
    • ACTIVATE - NCP はプール メンバーの制限を適用し、ロード バランサで CPU またはメモリが過剰に使用されないようにします。relax_scale_validationfalse に設定され、members_per_small_lbs または members_per_medium_lbsNSX スケール制限よりも大きい値に設定されている場合は、NSX スケールが適用されるため、この構成は不要になります。
  • サービスにはエラーのアノテーションが追加されます。エラー キーは ncp/error.loadbalancer です。想定されるエラーは次のとおりです。
    • ncp/error.loadbalancer: IP_POOL_NOT_FOUND

      このエラーは、指定した loadBalancerIP: <nsx-ip-pool> 中の <nsx-ip-pool> が見つからないことを示しています。サービスは非アクティブになります。エラーを修正するには、有効な IP アドレス プールを指定し、サービスを削除して再作成します。

    • ncp/error.loadbalancer: IP_POOL_EXHAUSTED

      このエラーは、指定した loadBalancerIP: <nsx-ip-pool> 中の IP アドレス プールで IP アドレスが枯渇していることを示しています。サービスは非アクティブになります。エラーを修正するには、使用可能な IP アドレスのある IP アドレス プールを指定し、サービスを削除して再作成します。

    • ncp/error.loadbalancer: IP_POOL_NOT_UNIQUE

      このエラーは、loadBalancerIP: <nsx-ip-pool> で指定された名前を持つ IP アドレス プールが複数あることを示します。サービスは非アクティブになります。

    • ncp/error.loadbalancer: POOL_ACCESS_DENIED

      このエラーは、loadBalancerIP で指定された IP アドレス プールに scope: ncp/owner, tag: cluster:<cluster_name> タグがないか、タグで指定されたクラスタが Kubernetes クラスタの名前と一致しないことを示します。

    • ncp/error.loadbalancer: LB_VIP_CONFLICT

      このエラーは、loadBalancerIP フィールドの IP アドレスがアクティブなサービスの IP アドレスと同じであることを示しています。サービスは非アクティブになります。

  • レイヤー 4 ロード バランサは、自動スケーリングをサポートしています。Kubernetes LoadBalancer サービスが追加の仮想サーバを必要とするように作成または変更されており、既存のレイヤー 4 ロード バランサに十分な容量がない場合、新しいレイヤー 4 ロード バランサが作成されます。また、NCP は、仮想サーバが接続されていないレイヤー 4 ロード バランサも削除します。この機能はデフォルトで有効になっています。この機能を無効にするには、NCP ConfigMap で l4_lb_auto_scalingfalse に設定する必要があります。
  • LoadBalancer タイプのサービスを作成するときに、loadBalancerSourceRanges パラメータを指定できます。この機能は、ポリシー モードでのみサポートされます。次はその例です。
    kind: Service
    metadata:
      name: nginx-service-lb
      labels:
        app: nginx
    spec:
      type: LoadBalancer
      loadBalancerSourceRanges:
        - "10.30.88.116/24"
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          name: tcp
    ...

    作成された NSX ロード バランサは、指定された送信元 IP アドレスからのトラフィックのみを許可します。これを検証するには、NSX Manager で仮想サーバの [アクセス リスト コントロール] を確認します。特定のグループへのアクセスが許可されます。このグループには、loadBalancerSourceRanges で指定された IP アドレスが含まれます。このグループを確認するには、[インベントリ] > [グループ] の順に移動します。