Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Service FAQ

Última actualización: Sep 02, 2026

Resuelva problemas de configuración de CLB, reutilización de instancias, acceso a NodePort y actualización de CCM en clústeres de ACK.

Índice

Configuración de CLB

Pregunta

Resumen

What CLB instances does an ACK cluster create by default?

Dos instancias de CLB: servidor de API y Nginx Ingress Controller

How do I choose between the Local and Cluster external traffic policies?

Comparación de comportamientos de directivas de tráfico

Why was my CLB configuration modified?

CCM sobrescribe cambios manuales en la consola de CLB

How are node weights calculated in Local mode?

Fórmulas de ponderación según la versión de CCM

How do I enable connection draining for a LoadBalancer Service?

Anotaciones para el drenado de conexiones

How do I list all CLB instances in a cluster?

Comando kubectl + jq para listar todos los Services de tipo LoadBalancer

How do I enable CLB renaming for older CCM versions?

Etiquetado manual de instancias de CLB creadas por CCM v1.9.3.10 o anterior

Acceso y ciclo de vida de CLB

Pregunta

Resumen

Why is a CLB IP address inaccessible from within the cluster?

Limitaciones de capa 4 y comportamiento del modo Local

When are CLB instances deleted?

Directivas de eliminación para instancias de CLB creadas por CCM frente a reutilizadas

What do I do if I accidentally delete a CLB instance?

Pasos de recuperación para instancias de CLB del servidor de API, Ingress y aplicaciones

Reutilización de una instancia de CLB existente

Pregunta

Resumen

Why does reusing an existing CLB instance fail?

Requisitos de versión de CCM, origen de la instancia y VPC

Why are listeners not created when I reuse an existing CLB instance?

Anotación de sobrescritura forzada obligatoria

Solución de problemas de CLB

Pregunta

Resumen

What do I do if a CLB instance stays in the Pending state?

Revisión de eventos y resolución de errores

What do I do if a vServer group is not updated?

Revisión de eventos y resolución de errores

What do I do if a Service annotation does not take effect?

Versión de CCM, presencia de anotaciones y sintaxis

Why are no events displayed for Service and LoadBalancer synchronization?

Versión de CCM anterior a v1.9.3.276-g372aa98-aliyun

Mensajes de error de Service

Pregunta

Resumen

Quota and resource errors

Cuota de servidores backend, agotamiento de IP de vSwitch, disponibilidad de nodos

Configuration errors

Modo ENI, puerto destino, resource group, tipo de dirección, método de facturación

Network errors

Desajuste de VPC, limitación de API, conflictos de grupos vServer

CLB reuse errors

Reutilización de CLB creado por CCM, CLB no encontrado, revinculación de CLB

Billing errors

Pago vencido, saldo insuficiente, instancia compartida descontinuada

NodePort y CCM

Pregunta

Resumen

How do I access a NodePort Service?

Métodos de acceso según el alcance de red

How do I configure a listener for a NodePort Service?

Cambio al tipo LoadBalancer

How do I configure the NodePort range?

ServiceNodePortRange y prevención de conflictos de puertos

What do I do if a CCM upgrade fails?

Enlace de solución de problemas

How do I add permissions required for a CCM upgrade in an ACK dedicated cluster?

Permisos de RAM para v2.11.2 y posteriores

¿Cómo habilito la persistencia de sesión para un Service de Kubernetes?

Enlace externo

Configuración de CLB

¿Qué instancias de CLB crea un clúster de ACK de forma predeterminada?

Si se instala el complemento Nginx Ingress Controller durante la creación del clúster, este genera dos instancias de CLB:

  • CLB del servidor de API: Es el endpoint del servidor de API. Todas las solicitudes del clúster pasan por esta instancia a través del puerto TCP 6443. Los backends son pods del servidor de API o instancias ECS maestras.

  • CLB de Nginx Ingress Controller: Está asociado al Service nginx-ingress-controller en kube-system. Se vincula dinámicamente a los pods del Ingress Controller para balancear las solicitudes externas. Escucha en los puertos TCP 80 y 443.

¿Cómo elijo entre las directivas de tráfico externo Local y Cluster?

Las directivas de tráfico externo Local y Cluster varían según el plugin de red. Consulte External traffic policies: Local and Cluster.

¿Por qué se modificó mi configuración de CLB?

CCM utiliza una API declarativa y actualiza automáticamente la configuración de CLB basándose en la definición del Service. Los cambios realizados directamente en la consola de CLB pueden sobrescribirse.

Importante

No modifique las instancias de CLB gestionadas por Kubernetes desde la consola de CLB. Los cambios podrían perderse y dejar el Service inaccesible. Utilice anotaciones de Service en su lugar. Consulte Use annotations to configure a Classic Load Balancer (CLB) instance.

¿Cómo se calculan las ponderaciones de los nodos en modo Local?

El siguiente ejemplo utiliza un pod de aplicación (app=nginx) desplegado en tres instancias ECS y expuesto mediante un Service.

CCM2

v1.9.3.276-g372aa98-aliyun y posteriores

CCM establece la ponderación del nodo igual al número de pods en dicho nodo. Por ejemplo, si tres instancias ECS alojan 1, 2 y 3 pods respectivamente, sus ponderaciones serán 1, 2 y 3. El tráfico se distribuye en una proporción de 1:2:3, lo que resulta en una carga equilibrada entre los pods.

Fórmula:

node weight

node

Entre v1.9.3.164-g2105d2e-aliyun y v1.9.3.276-g372aa98-aliyun

CCM calcula las ponderaciones según la cantidad de pods. Para las mismas tres instancias ECS, las ponderaciones calculadas son 16, 33 y 50, lo que da una proporción de tráfico aproximada de 1:2:3.

Fórmula:

calculation formula

ccm4

Anterior a v1.9.3.164-g2105d2e-aliyun

Todos los servidores backend tienen una ponderación de 100, lo que distribuye el tráfico uniformemente entre las instancias ECS sin importar la cantidad de pods. Esto provoca una carga desequilibrada entre los pods: los nodos con menos pods reciben desproporcionadamente más tráfico por pod.

CCM3

¿Cómo habilito el drenado de conexiones para un Service de tipo LoadBalancer?

Agregue las siguientes anotaciones al Service. Cuando se elimina un servidor backend, la instancia de CLB continúa procesando las conexiones existentes durante la duración del tiempo de espera de drenado.

  • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain

  • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout

Consulte Enable connection draining for a listener.

¿Cómo listo todas las instancias de CLB en un clúster?

  1. Connect to the cluster using kubectl.

  2. Obtenga el nombre, namespace, dirección IP y tipo de dirección de cada Service de tipo LoadBalancer. Ejemplo de salida:

       kubectl get services -A -ojson | jq '.items[] | select(.spec.type == "LoadBalancer") | {name: .metadata.name, namespace: .metadata.namespace, ip: .status.loadBalancer.ingress[0].ip, lb_type: .metadata.annotations."service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"}'
       {
         "name": "test",
         "namespace": "default",
         "ip": "192.168.*.*",
         "lb_type": "intranet"
       }
       {
         "name": "nginx-ingress-lb",
         "namespace": "kube-system",
         "ip": "47.97.*.*",
         "lb_type": "null"
       }

¿Cómo habilito el renombrado de CLB para versiones anteriores de CCM?

CCM v1.9.3.10 y posteriores etiquetan automáticamente las instancias de CLB para permitir el renombrado. Para las instancias de CLB creadas por versiones anteriores de CCM, agregue la etiqueta manualmente.

Este procedimiento aplica únicamente a instancias de CLB creadas por CCM v1.9.3.10 o anterior. El tipo de Service debe ser LoadBalancer.
  1. Conéctese al nodo maestro del clúster. Consulte Connect to an ACK cluster using kubectl.

  2. Consulte el tipo de Service y la dirección IP. Reemplace ${namespace} y ${service} con el namespace y el nombre del Service correspondientes.

       kubectl get svc -n ${namespace} ${service}
    # kubectl get svc -n ${namespace} ${service}
    nginx-local   LoadBalancer   172.19.xxx.xxx   47.111.xxx.xxx   8900:31598/TCP   33d
  3. Genere la etiqueta para la instancia de CLB:

       kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "kubernetes.do.not.delete: "substr("a"$1$2$3$4$5,1,32)}'
    # kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "ku
    kubernetes.do.not.delete: xxx
  4. Inicie sesión en la consola de CLB. Con la dirección IP obtenida en el paso 2, busque la instancia de CLB en la región correspondiente.

  5. Agregue una etiqueta a la instancia de CLB utilizando la clave y el valor del paso 3 (elementos 1 y 2 en la figura anterior). Consulte Create and manage a CLB instance.

Acceso y ciclo de vida de CLB

¿Por qué no se puede acceder a una dirección IP de CLB desde dentro del clúster?

Dos escenarios pueden causar esto.

Escenario 1: CLB privado no creado por un Service

Cuando un pod accede a una instancia de CLB privada que no fue creada por un Service, el acceso falla si el pod y un servidor backend están en el mismo nodo. Esta es una limitación de capa 4: una instancia ECS no puede ser simultáneamente servidor backend y cliente para la misma instancia de CLB.

Para resolverlo:

  • Cambie la dirección IP del CLB a una dirección IP pública.

  • Cree la instancia de CLB a través de un Service y establezca la directiva de tráfico externo en Cluster. Kube-proxy interceptará entonces el tráfico dirigido al CLB desde dentro del clúster, evitando la limitación.

**Escenario 2: externalTrafficPolicy: Local bloquea el acceso interno**

Cuando un Service usa externalTrafficPolicy: Local, el acceso interno a la IP del CLB falla desde los nodos que no tienen un pod backend. La dirección del CLB está destinada al uso externo. El tráfico interno es interceptado por kube-proxy y enrutado localmente (iptables o IPVS). Si el nodo no tiene un pod backend local, la conexión falla.

Consulte kube-proxy adds external-lb address to local node iptables rules.

Soluciones (listadas por recomendación):

  1. Acceda internamente a los Services mediante ClusterIP o nombre del Service. Por ejemplo, el nombre del Service de Ingress es nginx-ingress-lb.kube-system. Este es el enfoque recomendado.

  2. **Cambie externalTrafficPolicy a Cluster.** Esto reenvía el tráfico a todos los nodos pero habilita SNAT, por lo que el backend no puede obtener la IP real del cliente.

       kubectl edit svc nginx-ingress-lb -n kube-system
  3. Utilice passthrough de interfaz de red elástica (ENI) en clústeres Terway. Establezca externalTrafficPolicy en Cluster y agregue la anotación service.beta.kubernetes.io/backend-type: "eni". Esto conserva la IP de origen mientras permite el acceso interno. Consulte Use annotations to configure a Classic Load Balancer (CLB) instance.

       apiVersion: v1
       kind: Service
       metadata:
         annotations:
           service.beta.kubernetes.io/backend-type: eni
         labels:
           app: nginx-ingress-lb
         name: nginx-ingress-lb
         namespace: kube-system
       spec:
         externalTrafficPolicy: Cluster

¿Cuándo se eliminan las instancias de CLB?

El comportamiento de eliminación depende de si CCM creó la instancia de CLB y de cómo se asoció con el Service.

Operación de Service

CLB creado por CCM

CLB reutilizado

Eliminar el Service

Se elimina el CLB

Se conserva el CLB

Cambiar el tipo de Service de LoadBalancer a otro tipo

Se elimina el CLB

Se conserva el CLB

Si el Service reutiliza una instancia de CLB existente (anotada con service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-slb-id}), eliminar el Service no elimina la instancia de CLB. De lo contrario, eliminar el Service también elimina la instancia de CLB.

Importante

No edite un Service para cambiar una instancia de CLB creada por CCM a una reutilizada. Esto desvincula el Service del CLB creado automáticamente e impide su eliminación automática cuando se quita el Service.

¿Qué hago si elimino accidentalmente una instancia de CLB?

Aviso

Si se elimina la instancia de CLB del servidor de API, no se puede recuperar. Debe recrear el clúster. Para obtener instrucciones, consulte Create an ACK Pro cluster.

Escenario 1: CLB de Ingress eliminado

Los siguientes pasos utilizan Nginx Ingress como ejemplo.

  1. Inicie sesión en ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, busque el clúster objetivo y haga clic en su nombre. En el panel de navegación izquierdo, seleccione Network > Services.

  3. Seleccione kube-system en la lista desplegable Namespace.

    • Si nginx-ingress-lb aparece en la lista, haga clic en Edit YAML en la columna Actions. Elimine el campo status.loadBalancer y su contenido, luego haga clic en OK. CCM reconstruirá la instancia de CLB.

    • Si nginx-ingress-lb no aparece, haga clic en Create from YAML y utilice la siguiente plantilla: ``yaml apiVersion: v1 kind: Service metadata: labels: app: nginx-ingress-lb name: nginx-ingress-lb namespace: kube-system spec: externalTrafficPolicy: Local ports: selector: app: ingress-nginx type: LoadBalancer ``

      • name: http port: 80 protocol: TCP targetPort: 80

      • name: https port: 443 protocol: TCP targetPort: 443

Escenario 2: CLB específico de aplicación eliminado

  • Si ya no necesita el Service, elimínelo.

  • Si el Service aún está en uso:

    1. Inicie sesión en ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

    2. En la página Clusters, busque el clúster objetivo y haga clic en su nombre. En el panel de navegación izquierdo, seleccione Network > Services.

    3. En la lista desplegable Namespace, haga clic en All Namespaces y luego busque el Service objetivo.

    4. En la columna Actions, haga clic en Edit YAML. Elimine el contenido de status.loadBalancer y haga clic en OK. CCM reconstruirá la instancia de CLB.

Reutilización de una instancia de CLB existente

¿Por qué falla la reutilización de una instancia de CLB existente?

Compruebe lo siguiente en orden:

  1. Versión de CCM: Las versiones anteriores a v1.9.3.105-gfd4e547-aliyun no admiten la reutilización de instancias de CLB. Para obtener instrucciones de actualización, consulte Upgrade the CCM component.

  2. Origen de la instancia: No se pueden reutilizar las instancias de CLB creadas por el clúster.

  3. CLB del servidor de API: La instancia de CLB del servidor de API no se puede reutilizar.

  4. Desajuste de VPC: Una instancia de CLB privada debe estar en la misma virtual private cloud (VPC) que el clúster. No se admite la reutilización entre distintas VPC.

¿Por qué no se crean listeners al reutilizar una instancia de CLB existente?

Verifique que la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners sea "true". Sin ella, no se crean los listeners.

CCM no sobrescribe los listeners en instancias de CLB existentes de forma predeterminada:
Sobrescribir listeners activos puede causar interrupciones del servicio.
CCM admite configuraciones de backend limitadas. Para configuraciones complejas, cree los listeners en la consola de CLB. Fuerce la sobrescritura de listeners únicamente cuando sus puertos ya no estén en uso.

Solución de problemas de CLB

¿Qué hago si una instancia de CLB permanece en estado Pending?

  1. Ejecute kubectl -n {your-namespace} describe svc {your-svc-name} para revisar los mensajes de eventos.

  2. Resuelva los errores reportados en los eventos. Consulte Service error messages and solutions para obtener orientación.

Si no aparecen eventos, consulte Why are no events displayed for Service and LoadBalancer synchronization?

¿Qué hago si no se actualiza un grupo vServer?

  1. Ejecute kubectl -n {your-namespace} describe svc {your-svc-name} para revisar los mensajes de eventos.

  2. Resuelva los errores reportados en los eventos. Consulte Service error messages and solutions para obtener orientación.

Si no aparecen eventos, consulte Why are no events displayed for Service and LoadBalancer synchronization?

¿Qué hago si una anotación de Service no surte efecto?

  1. Ejecute kubectl -n {your-namespace} describe svc {your-svc-name} para buscar eventos de error. Si existen errores, consulte Service error messages and solutions.

  2. Si no aparecen errores, compruebe lo siguiente:

Para ver la lista de Services, consulte Manage services.

¿Por qué no se muestran eventos de sincronización de Service y LoadBalancer?

Si kubectl -n {your-namespace} describe svc {your-svc-name} no muestra eventos, revise la versión de CCM:

  • Anterior a v1.9.3.276-g372aa98-aliyun: No se admiten eventos. Actualice CCM. Para obtener instrucciones de actualización, consulte Upgrade the CCM component.

  • v1.9.3.276-g372aa98-aliyun y posteriores: Envíe un ticket para una investigación más detallada.

Mensajes de error de Service y soluciones

Mensajes de error comunes de Service organizados por categoría.

Errores de cuota y recursos

Mensaje de error

Descripción y solución

The backend server number has reached to the quota limit of this load balancers

La instancia de CLB alcanzó su cuota de servidores backend. De forma predeterminada, una instancia de CLB admite hasta 200 servidores backend. Para resolverlo: - Solicite un aumento de cuota en la página de gestión de cuotas de SLB. - Establezca externalTrafficPolicy: Local. El modo Cluster consume cuota rápidamente. Si utiliza el modo Cluster, agregue la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label para limitar los nodos backend. Consulte Use annotations to configure a CLB instance. - Cuando varios Services reutilizan una instancia de CLB, los recuentos de servidores backend son acumulativos. Cree una instancia de CLB independiente para el nuevo Service.

There are no available nodes for LoadBalancer

La instancia de CLB no tiene servidores backend. Compruebe si el Service está asociado con un pod en ejecución. - Si no hay ningún pod asociado, asocie el Service con un pod de aplicación. - Si el pod no está sano, resuelva el problema. - Si el pod se ejecuta en un nodo maestro, evíctelo a un nodo trabajador.

Status Code: 400 Code: VSwitchAvailableIpNotExist Message: The specified VSwitch has no available ip.

El vSwitch no tiene direcciones IP disponibles. Use service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}" para especificar un vSwitch diferente en la misma VPC.

Errores de configuración

Mensaje de error

Descripción y solución

The loadbalancer does not support backend servers of eni type

Las instancias de CLB compartidas no admiten backends ENI. Agregue la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" para utilizar una instancia de CLB de alto rendimiento. Verifique la compatibilidad de la versión de CCM. Consulte Use annotations to configure a CLB instance.

The specified Port must be between 1 and 65535.

El modo ENI no admite un valor de cadena para targetPort. Cambie el valor de targetPort en el YAML del Service a un número entero o actualice CCM. Para obtener instrucciones de actualización, consulte Upgrade the CCM component.

can not change ResourceGroupId once created

El resource group de una instancia de CLB no se puede cambiar después de su creación. Elimine la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id:"rg-xxxx" del Service.

can not find eniid for ip x.x.x.x in vpc vpc-xxxx

No se encuentra la dirección IP de la ENI en la VPC. Compruebe si el Service tiene la anotación service.beta.kubernetes.io/backend-type: eni. Si el clúster utiliza el plugin de red Flannel, el modo ENI no es compatible. Elimine la anotación.

The operation is not allowed because the instanceChargeType of loadbalancer is PayByCLCU. o User does not have permission modify InstanceChargeType to spec.

El método de facturación de la instancia de CLB no se puede cambiar de pay-as-you-go a pago por especificación. - Elimine la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec. - Si el Service tiene la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type, establezca su valor en PayByCLCU.

alicloud: can not change LoadBalancer AddressType once created. delete and retry

El tipo de dirección del CLB no se puede cambiar después de su creación. Elimine y vuelva a crear el Service.

Errores de red

Mensaje de error

Descripción y solución

Status Code: 400 Code: NetworkConflict

La instancia de CLB interna reutilizada no está en la misma VPC que el clúster. Asegúrese de que la instancia de CLB y el clúster estén en la misma VPC.

Status Code: 400 Code: Throttlingxxx

La API de CLB está siendo limitada. 1. Inicie sesión en la página de gestión de cuotas de SLB y verifique que su cuota de CLB sea suficiente. 2. Ejecute kubectl -n {your-namespace} describe svc {your-svc-name} para buscar errores de Service. Resuelva cualquier error según esta tabla.

Status Code: 400 Code: RspoolVipExist Message: there are vips associating with this vServer group.

No se puede eliminar un listener asociado al grupo vServer. 1. Compruebe si la anotación del Service contiene service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-clb-id}. De ser así, la instancia de CLB está reutilizada. 2. Elimine el listener que corresponde al puerto del Service en la consola de CLB.

Errores de reutilización de CLB

Mensaje de error

Descripción y solución

alicloud: not able to find loadbalancer named [%s] in openapi, but it's defined in service.loaderbalancer.ingress. this may happen when you removed loadbalancerid annotation o alicloud: can not find loadbalancer, but it's defined in service

No se puede localizar la instancia de CLB basándose en el Service. Inicie sesión en la consola de CLB y busque la instancia de CLB mediante la EXTERNAL-IP del Service en la misma región. 1. Si no se encuentra la instancia de CLB y ya no necesita el Service, elimínelo. 2. Si la instancia de CLB existe: - Si se creó manualmente, agregue la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Consulte Use annotations to configure a CLB instance. - Si fue creada automáticamente por CCM, compruebe si la instancia de CLB tiene la etiqueta kubernetes.do.not.delete. Si no la tiene, agréguela. Consulte How do I enable CLB renaming for older CCM versions?

SyncLoadBalancerFailed the loadbalancer xxx can not be reused, can not reuse loadbalancer created by kubernetes.

No se puede reutilizar una instancia de CLB creada por CCM. Revise el ID de CLB en la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id y resuelva según el estado del Service: - Estado Pending: Reemplace el ID de CLB con el ID de una instancia de CLB creada manualmente desde la consola de CLB. - No pendiente: Si la IP del CLB coincide con la IP externa del Service, elimine la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Si las IP difieren, busque la instancia de CLB correcta en la consola de CLB mediante la IP externa del Service y actualice la anotación, o reemplace el ID de CLB con una instancia creada manualmente y vuelva a crear el Service.

the loadbalancer lb-xxxxx can not be reused, service has been associated with ip [xxx.xxx.xxx.xxx], cannot be bound to ip [xxx.xxx.xxx.xxx]

El Service ya está vinculado a una instancia de CLB y no se puede vincular a otra. Para cambiar la instancia de CLB, elimine y vuelva a crear el Service. Cambiar solo el ID de CLB en la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id no funciona.

Errores de facturación

Mensaje de error

Descripción y solución

ORDER.ARREARAGE Message: The account is arrearage.

Su cuenta tiene un pago vencido.

PAY.INSUFFICIENT_BALANCE Message: Your account does not have enough balance.

El saldo de su cuenta es insuficiente.

Status Code: 400 Code: ShareSlbHaltSales Message: The share instance has been discontinued.

Las versiones anteriores de CCM crean instancias de CLB compartidas de forma predeterminada, pero las instancias compartidas están descontinuadas. Upgrade the CCM component.

NodePort y CCM

¿Cómo accedo a un Service de tipo NodePort?

  • Desde dentro del clúster (en un nodo del clúster): Utilice la ClusterIP y el puerto, o bien la IP del nodo y el NodePort del Service. El valor predeterminado de NodePort es mayor que 30000.

  • Desde fuera del clúster (dentro de la misma VPC): Utilice la dirección IP del nodo y el NodePort del Service.

  • Desde fuera de la VPC (desde otra VPC o desde Internet): Exponga el Service como tipo LoadBalancer y acceda a él mediante su endpoint externo.

Si la directiva de tráfico externo es Local, compruebe que el nodo al que accede aloja un pod backend del Service. Consulte External traffic policies: Local and Cluster .

