NCP erstellt für jeden Dienst-Port einen virtuellen Server und einen Pool des Load Balancers auf Schicht 4.

Details zu dieser Funktion:
  • TCP und UDP werden unterstützt.
  • Jeder Dienst hat eine eindeutige IP-Adresse.
  • Dem Dienst wird eine IP-Adresse aus einem externen IP-Pool zugeteilt, die auf dem Feld "loadBalancerIP" in der LoadBalancer-Definition basiert. Das Feld "loadBalancerIP" kann leer sein, eine IP-Adresse oder den Namen oder die ID eines IP-Pools enthalten. Wenn die Spezifikation loadBalancerIP leer ist, wird die IP-Adresse aus dem externen IP-Pool zugeteilt, der durch die external_ip_pools_lb-Option im Abschnitt [nsx_v3] in ncp.ini angegeben ist. Wenn die Option external_ip_pools_lb nicht vorhanden ist, wird der von external_ip_pools angegebene Pool verwendet. Der LoadBalancer-Dienst wird unter dieser IP-Adresse und auf dem Dienst-Port bereitgestellt.
  • Sie können zu einem anderen IP-Pool wechseln, indem Sie die Konfiguration ändern und NCP neu starten.
  • Der von loadBalancerIP angegebene-IP-Pool muss über das Tag scope: ncp/owner, tag: cluster:<cluster_name> verfügen.

  • Im Richtlinienmodus wird ein Dienst des Typs LoadBalancer ohne Selektor unterstützt. Bei einem solchen Dienst wird die SNAT-IP des NSX Load Balancers die IP des Diensts des Typs LoadBalancer sein. Die SNAT-IP des NSX Load Balancers wird aktualisiert, wenn Sie die IP-Adresse des Diensts des Typs LoadBalancer aktualisieren. Beachten Sie, dass ein Dienst ohne Selektor nicht als Endpunkt eines anderen Dienstes ohne Selektor konfiguriert werden kann.
  • Im Richtlinienmodus können Sie die Anmerkung ncp/transparent-lb auf true festlegen, um SNAT im Load Balancer-Pool zu deaktivieren. Diese Funktion wird nur in einer einstufigen Topologie unterstützt.
  • NSX weist standardmäßig Grenzwerte für die Anzahl virtueller Server, Serverpools und Poolmitglieder für einen Load Balancer auf. Sie können diese Grenzwerte umgehen, indem Sie [nsx_v3] relax_scale_validation auf true festlegen.
  • Standardmäßig erzwingt NCP den Grenzwert für die Anzahl der Poolmitglieder für einen Load Balancer nicht. Sie können dieses Verhalten mit dem Parameter [nsx_v3] ncp_enforced_pool_member_limit ändern. Diese Funktion wird nur im Richtlinienmodus unterstützt und erfordert, dass [nsx_v3] l4_lb_auto_scaling auf false festgelegt wird. Für ncp_enforced_pool_member_limit gibt es folgende Optionen:
    • DEACTIVATE: NCP erzwingt den Poolmitgliedsgrenzwert nicht.
    • ACTIVATE: NCP erzwingt den Grenzwert für Poolmitglieder, um zu verhindern, dass ein Load Balancer zu viel CPU oder Arbeitsspeicher nutzt. Beachten Sie, dass, wenn relax_scale_validation auf false festgelegt ist und für members_per_small_lbs oder members_per_medium_lbs ein höherer Wert als der NSX-Skalierungsgrenzwert festgelegt ist, die NSX-Skalierung erzwungen und diese Konfiguration damit unnötig wird.
  • Fehler werden im Dienst als Anmerkung dokumentiert. Der Fehlerschlüssel lautet ncp/error.loadbalancer. Dies sind die möglichen Fehler:
    • ncp/error.loadbalancer: IP_POOL_NOT_FOUND

      Dieser Fehler weist darauf hin, dass Sie loadBalancerIP: <nsx-ip-pool> angeben, <nsx-ip-pool> aber nicht vorhanden ist. Der Dienst ist dann inaktiv. Um den Fehler zu beheben, geben Sie einen gültigen IP-Pool ein, löschen Sie den Dienst und erstellen Sie ihn neu.

    • ncp/error.loadbalancer: IP_POOL_EXHAUSTED

      Dieser Fehler weist darauf hin, dass Sie loadBalancerIP: <nsx-ip-pool> angeben, die IP-Adressen im IP-Pool aber ausgeschöpft sind. Der Dienst ist dann inaktiv. Um den Fehler zu beheben, geben Sie einen IP-Pool mit verfügbaren IP-Adressen an, löschen Sie den Dienst und erstellen Sie ihn neu.

    • ncp/error.loadbalancer: IP_POOL_NOT_UNIQUE

      Dieser Fehler weist darauf hin, dass mehrere IP-Pools den von loadBalancerIP angegebenen Namen aufweisen: <nsx-ip-pool>. Der Dienst ist dann inaktiv.

    • ncp/error.loadbalancer: POOL_ACCESS_DENIED

      Dieser Fehler weist darauf hin, dass der von loadBalancerIP angegebene IP-Pool das Tag scope: ncp/owner, tag: cluster:<cluster_name> nicht aufweist oder der Name des im Tag angegebenen Clusters nicht mit dem Namen des Kubernetes-Clusters übereinstimmt.

    • ncp/error.loadbalancer: LB_VIP_CONFLICT

      Dieser Fehler weist darauf hin, dass die IP im loadBalancerIP-Feld mit der IP eines aktiven Diensts identisch ist. Der Dienst ist dann inaktiv.

  • Der Schicht-4-Load Balancer unterstützt automatische Skalierung. Wenn ein Kubernetes-LoadBalancer-Dienst erstellt oder geändert wird, sodass er zusätzliche virtuelle Server erfordert, und der vorhandene Load Balancer auf Schicht 4 nicht über ausreichend Kapazität verfügt, wird ein neuer Load Balancer auf Schicht 4 erstellt. NCP löscht einen Load Balancer auf Schicht 4 auch, wenn keine virtuellen Server mehr an ihn angehängt sind. Diese Funktion ist standardmäßig aktiviert. Wenn Sie diese Funktion deaktivieren möchten, müssen Sie l4_lb_auto_scaling in der NCP-ConfigMap auf false festlegen.
  • Wenn Sie einen Dienst vom Typ LoadBalancer erstellen, können Sie den Parameter loadBalancerSourceRanges angeben. Diese Funktion wird nur im Richtlinienmodus unterstützt. Beispiel:
    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
    ...

    Der erstellte NSX Load Balancer lässt nur Datenverkehr von den angegebenen Quell-IP-Adressen zu. Sie können dies in NSX Manager überprüfen, indem Sie sich die Zugriffslistensteuerung des virtuellen Servers ansehen. Sie ermöglicht den Zugriff auf eine bestimmte Gruppe. Diese Gruppe enthält die in loadBalancerSourceRanges angegebenen IP-Adressen. Sie können diese Gruppen ansehen, indem Sie zu Bestand > Gruppen navigieren.