Gestión de balanceadores de carga VPC
Realice cambios en sus balanceadores de carga VPC existentes.
No cambie el nombre de ningún NLB o ALB de la VPC. Al cambiar el nombre de un equilibrador de carga de VPC se produce un error en el servicio LoadBalancer Kubernetes, lo que podría afectar a su carga de trabajo.
Balanceadores de carga VPC persistentes
Por defecto, los balanceadores de carga VPC se eliminan cuando se elimina el cluster al que están asociados. Sin embargo, al crear una definición de servicio LoadBalancer, puede hacer que su equilibrador de carga sea persistente
para que siga estando disponible incluso después de que se elimine su clúster. Un equilibrador de carga VPC persistente puede aplicarse a un clúster diferente después de que se elimine su clúster anterior.
Los nombres de los balanceadores de carga VPC tienen el formato kube-<cluster_ID>-<kubernetes_lb_service_UID> por defecto. Cuando se elimina un clúster, este formato de nombre especifica los equilibradores de carga asociados
que también se eliminan. Para asegurarse de que su equilibrador de carga no se elimine cuando elimine un clúster, incluya la anotación service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name en su definición de servicio
LoadBalancer para dar a su equilibrador de carga un nombre único. El nombre del equilibrador de carga debe ser único dentro de su VPC y solo puede incluir caracteres alfanuméricos en minúsculas y guiones (-). La anotación
puede aplicarse a todos los tipos de equilibrador de carga de VPC.
Usted es responsable de eliminar los equilibradores de carga VPC persistentes cuando ya no sean necesarios. Para eliminar un equilibrador de carga de VPC persistente, elimine la definición de servicio Kubernetes LoadBalancer a la
que está asociado el equilibrador de carga de VPC.
Traslado de un equilibrador de carga de VPC de un clúster a otro
Los equilibradores de carga de VPC persistentes pueden separarse de un clúster de VPC y conectarse a otro. El nuevo clúster debe estar dentro de la misma VPC que el clúster original.
Separación de un equilibrador de carga VPC de un clúster
Los equilibradores de carga de VPC están vinculados a la definición de servicio Kubernetes LoadBalancer con la que se crearon. Para desvincular un equilibrador de carga de VPC persistente de un clúster, debe romper el vínculo
con el servicio LoadBalancer. Al hacerlo, el servicio LoadBalancer queda inutilizado y puede eliminarse de forma segura. El equilibrador de carga de la VPC puede entonces adjuntarse a un clúster diferente.
Para romper el vínculo entre el equilibrador de carga de la VPC y el servicio LoadBalancer, puede renombrar el equilibrador de carga de la VPC o eliminar la anotación service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name de la definición del servicio LoadBalancer original. Tenga en cuenta que esta es la única circunstancia en la que
debe cambiar el nombre de un equilibrador de carga de VPC, ya que al hacerlo se crea un error para el recurso Kubernetes. Sin embargo, si su objetivo final es utilizar el equilibrador de carga VPC en un clúster diferente, este error no interrumpe
su carga de trabajo. No cambie el nombre del equilibrador de carga de la VPC si desea mantener el equilibrador de carga en el mismo clúster.
Adjuntar un equilibrador de carga VPC a un clúster
Una vez que un equilibrador de carga de VPC persistente se ha desvinculado de un clúster, puede vincularlo a otro clúster creando una nueva definición de servicio LoadBalancer de Kubernetes que haga referencia al equilibrador
de carga de VPC.
Al crear un nuevo servicio LoadBalancer en el nuevo clúster, puede utilizar la anotación service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name para especificar el nombre del equilibrador de carga de VPC
que desea adjuntar.
Al crear el servicio LoadBalancer, el tipo de equilibrador de carga de la VPC (ALB, NLB) y el tipo de IP (pública, privada) deben coincidir con las especificaciones del servicio LoadBalancer. Por ejemplo, no se puede utilizar
un servicio LoadBalancer existente en el nuevo clúster que especifique un tipo NLB para adjuntar un ALB de VPC al clúster. Las anotaciones que especifican el tipo de equilibrador de carga y el tipo de IP son service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features y service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type.
No es necesario que los puertos de puerto y nodo especificados en el servicio LoadBalancer coincidan con aquellos con los que se creó el equilibrador de carga de la VPC. El equilibrador de carga de la VPC se reconfigura con las
definiciones de puerto del servicio LoadBalancer al que está asociado en el nuevo clúster.
Comprobaciones de estado para los equilibradores de carga
Los equilibradores de carga de VPC se configuran automáticamente con comprobaciones de estado, que se configuran con la anotación externalTrafficPolicy. Puede utilizar anotaciones adicionales para personalizar comprobaciones de estado en sus balanceadores de carga.
- Si
externalTrafficPolicyse establece enCluster, se aplican comprobaciones de estado de TCP. Si está configurando un equilibrador de carga de UDP, debe realizar especificaciones de puerto adicionales. - Si
externalTrafficPolicyse establece enLocal, se aplican comprobaciones de estado de HTTP. El tráfico entrante se entrega sólo al pod de aplicación que reside en ese nodo específico. Si no hay ningún pod de aplicación en ese nodo específico, el tráfico entrante se descarta.
El ajuste externalTrafficPolicy: Local podría hacer que fallaran las comprobaciones de estado de los nodos trabajadores del equilibrador de carga. Normalmente, este resultado es el comportamiento esperado y no indica necesariamente
un problema, ya que el tráfico se elimina intencionadamente si el equilibrador de carga intenta conectarse a cualquier nodo que no tenga un pod de aplicación. Para obtener más información, consulte ¿Por qué fallan las comprobaciones de estado del equilibrador de carga de VPC en mis nodos de trabajador?.
Personalización de las comprobaciones de estado de los equilibradores de carga VPC
Para tener un mayor control sobre las comprobaciones de estado del equilibrador de carga de su VPC, puede utilizar anotaciones opcionales para personalizar sus comprobaciones de estado con configuraciones avanzadas para intervalos de prueba, tiempos de espera y reintentos. Puede cambiar o eliminar estas personalizaciones en cualquier momento.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol- Opcional: esta anotación establece el protocolo de comprobación de estado en el recurso de equilibrador de carga de VPC asociado al servicio de equilibrador de carga Kubernetes. Normalmente, el protocolo de comprobación
de estado de VPC LB viene determinado por el valor del ajuste
externalTrafficPolicyde la especificación del servicio de balanceador de carga Kubernetes. Esta anotación anula esa lógica. Esta anotación no altera cómo Kubernetes, y kube-proxy en particular, se comporta con respecto a las diversas configuraciones deexternalTrafficPolicy. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port- Opcional. El puerto TCP que se utiliza para las comprobaciones de estado. Esta anotación sólo se aplica si también se especifica
ibm-load-balancer-cloud-provider-vpc-health-check-protocol.- Si el puerto TCP especificado se encuentra fuera del rango de puertos de los nodos de Kubernetes (30 000-32 767), se debe modificar el grupo de seguridad de la VPC aplicado a los nodos de trabajo del clúster para permitir el tráfico entrante en dicho puerto.
- Si esta anotación se aplica a un servicio de equilibrador de carga de Kubernetes asociado a un VPC ALB, deben modificarse las reglas de salida del grupo de seguridad asignado al VPC ALB para permitir el tráfico saliente hacia el puerto TCP especificado.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path- Opcional. La ruta de comprobación de estado URL para las comprobaciones de estado de HTTP y HTTPs. Esta anotación sólo se aplica si
ibm-load-balancer-cloud-provider-vpc-health-check-protocolse establece enhttpohttps.- La ruta de acceso URL debe tener el formato de un destino de solicitud de formulario de origen.
- Si no se especifica esta anotación y la anotación
ibm-load-balancer-cloud-provider-vpc-health-check-protocolse establece enhttpohttps, se aplica el valor por defecto/.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay- Opcional. El número de segundos que hay que esperar entre los intentos de chequeo. Por defecto, este valor se establece en
5, y tiene un mínimo de2y un máximo de60. Este valor debe ser mayor que el valoribm-load-balancer-cloud-provider-vpc-health-check-timeout, que se establece en2por defecto. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout- Opcional. El número de segundos que hay que esperar para recibir una respuesta a una comprobación de estado. Por defecto, este valor se establece en
2, y tiene un mínimo de1y un máximo de59. Este valor debe ser inferior al valoribm-load-balancer-cloud-provider-vpc-health-check-delay, que se establece en5por defecto. service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries- Número máximo de reintentos de comprobación de estado para el equilibrador de carga de la VPC. Por defecto, este valor se establece en
2, y tiene un mínimo de1y un máximo de10.
Habilitación de comprobaciones de estado de TCP para los equilibradores de carga de UDP
Como no hay comprobaciones de estado de UDP, los equilibradores de carga de UDP que utilizan comprobaciones de estado de TCP deben tener un puerto TCP adicional especificado con la anotación service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp.
Puede especificar el puerto de nodo TCP para otro equilibrador de carga o NodePort que se ejecuta en el clúster. En el caso de los clústeres de 4.14 y versiones anteriores, si el puerto del nodo se encuentra fuera del 30000-32767 rango, debe modificar el grupo de seguridad del clúster VPC kube-<cluster-ID> para permitir el tráfico entrante al puerto especificado.
Ten en cuenta que, si el valor de puerto especificado corresponde a un servicio que se interrumpe de forma inesperada o cuyo valor de puerto se reconfigura, las comprobaciones de estado de TCP dejarán de funcionar hasta que el servicio vuelva
a estar operativo o hasta que reconfigures la anotación service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp con un nuevo valor de puerto TCP. Para evitarlo, puede especificar el puerto kubelet 10250, que es un valor de puerto estático que no experimenta interrupciones de servicio. Sin embargo, para las versiones de clúster 4.14 y anteriores, debe modificar el grupo de seguridad del clúster VPC kube-<cluster-ID> para que acepte el tráfico entrante procedente de dicho puerto kubelet.
¿Quieres evitar la complejidad que supone especificar puertos adicionales de TCP para las comprobaciones de estado en un equilibrador de carga de UDP? Establezca externalTrafficPolicy en Local para utilizar las comprobaciones
de estado de HTTP, que no requieren especificaciones de puerto adicionales.
Cambiar la subred o zona de un equilibrador de carga
Después de crear un VPC NLB, no se puede reconfigurar la subred de escucha con la que se creó. Si desea cambiar la subred de escucha de un VPC NLB existente, debe eliminar, actualizar y volver a aplicar el servicio LoadBalancer correspondiente de Kubernetes.
-
Obtenga una lista de los servicios de Kubernetes y busque el nombre del servicio
LoadBalancerque desea cambiar.oc get servicesEjemplo de salida.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-load-balancer LoadBalancer 172.21.77.198 52.118.150.107 8080:32767/TCP,443:30943/TCP 5d -
Busque el equilibrador de carga de VPC que corresponde al servicio
LoadBalancerde Kubernetes.Los nombres del equilibrador de carga de VPC están en el formato
kube-<cluster_ID>-<kubernetes_lb_service_UID>. Para ver el ID de clúster, ejecuteibmcloud ks cluster get --cluster CLUSTER_NAME. Para ver el UID del servicio LoadBalancer de Kubernetes, ejecuteoc get svc LOAD_BALANCER_NAME -o yamly busque el campo metadata.uid en la salida. Se eliminan los guiones (-) del identificador único del servicioLoadBalancer(UID) Kubernetes en el nombre del equilibrador de carga de la VPC.ibmcloud is load-balancersEjemplo de salida.
ID Name Family Subnets Is public Provision status Operating status Resource group r000-5aaaa11f6-c111-111f-b2e0-1c11aaaaf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf11111111fe4ca3f11111cb Network subnet-1 true active online default Application -
Obtenga la definición de servicio
LoadBalancerde Kubernetes y guarde la salida como un archivo yaml llamadomy-lb.yaml.oc describe service my-load-balancer -o yaml -
Suprima el servicio
LoadBalancerde Kubernetes. Esta acción también suprime el equilibrador de carga de VPC correspondiente.oc delete service my-load-balancer -
Actualice el archivo de definición de servicio
LoadBalancerde Kubernetes con los cambios de subred o de zona que desea implementar. No cambie el nombre del servicioLoadBalancer. Para obtener detalles sobre la especificación de subredes o zonas para los equilibradores de carga de red, consulte Configuración de un equilibrador de carga de red para VPC. -
Aplique el nuevo archivo de definición
LoadBalancer.oc apply -f my-lb.yaml -
Verifique que el servicio
LoadBalancerde Kubernetes se vuelva a crear correctamente en el clúster. Al crear el servicio, el campo LoadBalancer (Ingreso de ) se rellena con una dirección IP externa para el NLB.oc describe service my-load-balancerEjemplo de salida.
NAME: my-load-balancer Namespace: default Labels: <none> Annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb Selector: app=echo-server Type: LoadBalancer IP: 172.X.XXX.XX LoadBalancer Ingress: 169.XXX.XXX.XXX Port: tcp-80 80/TCP TargetPort: 8080/TCP NodePort: tcp-80 32022/TCP Endpoints: 172.XX.XX.XXX:8080,172.XX.XX.XX:8080,172.XX.XX.XX:8080 + 3 more... Session Affinity: None External Traffic Policy: Local HealthCheck NodePort: 30882 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 9m27s (x7 over 15m) service-controller Ensuring load balancer Normal EnsuredLoadBalancer 9m20s service-controller Ensured load balancer Normal CloudVPCLoadBalancerNormalEvent 8m17s ibm-cloud-provider Event on cloud load balancer myvpcnlb for service default/my-load-balancer with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active. -
Verifique que el equilibrador de carga de VPC se vuelva a crear y que se actualice la subred o la zona. Ten en cuenta que el aprovisionamiento del equilibrador de carga de VPC tarda unos minutos y es posible que veas un estado
create_pendinghasta que se haya completado el aprovisionamiento.ibmcloud is load-balancersEjemplo de salida.
ID Name Family Subnets Is public Provision status Operating status Resource group r006-5ecc68f6-c751-409f-b2e0-1c69babf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf03445796fe4ca3f73885cb Network subnet-2 true active online default