¿Cómo configuro un listener para un Service de tipo NodePort?

CCM solo admite la configuración de listeners para Services de tipo LoadBalancer. Cambie el tipo de Service de NodePort a LoadBalancer.

¿Cómo configuro el rango de NodePort?

El parámetro --service-node-port-range del servidor de API (ServiceNodePortRange) controla el rango de puertos para los Services de tipo NodePort y LoadBalancer. El rango predeterminado abarca del 30000 al 32767. En los clústeres ACK Pro, personalice los parámetros del plano de control para ajustar este rango. Consulte Customize the parameters of the control plane for an ACK Pro cluster.

Tenga en cuenta lo siguiente:

  • Evite conflictos de rangos de puertos. El rango de NodePort no debe superponerse con el parámetro del kernel net.ipv4.ip_local_port_range, que controla los números de puerto locales disponibles para las aplicaciones en el nodo. El valor predeterminado de ip_local_port_range va del 32768 al 60999.

  • Los rangos predeterminados son seguros. Con la configuración predeterminada de ACK, ServiceNodePortRange (30000-32767) y ip_local_port_range (32768-60999) no se superponen. Si alguno de los rangos se ha ampliado y ahora se superponen, pueden producirse excepciones de red esporádicas. En casos graves, las comprobaciones de estado fallan y los nodos quedan fuera de línea. Restaure los valores predeterminados o ajuste ambos rangos para eliminar la superposición.

  • Reconfigure los Services existentes después de realizar cambios. Tras ajustar el rango de puertos, algunos Services de tipo NodePort o LoadBalancer podrían seguir utilizando puertos dentro del rango ip_local_port_range. Ejecute kubectl edit <service-name> y modifique el campo spec.ports.nodePort por un NodePort que no esté en uso.

¿Qué hago si falla una actualización de CCM?

Consulte Cloud Controller Manager (CCM) upgrade check fails.

¿Cómo agrego los permisos necesarios para una actualización de CCM en un clúster dedicado de ACK?

Las versiones más recientes de CCM introducen API de Alibaba Cloud que requieren permisos adicionales de Resource Access Management (RAM). Por ejemplo, la versión v2.11.2 agrega la gestión de rutas para redes Flannel, y la v2.12.1 incorpora la gestión por lotes para Network Load Balancer (NLB).

Antes de actualizar a la versión v2.11.2 o posterior en un clúster dedicado de ACK, otorgue los permisos necesarios al rol RAM del clúster:

  1. Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, localice el clúster objetivo y haga clic en su nombre. En el panel de navegación izquierdo, haga clic en Cluster Information.

  3. Haga clic en la pestaña Basic Information y luego haga clic en el nombre del rol correspondiente a Master RAM Role.

  4. En la consola de RAM, haga clic en Permissions > Policies en el panel de navegación izquierdo. Localice la directiva personalizada que comienza con k8sMasterRolePolicy-Ccm- y haga clic en su nombre.

    En clústeres más antiguos, es posible que esta directiva no exista. Seleccione en su lugar una directiva personalizada cuyo nombre comience con k8sMasterRolePolicy- .
  5. Haga clic en Edit Policy Document y agregue el permiso nlb:ListAsynJobs a los permisos de NLB. Para clústeres Flannel, agregue también los permisos vpc:CreateRouteEntries y vpc:DeleteRouteEntries a los permisos de VPC.

    "nlb:ListServerGroupServers",
            "nlb:GetJobStatus",
            "nlb:LoadBalancerLeaveSecurityGroup",
            "nlb:LoadBalancerJoinSecurityGroup",
            "nlb:ListAsynJobs"
          ],
          "Resource": "*",
          "Effect": "Allow"
        },
    },
    {
      "Action": [
        "vpc:Describe*",
        "vpc:DeleteRouteEntry",
        "vpc:CreateRouteEntry",
        "vpc:CreateRouteEntries",
        "vpc:DeleteRouteEntries"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
    ]
    }
  6. Envíe los cambios y continúe con la actualización de CCM.