Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Kubernetes Service (AKS) normalmente aprovisiona un equilibrador de carga estándar (SLB) para todos los LoadBalancer servicios de un clúster. Dado que cada NIC de nodo está limitada a 300 reglas de equilibrio de carga de entrada y 8 servicios de vínculo privado, los clústeres grandes o las cargas de trabajo con gran carga de trabajo por puerto pueden agotar rápidamente estos límites.
La versión preliminar de varios SLB quita ese cuello de botella al permitirle crear varios SDB dentro del mismo clúster y nodos de partición y servicios en ellos. Las configuraciones del balanceador de carga se definen, cada una vinculada a un grupo de agentes principal y a un espacio de nombres, etiqueta o selectores de nodo opcionales, y AKS coloca automáticamente Nodos y Servicios en el SLB adecuado. El comportamiento de SNAT saliente no cambia si outboundType es loadBalancer. El tráfico saliente sigue fluyendo a través del primer SLB.
Utilice esta función para:
- Escale más allá de 300 reglas de entrada sin agregar clústeres.
- Aísle el tráfico de inquilino o carga de trabajo mediante el enlace de un SLB dedicado a su propio grupo de agentes.
- Distribuya servicios de vínculo privado entre varios SLAB al aproximarse al límite por SLB.
Prerrequisitos
-
aks-previewextensión 18.0.0b1 o posterior. - Marca de características
Microsoft.ContainerService/MultipleStandardLoadBalancersPreviewde suscripción registrada. - Kubernetes versión 1.28 o posterior.
- Clúster creado con
--load-balancer-backend-pool-type nodeIPo actualiza un clúster existente medianteaz aks update.
Instalar la extensión aks-preview de la CLI de Azure
Importante
Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Instale la extensión aks-preview mediante el comando
az extension add.az extension add --name aks-previewActualice a la última versión de la extensión publicada mediante el comando
az extension update.az extension update --name aks-preview
Registro de la marca de característica MultipleStandardLoadBalancersPreview
Registre la marca de características de
MultipleStandardLoadBalancersPreviewmediante el comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Tarda unos minutos en que el estado muestre Registrado.
Comprobar el estado del registro mediante el comando
az feature show:az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando
az provider register.az provider register --namespace Microsoft.ContainerService
Cómo elige AKS un equilibrador de carga (ubicación de nodo y servicio)
AKS usa varias entradas para determinar dónde colocar nodos y exponer LoadBalancer Services. Estas entradas se definen en cada configuración del equilibrador de carga e influyen en qué SLB se selecciona para cada recurso.
| Tipo de entrada | Se aplica a | Descripción |
|---|---|---|
Grupo de agentes principal--primary-agent-pool-name |
Nodos | Obligatorio. Todos los nodos de este grupo siempre se agregan al grupo de back-end del SLB. Garantiza que cada SLB tenga al menos un nodo activo. |
Selector de nodos--node-selector |
Nodos | Opcional. Agrega cualquier nodo con etiquetas coincidentes al SLB, además de al pool principal. |
Selector de espacio de nombres de servicio--service-namespace-selector |
Servicios | Opcional. Solo los servicios de espacios de nombres con etiquetas coincidentes se consideran para este SLB. |
Selector de etiquetas de servicio--service-label-selector |
Servicios | Opcional. Solo los servicios con etiquetas coincidentes son aptos para este SLB. |
Anotación de servicioservice.beta.kubernetes.io/azure-load-balancer-configurations |
Servicios | Opcional. Limita la selección de ubicación a una o varias configuraciones de SLB con nombre explícito. Sin ella, cualquier configuración coincidente es apta. |
Nota:
Los selectores definen la idoneidad. La anotación (si se usa) restringe el controlador a un subconjunto específico de SLBs.
Cómo usa AKS estas entradas
El plano de control de AKS reconcilia continuamente el estado del nodo y el servicio mediante las reglas anteriores:
Ubicación del nodo
Cuando se agrega o actualiza un nodo, AKS comprueba los SLA que califica para según el grupo principal y el selector de nodos.
- Si coinciden varios SLBs, el controlador elige el que tiene menos nodos actuales.
- El nodo se agrega al grupo de back-end de SLB.
Ubicación del servicio
Cuando se crea o actualiza un servicio LoadBalancer:
- AKS busca SLAB cuyo espacio de nombres y selectores de etiquetas coincidan con el servicio.
- Si la anotación De servicio está presente, solo se tienen en cuenta los SLAB con nombre.
- Se excluyen los SLA que tienen allowServicePlacement=false o que superarían los límites de Azure (300 reglas o 8 servicios de vínculo privado).
- Entre las opciones válidas, se elige el SLB con las reglas más pocas.
comportamiento de externalTrafficPolicy (ETP)
AKS controla los servicios de forma diferente en función del valor de externalTrafficPolicy.
| Mode | Funcionamiento de la selección del equilibrador de carga | Creación de la pertenencia al grupo de back-end | Notas |
|---|---|---|---|
| Clúster (valor predeterminado) | El controlador sigue las reglas de selección de ubicación estándar descritas anteriormente. Una sola regla de equilibrio de carga tiene como destino el grupo de back-end de kubernetes compartido en el SLB elegido. | Todos los nodos del pool de kubernetes de SLB son objetivos saludables. Los sondeos de estado eliminan automáticamente los nodos que no tienen Pods coincidentes. |
El mismo comportamiento que hoy en los clústeres de un solo SLB. |
| Local | El controlador sigue usando el algoritmo basado en selectores para elegir un SLB, pero crea un grupo de back-end dedicado por servicio en lugar de usar el grupo compartido. | La membresía se sincroniza desde los objetos del servicio EndpointSlice, por lo que solo se agregan nodos que realmente hospedan pods listos. Los sondeos de estado siguen usando healthCheckNodePort para quitar nodos deficientes. |
Garantiza la conservación de ip de cliente y evita el enrutamiento a través de nodos que carecen de pods, incluso cuando los nodos se particionan entre varios SLO. |
¿Por qué un grupo dedicado para ETP Local?
En el modo de varios SLB, los nodos que hospedan pods para un servicio determinado pueden residir en diferentes SLB de la VIP orientada al cliente. Un grupo de back-end compartido a menudo contendrá cero nodos aptos, lo que interrumpiría el tráfico. Al asignar un grupo por servicio y sincronizarlo desdeEndpointSlice, AKS garantiza que el SLB del servicio apunte siempre a los nodos correctos.
Impacto en las cuotas
- Cada servicio local de ETP agrega un grupo de back-end y una regla de equilibrio de carga a su SLB.
- Estos cuentan hacia el límite de 300 reglas, por lo que se supervisa el uso de reglas cuando tiene muchos servicios locales de ETP.
No hay ningún cambio en el tráfico saliente
SNAT saliente continúa fluyendo a través del primer SLB aksOutboundBackendPool cuando outboundType es loadBalancer, sin importar la configuración de ETP.
Opcional: Reequilibrio
Puede reequilibrar manualmente la distribución de nodos más adelante mediante az aks loadbalancer rebalance.
Este diseño le permite definir el enrutamiento flexible controlado por etiquetas para la infraestructura y las cargas de trabajo, mientras que AKS controla la ubicación automáticamente para mantener el equilibrio y evitar problemas de cuota.
Adición de la primera configuración del equilibrador de carga
Agregue una configuración denominada kubernetes y enlazarla a un grupo de agentes principal que siempre tenga al menos un nodo. Al quitar todas las configuraciones, el clúster vuelve a cambiar al modo de un solo SLB.
Importante
Para habilitar el modo de varios SLB, debe agregar una configuración del equilibrador de carga denominada kubernetes y adjuntarla a un grupo de agentes principal que siempre tenga al menos un nodo listo.
La presencia de esta configuración alterna la compatibilidad con varios SLB; en la selección del servicio, no tiene ninguna prioridad especial y se trata como cualquier otra configuración del equilibrador de carga.
Si elimina todas las configuraciones del equilibrador de carga, el clúster vuelve automáticamente al modo de SLB único, que puede interrumpir brevemente el enrutamiento del servicio o los flujos SNAT.
Establezca variables de entorno para usarlas en este tutorial. Puede reemplazar todos los valores de marcador de posición por sus propios, excepto
DEFAULT_LB_NAME, que deben permanecer comokubernetes.RESOURCE_GROUP="rg-aks-multislb" CLUSTER_NAME="aks-multi-slb" LOCATION="westus" DEFAULT_LB_NAME="kubernetes" PRIMARY_POOL="nodepool1"Cree un grupo de recursos mediante el
az group createcomando .az group create --name $RESOURCE_GROUP --location $LOCATIONCree un clúster de AKS mediante el
az aks createcomando .\az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \ --load-balancer-backend-pool-type nodeIP \ --node-count 3Agregue un equilibrador de carga predeterminado mediante el
az aks loadbalancer addcomando .az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $DEFAULT_LB_NAME \ --primary-agent-pool-name $PRIMARY_POOL \ --allow-service-placement true
Adición de equilibradores de carga adicionales
Cree configuraciones específicas del cliente especificando un grupo principal diferente, junto con un espacio de nombres, una etiqueta o selectores de nodos opcionales.
El equipo 1 ejecutará sus propias cargas de trabajo en un grupo de nodos independiente. Asigne una
tenant=team1etiqueta para que las cargas de trabajo se puedan programar mediante selectores:TEAM1_POOL="team1pool" TEAM1_LB_NAME="team1-lb"Cree un segundo grupo de nodos para el equipo 1 mediante el
az aks nodepool addcomando .az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_POOL \ --labels tenant=team1 \ --node-count 2Cree un equilibrador de carga para el equipo 1 mediante el
az aks loadbalancer addcomando .az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_LB_NAME \ --primary-agent-pool-name $TEAM1_POOL \ --service-namespace-selector "tenant=team1" \ --node-selector "tenant=team1"Etiquete el espacio de nombres de destino (por ejemplo,
team1-apps) para que coincida con el selector mediante el comandoaz aks command invoke.az aks command invoke \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --command " kubectl create namespace team1-apps --dry-run=client -o yaml | kubectl apply -f - kubectl label namespace team1-apps tenant=team1 --overwrite "Ahora puede enumerar los equilibradores de carga del clúster para ver las varias configuraciones mediante el
az aks loadbalancer listcomando .az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output tableEjemplo de resultado:
AllowServicePlacement ETag Name PrimaryAgentPoolName ProvisioningState ResourceGroup ----------------------- ------- ---------- ---------------------- ------------------- --------------- True <ETAG> kubernetes nodepool1 Succeeded rg-aks-multislb True <ETAG> team1-lb team1pool Succeeded rg-aks-multislb
Implementación de un servicio en un equilibrador de carga específico
Agregue la anotación con una lista separada por comas service.beta.kubernetes.io/azure-load-balancer-configurations de nombres de configuración. Si se omite la anotación, el controlador elige automáticamente.
az aks command invoke \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--command "
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: lb-svc-1
namespace: team1-apps
labels:
app: nginx-test
annotations:
service.beta.kubernetes.io/azure-load-balancer-configurations: \"team1-lb\"
# service.beta.kubernetes.io/azure-load-balancer-internal: "true" # If you want to create an internal load balancer.
spec:
selector:
app: nginx-test
ports:
- name: port1
port: 80
targetPort: 80
protocol: TCP
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
namespace: team1-apps
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: \"150m\"
memory: \"300Mi\"
EOF
"
Reequilibrar nodos (opcional)
Ejecute una operación de reequilibrio después de escalar si los recuentos de reglas se desequilibran mediante el az aks loadbalancer rebalance comando . Este comando interrumpe los flujos activos, por lo que lo programa durante una ventana de mantenimiento.
az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
Supervisión y solución de problemas
- Observe los eventos del controlador (
kubectl get events …) para confirmar que los servicios se reconcilian. - Si la conectividad externa está bloqueada, abra un shell de nodo y active la VIP de servicio para confirmar el enrutamiento del proxy kube.
Limitaciones y problemas conocidos
| Limitación | Detalles |
|---|---|
| SNAT de salida | Siempre usa el primer SLB; los flujos salientes no están particionados. |
| Tipo de grupo de back-end | Cree o actualice un clúster existente para usar grupos de back-end nodeIP. |
| Ceros del escalador automático | Un grupo principal de agentes no se puede escalar a 0 nodos. |
Crecimiento de las reglas de ETP local |
Cada servicio ETP local usa su propia regla y su propio grupo backend, por lo que los recuentos de reglas pueden crecer más rápido que en el modo cluster. |
| Interrupción del reequilibrio | Al quitar un nodo de un grupo de servidores backend, se interrumpen las conexiones en curso. Planear ventanas de mantenimiento. |
| Tiempo de recarga de configuración | Después de ejecutar az aks loadbalancer, es posible que los cambios no surtan efecto inmediatamente. La operación de AKS finaliza rápidamente, pero el administrador de controlador de nube puede tardar más tiempo en aplicar actualizaciones. Espere a que el EnsuredLoadBalancer evento confirme que los cambios están activos. |
Limpieza de recursos
Elimine el grupo de recursos cuando haya terminado de quitar el clúster y los equilibradores de carga mediante el az group delete comando .
az group delete --name $RESOURCE_GROUP --yes --no-wait
Pasos siguientes
La característica de varios SLB ayuda a escalar y aislar las cargas de trabajo en la capa de red, a la vez que mantiene la simplicidad a través de la configuración administrada por Azure. Para obtener más información, consulte los siguientes recursos: