Puede crear objetos CustomResourceDefinition (CRD) para supervisar el uso de equilibradores de carga de NSX y para crear equilibradores de carga de Capa 7 de NSX adicionales que gestionen las cargas de trabajo de entrada de las que no pueda hacerse cargo el equilibrador de carga predeterminado. Estos objetos CRD no se pueden utilizar para ajustar la escala de los equilibradores de carga de Capa 4 que se creen para los servicios LoadBalancer de Kubernetes.

En el modo Manager, esta función se admite a partir de NCP 2.5.1. En el modo Directiva, esta función se admite a partir de NCP 3.0.1.

Los objetos CRD son:
  • NSXLoadBalancerMonitor: se utiliza para informar sobre las estadísticas de uso de los equilibradores de carga de NSX. En el modo Directiva, este CRD solo supervisará equilibradores de carga de espacios de nombres creados con el CRD del equilibrador de carga.
  • LoadBalancer: se utiliza para crear equilibradores de carga de NSX nuevos. La definición de este recurso se encuentra en el archivo YAML de NCP. En el modo Directiva e implementaciones de PKS, este es un recurso de espacio de nombres. En implementaciones del modo Manager, este es un recurso de todo el clúster.
En el modo Manager, realice los siguientes pasos para habilitar esta función:
  • Configure la opción enable_lb_crd de la sección k8s como True.
  • Aplique el archivo YAML de NCP con el siguiente comando:

    kubectl apply -f ncp-<platform>.yaml

En el modo Directiva, realice los siguientes pasos para habilitar esta función:
  • Si actualizó NCP desde una versión anterior a la 3.0.1, elimine las definiciones de CRD anteriores con los siguientes comandos:
    kubectl delete crd nsxlbmonitors.vmware.com
    kubectl delete crd loadbalancers.vmware.com
  • Configure las opciones enable_lb_crd y enable_vnet_crd de la sección k8s como True.
  • Aplique la versión de Directiva del archivo YAML de NCP con el siguiente comando:

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

En el modo Manager, parar crear un equilibrador de carga de NSX, aplique un archivo YAML en el que se defina el objeto CRD LoadBalancer. Por ejemplo,
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    httpConfig: {}
En el modo Directiva, LoadBalancer se debe crear con VirtualNetwork. Por ejemplo,
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: {}

Este archivo YAML creará un equilibrador de carga de NSX de tamaño pequeño y un par de servidores virtuales de Capa 7 sin configuración de persistencia, SSL ni encabezados X-forward. La dirección IP del servidor virtual se asigna a partir del grupo externo de equilibradores de carga predeterminado que se haya configurado. Los puertos predeterminados son el 80 y el 443. Los puertos no estándar son compatibles si el puerto personalizado se incluye en el encabezado HOST HTTP.

Para comprobar el estado de creación del objeto CRD LoadBalancer, ejecute el siguiente comando:
kubectl get lb <name of the LoadBalancer> -o yaml
El resultado debe ser similar al siguiente:
status:
 conditions:
 - status: "True"
   type: Ready
 httpVirtualIP: <realized virtual IP>

Este resultado indica que la creación se realizó correctamente. Si no se pudo crear, status será "False" y no habrá una dirección IP virtual.

También puede personalizar la configuración de los servidores virtuales y del equilibrador de carga de NSX. Para configurar la dirección IP y el puerto del servidor virtual, haga lo siguiente:
spec:
    httpConfig:
        virtualIP: <ip address, default to auto-allocate>
        port: <port number, default to 80>
Para especificar la afinidad de sesión y el encabezado X-forwarded-mode, haga lo siguiente:
spec:
    httpConfig:
         xForwardedFor: <INSERT or REPLACE, default to None>
         affinity:
             type: <source_ip or cookie, default to None>
             timeout: <timeout number, default to 10800>
Para configurar TLS, haga lo siguiente:
spec:
    httpConfig:
        tls:
            port: <tls port number, default to 443>
            secretName: <name of secret, default to None>
            secretNamespace: <namespace of secret, default to None>
Tenga en cuenta que, aunque establezca valores no predeterminados para los puertos HTTP y HTTPS, la impresora de entrada siempre va a indicar los valores de los puertos predeterminados (80 y 443) cuando muestre el estado de entrada debido a una limitación de Kubernetes. Aun así, deberá utilizar los puertos configurados para acceder a la entrada. Por ejemplo,
curl -I -HHost:tea.example.com http://$INGRESS_IP:$CRD_LB_HTTP_PORT/tea

Puede crear el secreto antes o después de generar LoadBalancer. Para actualizar el certificado, primero elimine secretName y secretNamespace de la especificación de LoadBalancer; actualice los datos del secreto y, a continuación, vuelva a asociar el mismo secreto con la configuración anterior. También puede crear un secreto y actualizar secretName y secretNamespace. Tenga en cuenta que varios objetos CRD de equilibradores de carga no pueden compartir los mismos datos de secreto. Debe utilizar certificados distintos para configurar los objetos CRD de equilibradores de carga.

Para consultar el estado y las estadísticas de los equilibradores de carga de NSX, ejecute el siguiente comando:
kubectl get lbm
Se mostrarán un objeto NSXLoadBlancerMonitors para cada equilibrador de carga de NSX. Podrá consultar la siguiente información:
  • Uso: indica el número de cargas de trabajo del equilibrador de carga de NSX.
  • Tráfico: indica las estadísticas globales de cada servidor virtual.
  • Estado: este campo tiene dos dimensiones.
    • servicePressureIndex: indica el rendimiento del equilibrador de carga. Se proporcionan dos valores: puntuación y gravedad.
    • infraPressureIndex: indica el rendimiento de los componentes de la infraestructura subyacente. En NCP 2.5.1, este valor no siempre es preciso.
    • El campo metrics ofrece una idea de los parámetros que se tienen en cuenta para calcular la puntuación del estado.

Cuando el valor de servicePressureIndex de un equilibrador de carga es HIGH, puede migrar la carga de trabajo de entrada a otros equilibradores de carga. Puede elegir entre el equilibrador de carga predeterminado o los equilibradores de carga creados con el objeto CRD LoadBalancer.

Para colocar una entrada en un equilibrador de carga específico, agregue una anotación a la especificación de entrada. Por ejemplo,
 annotations:
   nsx/loadbalancer: <name of the LoadBalancer CRD>

Si falta la anotación o se establece como null, la entrada se colocará en el equilibrador de carga de NSX predeterminado.