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.

Si tiene una topología de nivel 1 compartida, deberá configurar tier0_gateway en [nsx_v3] en el ConfigMap nsx-ncp-config para usar esta función.

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 TKGI, este es un recurso de espacio de nombres. En implementaciones del modo Manager, este es un recurso de todo el clúster.

El procedimiento para habilitar esta función es el mismo para el modo Manager y para el modo Directiva.

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

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: {}
    size: SMALL

Este archivo YAML creará un equilibrador de carga de NSX del tamaño especificado y un par de servidores virtuales de Capa 7 sin configuración de persistencia, SSL ni encabezados X-forward. El parámetro size puede ser SMALL, MEDIUM o LARGE. El valor predeterminado es SMALL. Después de crear el equilibrador de carga de NSX, no se podrá cambiar el tamaño y se ignorará cualquier actualización del parámetro size. 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. Tenga en cuenta que los puertos personalizados solo se admiten en entradas que no sean TLS. Además, los servidores virtuales creados por CRD LoadBalancer no admiten el parámetro "enable access log".

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>

Nota: No debe configurar la misma virtualIP para distintos CRD de LoadBalancer.

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>
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, elimine primero secretName 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. 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.