Cloud Controller Manager (CCM) permite asociar una instancia existente de Server Load Balancer (SLB) a Services en uno o más clústeres de ACK, así como a endpoints externos a dichos clústeres. Al utilizar una única instancia de SLB como punto de entrada unificado, se evita aprovisionar un load balancer separado por clúster. Esta configuración resulta útil cuando se requiere recuperación ante desastres, alta disponibilidad o aislamiento de seguridad entre clústeres.
Se abordan dos escenarios:
Escenario 1: Distribuir tráfico entre un Service dentro del clúster y un endpoint externo (por ejemplo, una instancia de Elastic Compute Service (ECS)).
Escenario 2: Distribuir tráfico entre Services ubicados en distintos clústeres de ACK.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia de Classic Load Balancer (CLB) instance o Network Load Balancer (NLB) instance creada en la misma región que su clúster de ACK.
-
Cloud Controller Manager instalado en el clúster, en la versión requerida (para actualizarlo, consulte Manage components):
Instancias de CLB: v2.0.1 o posterior
Instancias de NLB: v2.9.1 o posterior
Un cliente kubectl conectado al clúster de ACK (consulte Obtención del archivo kubeconfig de un clúster y uso de kubectl para conectarse al clúster)
Escenario 1: Distribución de tráfico hacia un Service del clúster y un endpoint externo
Asocie un Service dentro del clúster y un endpoint externo a la misma instancia de SLB. La instancia de SLB enruta el tráfico hacia ambos destinos. Cuando los pods escalan, se agregan o eliminan automáticamente del grupo de servidores virtuales sin afectar al endpoint externo.
Paso 1: Obtener el ID de la instancia de SLB
Inicie sesión en la consola de CLB o en la consola de NLB y anote el ID de su instancia de SLB existente.
Paso 2: Crear un Service con la instancia de SLB existente
Uso de la consola de ACK
En la consola de ACK, cree un Service con la siguiente configuración:
Establezca Service Type en SLB.
Seleccione Use Existing Resource y luego elija la instancia de SLB en la lista desplegable.
Seleccione Overwrite Existing Listeners.
Uso de kubectl
Agregue las siguientes anotaciones al manifiesto de su Service:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <LB_ID> # The ID of the existing SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" # Set to true so CCM automatically creates listeners and vServer groups.
labels:
#...
name: #...
spec:
#...
Una vez creado el Service, CCM genera un grupo de servidores virtuales y un listener que escucha en el puerto del Service para la instancia de SLB.
Paso 3: Agregar el endpoint externo al grupo de servidores virtuales
Inicie sesión en la consola de CLB o en la consola de NLB y agregue su endpoint externo (por ejemplo, una instancia de ECS) al grupo de servidores virtuales que creó CCM. Para obtener instrucciones, consulte Create and manage a CLB vServer group y Create and manage a vServer group.
Después de agregar el endpoint externo, tanto los pods del clúster como el endpoint externo aparecerán en el grupo de servidores virtuales, donde podrá configurar sus pesos relativos.
Escenario 2: Distribución de tráfico entre Services en distintos clústeres de ACK
Asocie Services de diferentes clústeres de ACK a la misma instancia de SLB. El CCM de cada clúster mantiene sincronizado el grupo de servidores virtuales a medida que escalan los pods, sin afectar a los servidores backend registrados por otros clústeres.
Restricciones
Revise estas restricciones antes de comenzar:
Todos los Services que compartan la instancia de SLB deben usar el mismo puerto.
Los Services desplegados en el mismo namespace en distintos clústeres deben tener nombres diferentes.
Si configura pesos de tráfico mediante la anotación
alibaba-cloud-loadbalancer-weight, gestione los pesos exclusivamente a través de dicha anotación. No modifique los pesos en la consola de SLB, ya que los cambios realizados en la consola no se sincronizan con los Services.
Paso 1: Crear manualmente un listener y un grupo de servidores virtuales
Inicie sesión en la consola de CLB o en la consola de NLB y cree manualmente un listener y un grupo de servidores virtuales para la instancia de SLB. Para obtener instrucciones, consulte CLB listeners, Create and manage a CLB vServer group, NLB listeners y Create and manage a server group.
Es necesario crear manualmente el listener y el grupo de servidores virtuales para que todos los clústeres puedan compartir el mismo grupo. El CCM de cada clúster registrará sus propios pods en este grupo compartido.
Paso 2: Crear los Services con anotaciones de grupo de servidores virtuales compartido
En cada clúster, cree un Service con las anotaciones que se muestran a continuación. Todos los Services deben hacer referencia a la misma instancia de SLB y al mismo grupo de servidores virtuales.
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "<YOUR_LB_ID>" # The ID of the shared SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "<YOUR_VGROUP_ID>:<PORT>" # The vServer group ID and the Service port, separated by a colon.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # (Optional) Traffic weight for backend pods of this Service. Valid values: 1–1000. Default: 100.
labels:
#...
name: #...
spec:
#...
Referencia de anotaciones
|
Anotación |
Tipo |
Valor predeterminado |
Descripción |
|
|
string |
— |
ID de la instancia de SLB existente. CCM asocia el Service a esta instancia en lugar de crear una nueva. |
|
|
string |
— |
Asigna el puerto del Service a un grupo de servidores virtuales: |
|
|
integer |
100 |
Peso de tráfico para todos los pods backend de este Service. Valores válidos: 1–1000. Si se establece, CCM utiliza este valor para registrar los pesos de los pods en el grupo de servidores virtuales. Gestione los pesos únicamente mediante esta anotación, no en la consola de SLB. |
Tras aplicar los manifiestos de los Services, los pods de cada clúster aparecerán en el grupo de servidores virtuales compartido dentro de la consola de SLB. Cuando una aplicación escala, sus pods se agregan o eliminan del grupo automáticamente, sin afectar a los pods que pertenecen a otros Services.
Pasos siguientes
Para consultar la lista completa de anotaciones para instancias de CLB y NLB, véase Use annotations to configure CLB instances y Use annotations to configure NLB instances.
Para revisar las notas de versión de Cloud Controller Manager, consulte Cloud Controller Manager.