Sie können CRDs (CustomResourceDefinitions) erstellen, um die Nutzung von NSX Load Balancer zu überwachen und zusätzliche NSX Load Balancer auf Schicht 7 zu erstellen, um Ingress-Arbeitslasten zu verarbeiten, die der Standard-Load Balancer nicht verarbeiten kann. Diese CRDs sind nicht für die Skalierung von Load Balancer auf Schicht 4 vorgesehen, die für Kubernetes LoadBalancer-Dienste erstellt wurden.

Im Managermodus wird diese Funktion ab NCP 2.5.1 unterstützt. Im Richtlinienmodus wird diese Funktion ab NCP 3.0.1 unterstützt.

Die CRDs:
  • NSXLoadBalancerMonitor – Diese CRD wird verwendet, um Nutzungsstatistiken für die NSX-Lastausgleichsdienste zu erstellen. Im Richtlinienmodus überwacht diese CRD nur Namespace-Lastausgleichsdienst, die mithilfe der LoadBalancer-CRD erstellt wurden.
  • LoadBalancer – Diese CRD wird zur Erstellung neuer NSX Load Balancer verwendet. Die Definition dieser Ressource befindet sich in der NCP YAML-Datei. Im Richtlinienmodus und bei PKS-Bereitstellungen handelt es sich hierbei um eine Namespace-Ressource. Bei Managermodusbereitstellungen handelt es sich hierbei um eine clusterweite Ressource.
Führen Sie im Managermodus die folgenden Schritte aus, um diese Funktion zu aktivieren:
  • Legen Sie die Option enable_lb_crd im Abschnitt k8s auf True fest.
  • Wenden Sie die NCP-YAML-Datei mit dem folgenden Befehl an:

    kubectl apply -f ncp-<platform>.yaml

Führen Sie im Richtlinienmodus die folgenden Schritte aus, um diese Funktion zu aktivieren:
  • Wenn Sie NCP von einer vorherigen Version auf 3.0.1 aktualisiert haben, löschen Sie die alten CRD-Definitionen mit den folgenden Befehlen:
    kubectl delete crd nsxlbmonitors.vmware.com
    kubectl delete crd loadbalancers.vmware.com
  • Legen Sie die Optionen enable_lb_crd und enable_vnet_crd im Abschnitt k8s auf True fest.
  • Wenden Sie die Richtlinienversion der NCP-YAML-Datei mit dem folgenden Befehl an:

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

Wenden Sie im Managermodus eine YAML-Datei an, die eine LoadBalancer-CRD festlegt, um einen neuen NSX-Lastausgleichsdienst zu erstellen. Beispiel:
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    httpConfig: {}
Im Richtlinienmodus muss LoadBalancer mit VirtualNetwork erstellt werden. Beispiel:
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: {}

Diese YAML-Datei erstellt einen NSX Load Balancer mit einer geringen Größe und ein Paar von virtuellen Servern auf Schicht 7 ohne Persistenz, SSL oder X-forward-Einstellungen. Die IP des virtuellen Servers wird von dem als Standard konfigurierten externen Pool für Load Balancer zugeteilt. Die Ports sind standardmäßig 80 und 443. Nicht standardmäßige Ports werden unterstützt, wenn der benutzerdefinierte Port im HTTP HOST-Header enthalten ist.

Um den Erstellungsstatus der LoadBalancer-CRD zu überprüfen, führen Sie den folgenden Befehl aus:
kubectl get lb <name of the LoadBalancer> -o yaml
Das Ergebnis sieht ungefähr so aus wie das folgende:
status:
 conditions:
 - status: "True"
   type: Ready
 httpVirtualIP: <realized virtual IP>

Dieses Ergebnis gibt an, dass die Erstellung erfolgreich war. Wenn die Erstellung fehlgeschlagen ist, wird status gleich "False" und es gibt keine virtuelle IP-Adresse.

