È possibile creare CRD (Custom Resource Definition) per monitorare l'utilizzo dei bilanciamenti del carico di NSX e creare bilanciamenti del carico di livello 7 di NSX aggiuntivi per gestire i carichi di lavoro in ingresso che il bilanciamento del carico predefinito non è in grado di gestire. Questi CRD non sono destinati alla scalabilità dei bilanciamenti del carico di livello 4 creati per i servizi di bilanciamento del carico Kubernetes.

Se si dispone di una topologia di livello 1 condivisa, è necessario configurare tier0_gateway in [nsx_v3] in ConfigMap nsx-ncp-config per utilizzare questa funzionalità.

I CRD sono:
  • NSXLoadBalancerMonitor: questo CRD viene utilizzato per segnalare le statistiche di utilizzo dei bilanciamenti del carico di NSX. In modalità Criterio, questo CRD monitorerà solo i bilanciamenti del carico dello spazio dei nomi creati utilizzando il CRD LoadBalancer.
  • LoadBalancer: questo CRD viene utilizzato per creare nuovi bilanciamenti del carico di NSX. La definizione di questa risorsa si trova nel file YAML NCP. Nelle distribuzioni in modalità Criterio e TKGI, questa è una risorsa dello spazio dei nomi. Nelle distribuzioni in modalità Manager, questa è una risorsa a livello di cluster.

La procedura per abilitare questa funzionalità è la stessa per la modalità Manager e la modalità Criterio.

Per abilitare questa funzionalità, eseguire i passaggi seguenti:
  • Impostare l'opzione enable_lb_crd nella sezione [k8s] su True.
  • Applicare il file YAML di NCP con il comando seguente:

    kubectl apply -f ncp-<platform>.yaml

Per creare un nuovo bilanciamento del carico di NSX, applicare un file YAML che definisca un CRD LoadBalancer. Ad esempio
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    httpConfig: {}
    size: SMALL

Questo file YAML creerà un bilanciamento del carico di NSX delle dimensioni specificate e una coppia di server virtuali di livello 7 senza persistenza, SSL o impostazioni X-forward. Il parametro size può essere SMALL, MEDIUM o LARGE. Il valore predefinito è SMALL. Dopo aver creato il bilanciamento del carico di NSX, le dimensioni non possono essere modificate e qualsiasi aggiornamento al parametro size verrà ignorato. L'IP del server virtuale viene allocato dal pool esterno predefinito configurato per i bilanciamenti del carico. Le sono 80 e 443 per impostazione predefinita. Le porte non standard sono supportate se la porta personalizzata è inclusa nell'intestazione HTTP HOST. Si tenga presente che le porte personalizzate sono supportate solo in ingressi non TLS. Inoltre, i server virtuali creati da LoadBalancer CRD non supportano il parametro "enable access log".

Per verificare lo stato di creazione del CRD LoadBalancer, eseguire il comando seguente:
kubectl get lb <name of the LoadBalancer> -o yaml
Il risultato è simile al seguente:
status:
 conditions:
 - status: "True"
   type: Ready
 httpVirtualIP: <realized virtual IP>

Questo risultato indica che la creazione è stata eseguita correttamente. Se la creazione non riesce, status sarà False e non sarà presente un IP virtuale.

È inoltre possibile personalizzare le impostazioni per il bilanciamento del carico e i server virtuali di NSX. Per configurare l'IP e la porta per il server virtuale:
spec:
    httpConfig:
        virtualIP: <ip address, default to auto-allocate>
        port: <port number, default to 80>

Nota: non è necessario configurare lo stesso virtualIP per CRD LoadBalancer diversi.

Per specificare l'affinità della sessione e 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>
Per configurare le impostazioni TLS:
spec:
    httpConfig:
        tls:
            port: <tls port number, default to 443>
            secretName: <name of secret, default to None>
Si tenga presente che anche se si impostano le porte HTTP e HTTPS su valori non predefiniti, la stampante in ingresso visualizzerà sempre i valori delle porte predefinite (80 e 443) quando viene visualizzato lo stato di ingresso a causa di una limitazione di Kubernetes. È comunque consigliabile utilizzare le porte configurate per accedere all'ingresso . Ad esempio
curl -I -HHost:tea.example.com http://$INGRESS_IP:$CRD_LB_HTTP_PORT/tea

È possibile creare il segreto prima o dopo la creazione di LoadBalancer. Per aggiornare il certificato, rimuovere innanzitutto secretName dalla specifica di LoadBalancer, aggiornare i dati del segreto e quindi collegare nuovamente lo stesso segreto utilizzando la configurazione precedente. In alternativa, è possibile creare un nuovo segreto e aggiornare secretName. Si tenga presente che la condivisione dei dati dello stesso segreto tra bilanciamenti del carico CRD diversi non è supportata. È necessario configurare i bilanciamenti del carico CRD con certificati diversi.

Per visualizzare lo stato e le statistiche dei bilanciamenti del carico NSX, eseguire il comando seguente:
kubectl get lbm
Verranno elencati tutti gli NSXLoadBlancerMonitor, uno per ogni bilanciamento del carico di NSX. Verranno visualizzate le informazioni seguenti:
  • Usage: numero di carichi di lavoro nel bilanciamento del carico di NSX.
  • Traffic: le statistiche aggregate di ogni server virtuale.
  • Health: questo campo ha due dimensioni:
    • servicePressureIndex: indica le prestazioni del bilanciamento del carico. Vengono forniti due valori, ovvero punteggio e gravità.
    • infraPressureIndex: indica le prestazioni dei componenti dell'infrastruttura sottostante. In NCP 2.5.1, questo valore non è sempre preciso.
    • Il campo metrics fornisce un'idea dei parametri che vengono considerati quando viene calcolato il punteggio di integrità.

Quando il valore di servicePressureIndex di un bilanciamento del carico è HIGH, è possibile eseguire la migrazione del carico di lavoro in ingresso in altri bilanciamenti del carico, che devono essere i bilanciamenti del carico predefiniti creati utilizzando il CRD LoadBalancer.

Per posizionare un ingresso in un bilanciamento del carico dedicato, aggiungere un'annotazione alla specifica di ingresso. Ad esempio
 annotations:
   nsx/loadbalancer: <name of the LoadBalancer CRD>

Se l'annotazione non è presente o è impostata su null, l'ingresso viene posizionato nel bilanciamento del carico di NSX predefinito.