Sie können auch die Einstellungen für den NSX Load Balancer und die virtuellen Server anpassen. So konfigurieren Sie die IP und den Port für den virtuellen Server:
spec:
    httpConfig:
        virtualIP: <ip address, default to auto-allocate>
        port: <port number, default to 80>
So geben Sie die Sitzungsaffinität und den X-forwarded-Modus an:
spec:
    httpConfig:
         xForwardedFor: <INSERT or REPLACE, default to None>
         affinity:
             type: <source_ip or cookie, default to None>
             timeout: <timeout number, default to 10800>
So konfigurieren Sie TLS-Einstellungen:
spec:
    httpConfig:
        tls:
            port: <tls port number, default to 443>
            secretName: <name of secret, default to None>
            secretNamespace: <namespace of secret, default to None>
Selbst wenn Sie die HTTP- und HTTPS-Ports auf Nicht-Standardwerte setzen, zeigt der Ingress-Drucker aufgrund einer Kubernetes-Einschränkung bei der Anzeige des Ingress-Status immer die Standard-Portwerte (80 und 443) an. Sie sollten weiterhin die konfigurierten Ports für den Zugriff auf den Ingress verwenden. Beispiel:
curl -I -HHost:tea.example.com http://$INGRESS_IP:$CRD_LB_HTTP_PORT/tea

Sie können den Schlüssel vor oder nach der Erstellung von LoadBalancer erstellen. Um das Zertifikat zu aktualisieren, entfernen Sie zuerst secretName und secretNamespace aus der LoadBalancer-Spezifikation, aktualisieren Sie die Daten des geheimen Schlüssels und fügen Sie dann denselben geheimen Schlüssel mithilfe der obigen Konfiguration erneut an. Das Erstellen eines neuen geheimen Schlüssels und das Aktualisieren von secretName und secretNamespace funktionieren ebenfalls. Beachten Sie, dass die gemeinsame Nutzung derselben Daten des geheimen Schlüssels zwischen verschiedenen CRD Load Balancer nicht unterstützt wird. Sie müssen CRD Load Balancer mit unterschiedlichen Zertifikaten konfigurieren.

Führen Sie den folgenden Befehl aus, um den Status und die Statistiken der NSX Load Balancer anzuzeigen:
kubectl get lbm
Dadurch werden alle NSXLoadBlancerMonitors aufgelistet, einer für jeden NSX Load Balancer. Die folgenden Informationen werden angezeigt:
  • Nutzung – die Anzahl der Arbeitslasten im NSX Load Balancer.
  • Datenverkehr – die aggregierten Statistiken jedes virtuellen Servers.
  • Integrität – Dieses Feld hat zwei Dimensionen:
    • servicePressureIndex – Dies zeigt die Leistung des Load Balancer an. Es werden zwei Werte angegeben: Punktzahl und Schweregrad.
    • infraPressureIndex – Dies zeigt die Leistung der zugrunde liegenden Infrastrukturkomponenten an. In NCP 2.5.1 ist dieser Wert nicht immer korrekt.
    • Das Feld metrics liefert eine Vorstellung der Parameter, die berücksichtigt werden, wenn die Integritäts Punktzahl berechnet wird.

Wenn der Wert servicePressureIndex eines Load Balancer HIGH ist, können Sie die Arbeitslast für den Ingress auf andere Load Balancer migrieren, wobei es sich um den standardmäßigen Load Balancer oder den Load Balancer handelt, der mit der LoadBalancer-CRD erstellt wurde.

Um einen Ingress in einen dedizierten Load Balancer zu verlegen, fügen Sie der Ingress-Spezifikation eine Anmerkung hinzu. Beispiel:
 annotations:
   nsx/loadbalancer: <name of the LoadBalancer CRD>

Wenn die Anmerkung fehlt oder auf null festgelegt ist, wird der Ingress auf dem standardmäßigen NSX Load Balancer platziert.