Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Attach an independent EIP to a pod

Última actualización: Sep 04, 2026

En los clústeres de Kubernetes, las direcciones IP de los pods suelen ser privadas. Terway y ack-extend-network-controller permiten asociar una elastic IP address (EIP) directamente con un pod para que disponga de una salida pública independiente sin compartir tráfico con otros pods.

Requisitos previos

Utilice un clúster administrado ACK o un clúster dedicado ACK con el plugin de red Terway. Para crear un clúster, consulte Create an ACK Managed cluster y Create an ACK Dedicated cluster (Creation of new clusters is no longer supported). Para obtener información sobre el modo de red Terway, consulte Use the Terway network plugin.

Importante

A partir de noviembre de 2023, Terway ya no mantiene la función de EIP; esta se eliminó en la versión v1.7.0. Utilice ack-extend-network-controller para asociar EIP independientes a los pods. Consulte Migrate the EIP feature from Terway to ack-extend-network-controller.

Límites

  • Antes de usar una EIP, revise sus límites. Consulte Limits.

  • Esta función solo es compatible con nodos ECS.

  • El complemento gestiona el ciclo de vida de las EIP creadas por el controlador. Si desinstala el componente después de asignar una EIP a un pod, la EIP permanecerá asignada y no se liberará automáticamente.

    Antes de detener el componente, elimine los pods que utilizan EIP. Compruebe el estado de asignación y liberación de la EIP al inspeccionar el recurso podeips.alibabacloud.com que coincide con el nombre del pod. Confirme que la EIP ya no esté en uso antes de deshabilitar la función de EIP; de lo contrario, continuará la facturación de la EIP.

Facturación

La habilitación de Terway y ack-extend-network-controller es gratuita, pero los recursos en la nube que consumen generan cargos. Consulte Billing for cloud resources para obtener detalles sobre la facturación de ACK.

Contexto

En el modo de red Terway, los pods suelen acceder a la red pública mediante SNAT del host o SNAT externo a través de una EIP, mientras que los servicios LoadBalancer enrutan el tráfico de entrada. Algunos escenarios requieren una dirección IP pública independiente. Por ejemplo:

  • Un pod expone servicios en puertos aleatorios, algo común en aplicaciones basadas en UDP como servidores de juegos y teleconferencias. Por ejemplo, RTSP utiliza un puerto diferente para cada cliente.

  • Un pod necesita una salida pública dedicada para evitar la contención con otros pods.

Paso 1: Configurar permisos de RAM para EIP

ack-extend-network-controller (Recommended)

  • Otorgar permisos de RAM a un clúster administrado ACK o un clúster dedicado ACK

    1. Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:AllocateEipAddressPro",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp",
              "vpc:TagResources",
              "ecs:DescribeNetworkInterfaces"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Otorgue permisos al rol de RAM de worker del clúster. Consulte Step 2: Grant permissions to the worker RAM role of the cluster.

Terway

Terway requiere permisos relacionados con EIP y configuración adicional para asignar EIP a los pods.

  • Otorgar permisos de RAM a un clúster administrado ACK o un clúster administrado básico ACK creado en junio de 2020 o posteriormente

    1. Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Otorgue permisos al rol de RAM de worker del clúster. Consulte Step 2: Grant permissions to the worker RAM role of the cluster.

  • Otorgar permisos de RAM a un clúster dedicado ACK o un clúster administrado ACK creado antes de junio de 2020

    1. Cree una directiva de permisos personalizada con el siguiente contenido. Consulte Step 1: Create a custom permission policy.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. En la pestaña Policies de la página del rol de RAM AliyunCSManagedNetworkRole, haga clic en Grant Permission. A continuación, haga clic en Custom Policy, seleccione la directiva de permisos personalizada que creó y haga clic en OK.

Paso 2: Instalar o actualizar un plugin de clúster

Aviso

No habilite la función de EIP tanto en ack-extend-network-controller como en Terway. Esto puede provocar asignaciones duplicadas de EIP y fallos de vinculación. Utilice ack-extend-network-controller.

Comparación de plugins

Elemento

ack-extend-network-controller

Terway

Tipos de clúster compatibles

  • ACK Managed Cluster

  • ACK Dedicated Cluster

  • ACK Serverless Cluster

  • ACK Managed Cluster

  • ACK Dedicated Cluster

EIP estática

Compatible

No compatible

Fase de configuración

Después de asignar una IP al pod, el controlador asigna y vincula una EIP.

Asigna y vincula una EIP durante la ejecución de CNI.

Versiones compatibles

Versión del plugin v0.2.0 o posterior.

Versión del plugin Terway v1.0.10.280-gdc2cb6c-aliyun o posterior, pero anterior a la v1.7.0.

Instalar o actualizar un plugin

Para ack-extend-network-controller, instálelo desde Marketplace y habilite el controlador de EIP. Para Terway, actualice a v1.0.10.280-gdc2cb6c-aliyun o posterior.

ack-extend-network-controller (recommended)

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Marketplace > Marketplace.

  2. En la página Marketplace, busque ack-extend-network-controller y haga clic en la aplicación deseada.

  3. En la página de detalles de la aplicación, haga clic en Deploy en la esquina superior derecha.

  4. En el panel Create, seleccione un clúster y un namespace, y luego haga clic en Next.

    1. En la página OK, seleccione una versión, configure los parámetros y haga clic en OK.

      La siguiente tabla describe los parámetros.

      Parámetro

      Tipo

      Obligatorio

      Descripción

      clusterID

      string

      Sí

      El ID del clúster.

      regionID

      string

      Sí

      La región del clúster.

      enableControllers

      []string

      Sí

      Establezca este valor en eip para habilitar la función de EIP.

      networkController.vpcID

      string

      Sí

      El ID de VPC del clúster.

      networkController.eipController.maxConcurrentReconciles

      int

      No

      El número de reconciliaciones simultáneas para el controlador de EIP.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      No

      El intervalo, en minutos, para la recolección de basura de EIP estáticas.

      networkController.customStatefulWorkloadKinds

      []string

      No

      Los tipos de controladores con estado personalizados.

      enableVirtualNode

      bool

      No

      Habilita la compatibilidad con nodos virtuales ECI.

      Importante

      Si habilita esta función, el controlador asignará EIP a los pods en instancias ECI. La anotación de pod configurada no puede ser la misma que se usa para la función de EIP compatible con ECI. Utilice esta función con precaución.

      enableRRSA

      bool

      No

      Habilita RRSA para la autenticación.

      Nota

      Compatible con el plugin ack-extend-network-controller v0.10.0 y posteriores.

      Para obtener detalles sobre la configuración, consulte Use RRSA to configure RAM permissions for a ServiceAccount to isolate pod permissions.

      rrsaRoleName

      string

      No

      El nombre del rol.

      Nota

      Compatible con el plugin ack-extend-network-controller v0.10.0 y posteriores.

      credential.accessKey

      string

      No

      El AccessKey ID de la cuenta con permisos para asociar EIP.

      Este parámetro no es obligatorio si completó la configuración en Step 1: Configure the RAM permissions required to attach an EIP.

      Importante

      No se recomienda, ya que este método almacena información confidencial en un Secret de Kubernetes.

      credential.accessSecret

      string

      No

      El AccessKey Secret de la cuenta con permisos para asociar EIP.

      Este parámetro no es obligatorio si completó la configuración en Step 1: Configure the RAM permissions required to attach an EIP.

      Importante

      No se recomienda, ya que este método almacena información confidencial en un Secret de Kubernetes.

      kubeClientQPS

      float32

      No

      Límite de QPS cuando el componente accede al servidor API del clúster.

      Nota

      Compatible con el plugin ack-extend-network-controller v0.12.2 y posteriores.

      kubeClientBurst

      int

      No

      Número máximo de solicitudes en ráfaga al servidor API del clúster.

      Nota

      Compatible con el plugin ack-extend-network-controller v0.12.2 y posteriores.

      Configuración de ejemplo:

      clusterID: "c11ba338192xxxxxxx"  
      regionID: "cn-hangzhou"      
      vpcID: "vpc-bp1rkq0zxxxxxx" 
      enableControllers:
        - eip              
      networkController:
        eipController:
          maxConcurrentReconciles: 1   
          garbageCollectionPeriodInMinutes: 1  
        customStatefulWorkloadKinds:           
        - foo
      credential:                             
        accessKey: ""
        accessSecret: ""

Para actualizar la versión y los parámetros de ack-extend-network-controller, consulte Modify a Helm chart.

Terway

Si su clúster utiliza Terway, actualice terway-eni o terway-eniip a una versión que admita EIP. Consulte Components.

Nota

La versión del plugin Terway debe ser v1.0.10.280-gdc2cb6c-aliyun o posterior, pero anterior a la v1.7.0. Consulte Terway para obtener detalles sobre las versiones.

Paso 3: Habilitar la función de EIP

Anotaciones de EIP

Utilice las anotaciones del pod para habilitar las EIP: asigne automáticamente una EIP al pod o asocie una EIP existente.

Asignar automáticamente una EIP

Importante

La asignación automática de EIP puede crear y liberar direcciones repetidamente durante la recreación de pods o fallos de CNI. Se recomienda especificar una EIP existente.

Anotaciones del pod

Valor

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

Especifica si se debe crear y asociar automáticamente una EIP. Valores válidos:

  • true: Crear y asociar automáticamente una EIP.

  • false: No crear ni asociar automáticamente una EIP.

k8s.aliyun.com/eci-with-eip (Compatible)

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

Esta anotación solo aplica al crear una EIP.

Especifica el ancho de banda máximo de la EIP en Mbps. Consulte Request an EIP.

network.alibabacloud.com/eip-internet-charge-type

k8s.aliyun.com/eip-internet-charge-type

Esta anotación solo aplica al crear una EIP.

Especifica el método de medición de la EIP. Valores válidos:

  • PayByTraffic (predeterminado): pago por tráfico.

  • PayByBandwidth: pago por ancho de banda.

Consulte Request an EIP.

k8s.aliyun.com/eip-charge-type (Compatible)

network.alibabacloud.com/eip-instance-charge-type

k8s.aliyun.com/eip-instance-charge-type

Esta anotación solo aplica al crear una EIP.

Especifica el método de facturación de la EIP. Valores válidos:

  • PostPaid: pay-as-you-go.

Consulte Request an EIP.

Nota

Esta anotación solo es compatible con ack-extend-network-controller.

La opción PrePaid (suscripción) no es compatible.

network.alibabacloud.com/eip-common-bandwidth-package-id

k8s.aliyun.com/eip-common-bandwidth-package-id

ID del plan de ancho de banda de EIP que se va a asociar.

Nota

Esta función requiere Terway v1.2.3 o posterior. No existen restricciones de versión para el componente ack-extend-network-controller.

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

Esta anotación solo aplica al crear una EIP.

Especifica el tipo de línea de la EIP. Valores válidos:

  • BGP: Línea BGP (Multi-ISP).

  • BGP_PRO: Línea BGP (Multi-ISP) Pro.

  • Si su cuenta está en la lista de permitidos para ancho de banda de ISP único, también puede seleccionar uno de los siguientes tipos:

    • ChinaTelecom: China Telecom

    • ChinaUnicom: China Unicom

    • ChinaMobile: China Mobile

    • ChinaTelecom_L2: China Telecom L2

    • ChinaUnicom_L2: China Unicom L2

    • ChinaMobile_L2: China Mobile L2

  • Si utiliza la región China (Hangzhou Finance), establezca el valor en BGP_FinanceCloud.

Consulte Request an EIP.

Nota

Esta función requiere Terway v1.2.3 o posterior. No existen restricciones de versión para el componente ack-extend-network-controller.

network.alibabacloud.com/eip-public-ip-address-pool-id

k8s.aliyun.com/eip-public-ip-address-pool-id

Esta anotación solo aplica al crear una EIP.

Especifica el ID del pool de direcciones IP. Consulte IP address pools para conocer los límites y procedimientos.

Nota

Esto solo es compatible con ack-extend-network-controller.

network.alibabacloud.com/eip-resource-group-id

k8s.aliyun.com/eip-resource-group-id

Esta anotación solo aplica al crear una EIP.

Especifica el ID del resource group para la EIP. Consulte Request an EIP.

Nota

Esto es compatible con ack-extend-network-controller v0.4.0 y versiones posteriores.

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

Esta anotación solo aplica al crear una EIP.

Especifica el nombre de la EIP. Consulte Request an EIP.

Nota

Esto es compatible con ack-extend-network-controller v0.6.0 y versiones posteriores.

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

Esta anotación solo aplica al crear una EIP.

Especifica la descripción de la EIP. Consulte Request an EIP.

Nota

Esto es compatible con ack-extend-network-controller v0.6.0 y versiones posteriores.

network.alibabacloud.com/eip-security-protection-types

k8s.aliyun.com/eip-security-protection-types

Esta anotación solo aplica al crear una EIP.

Especifica el nivel de protección de seguridad para la EIP. Se admiten Anti-DDoS enabled EIPs.

  • Si se deja vacío, este parámetro toma Anti-DDoS Origin Basic como valor predeterminado.

  • Establezca el valor en AntiDDoS_Enhanced para usar Anti-DDoS Origin Pro.

Para especificar varios niveles de protección, sepárelos con una coma (,). Consulte Request an EIP.

Nota

Esto es compatible con ack-extend-network-controller v0.9.0 y versiones posteriores.

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

Esta anotación solo aplica al crear una EIP.

Especifica las etiquetas que se agregarán a la EIP. El valor debe ser una cadena JSON válida. Consulte Manage tags.

Ejemplo: k8s.aliyun.com/eip-tags: "{\"foo\":\"bar\"}".

Nota

Esto es compatible con ack-extend-network-controller v0.11.0 y versiones posteriores.

Especificar una instancia de EIP

Especifique el ID de la instancia de EIP en una anotación del pod para asociar una EIP existente. La anotación solo vincula la EIP; no modifica su configuración.

Importante

Esta función no es adecuada para controladores de múltiples réplicas como Deployments. Cada instancia de EIP solo puede ser referenciada por un pod. Utilícela con cargas de trabajo con estado, como StatefulSets.

Anotaciones del pod

Valor

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

El ID de la instancia de EIP que se va a asociar, por ejemplo, eip-bp14qxxxxxxx.

Importante

No asigne la misma instancia de EIP a pods con nombres diferentes. Cuando se elimina un pod, el controlador de EIP desasocia la dirección. Durante este periodo, no puede usar la misma instancia de EIP para un nuevo pod. Para comprobar si la desasociación se completó, verifique que el recurso PodEIP con el mismo nombre que el pod ya no exista.

k8s.aliyun.com/eci-eip-instanceid (Compatible)

Anotaciones de estrategia de liberación de EIP

Esta estrategia de liberación conserva la EIP de un pod después de su recreación. Combínela con la asignación automática para mantener EIP persistentes en cargas de trabajo con estado.

Importante
  • Esta función solo es compatible con ack-extend-network-controller y aplica exclusivamente a controladores de réplicas con estado. No se puede utilizar con controladores sin estado.

  • Si especifica un ID de instancia de EIP, la instancia no se libera cuando se elimina el pod.

Anotación del pod

Valor

network.alibabacloud.com/pod-eip-release-strategy

k8s.aliyun.com/pod-eip-release-strategy

La estrategia de liberación para la EIP del pod. Valores válidos:

  • Follow (predeterminado): La EIP se libera cuando se elimina el pod.

  • Never: La EIP no se elimina cuando se borra el pod. Elimine manualmente el recurso PodEIP cuando ya no sea necesario.

También puede especificar un periodo de retención. Se admiten expresiones de duración estilo Go. Por ejemplo, 5m30s indica que la EIP se libera 5.5 minutos después de eliminar el pod.

Habilitar EIP en ack-extend-network-controller o Terway

Habilitar en ack-extend-network-controller

Nota

ack-extend-network-controller invoca las API de Alibaba Cloud para crear recursos. Configure los permisos de RAM, instale el componente desde el Marketplace y utilice anotaciones para crear y asociar EIP a los pods.

Crear y asociar EIP mediante anotaciones

Utilice las anotaciones del manifiesto del pod para crear una EIP y asociarla al pod. Consulte FAQ para obtener detalles sobre las anotaciones.

  1. Cree una aplicación y use anotaciones para generar y vincular una EIP a un pod.

    Deployment

    Este manifiesto crea un Deployment donde ACK asigna automáticamente una instancia de EIP con un ancho de banda máximo de 5 Mbps a cada pod.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/pod-with-eip: "true"
            k8s.aliyun.com/eip-bandwidth: "5"
        spec:
          readinessGates:
          - conditionType: "k8s.aliyun.com/eip"
          containers:
          - name: example
            image: nginx

    Una vez creado el pod, consulte el recurso podeips.alibabacloud.com que tiene el mismo nombre que el pod para ver los detalles de la EIP asignada.

    kubectl get podeip -n <namespace> <podname>  -o yaml

    Salida esperada:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodEIP
    metadata:
      creationTimestamp: "2023-12-15T04:25:37Z"
      finalizers:
      - podeip-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-xxx
      namespace: default
      resourceVersion: "222800"
      uid: 43xxx-f1xx-4xxx-b3xx-969faxxx
    spec:
      allocationID: eip-2ze2qe8zsxxx
      allocationType:
        releaseStrategy: Follow
        type: Auto
    status:
      eipAddress: 39.102.XX.XX
      internetChargeType: PayByTraffic
      isp: BGP
      networkInterfaceID: eni-2zeagv8f3xxxx
      podLastSeen: "2023-12-15T05:18:47Z"
      privateIPAddress: 192.168.XX.XX
      resourceGroupID: rg-acfmwxxxxxsq
      status: InUse

    StatefulSet

    Utilice el siguiente manifiesto para crear un StatefulSet con dos pods. Se asigna automáticamente una EIP a cada pod y la estrategia de liberación se configura para eliminar el recurso PodEIP 10 minutos después de borrar el pod correspondiente.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: example
      labels:
        app: example
    spec:
      serviceName: "example"
      replicas: 2
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/pod-with-eip: "true"
            k8s.aliyun.com/pod-eip-release-strategy: "10m"
        spec:
          containers:
          - name: example
            image: nginx

    Después de crear los pods, consulte los recursos podeips.alibabacloud.com para rastrear la información de las EIP asignadas.

    kubectl get podeip -n <namespace> -o yaml

    Salida esperada:

    apiVersion: v1
    items:
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:01Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-0
        namespace: default
        resourceVersion: "227221"
        uid: 79954xx-17xx-4dxx-b7xx-15b84xxx
      spec:
        allocationID: eip-2ze08metxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.105.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2ze4tkg4xxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        resourceGroupID: rg-acfmwxxx
        status: InUse
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:03Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-1
        namespace: default
        resourceVersion: "227222"
        uid: 1339xxxe7-97xx-46xx-9bxx-537690xxx
      spec:
        allocationID: eip-2zetwhffqxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.105.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2zeagv8f3wxxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        resourceGroupID: rg-acfmwqnwxxx
        status: InUse
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T04:25:37Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-5bxxx-9xx
        namespace: default
        resourceVersion: "227220"
        uid: 43cdfxxx-f1xx-42xx-b3xx-969fxxx
      spec:
        allocationID: eip-2ze2qe8zsmnxxx
        allocationType:
          releaseStrategy: Follow
          type: Auto
      status:
        eipAddress: 39.102.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2zeagv8f3wxxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        publicIpAddressPoolID: pippool-2ze498cxxx
        resourceGroupID: rg-acfmwqnxxx
        status: InUse
    kind: List
    metadata:
      resourceVersion: ""

    Cuando se elimina un pod de esta aplicación con estado, su recurso personalizado (CR) PodEIP se conserva durante 10 minutos antes de borrarse. Si se crea un pod con el mismo nombre durante este periodo, reutilizará la EIP correspondiente.

  2. Compruebe la configuración.

    Una vez que el pod entre en estado Running, revise la anotación k8s.aliyun.com/allocated-eipAddress para ver su dirección EIP asignada y acceder al pod.

Habilitar en Terway

  1. Despliegue la configuración de Terway para admitir la función de EIP.

    1. Edite el ConfigMap de Terway.

      kubectl edit cm eni-config -n kube-system
    2. En eni_conf, agregue la siguiente línea.

      "enable_eip_pool": "true"
      Nota

      Para forzar la desasociación de una EIP de su instancia actual al vincularla con una nueva, agregue el parámetro "allow_eip_rob": "true" en eni_conf.

    3. Al terminar la edición, presione la tecla Esc, escriba :wq! y presione la tecla Enter para guardar los cambios y salir del modo de edición.

    4. Recrea los pods de Terway para aplicar los cambios.

      kubectl delete pod -n kube-system -l app=terway-eniip # If you installed the terway-eni component, replace terway-eniip with terway-eni.
  2. Cree y asocie una EIP a un pod mediante anotaciones.

    Utilice las anotaciones del manifiesto del pod para crear una EIP y asociarla al pod. Consulte EIP-related limits.

    Asignar automáticamente una EIP

    Agregue estas anotaciones para asignar automáticamente una EIP y especificar el ancho de banda:

    • k8s.aliyun.com/pod-with-eip: "true": Asigna una EIP pública dedicada al pod.

    • k8s.aliyun.com/eip-bandwidth: "5": Especifica el ancho de banda de la EIP. El valor predeterminado es 5 Mbps.

    Manifiesto de ejemplo:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          annotations:
            network.alibabacloud.com/pod-with-eip: "true" # Automatically assign a public EIP to the Nginx container.
            network.alibabacloud.com/eip-bandwidth: "5"   # Specify the bandwidth of the EIP. The default is 5 Mbps, which is consistent with the EIP default value.
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx

    Especificar una EIP

    Importante
    • Dado que una sola EIP no puede asociarse a múltiples pods, este método no es adecuado para cargas de trabajo como Deployments y StatefulSets que tienen más de una réplica.

    • De forma predeterminada, si la EIP especificada ya está asociada a una instancia, la asociación fallará. Para forzar la desasociación de la EIP de la instancia anterior y vincularla a la nueva, debe establecer "allow_eip_rob": "true" en ConfigMap como se describió anteriormente.

    • Solo puede especificar un ID de instancia de EIP para cargas de trabajo de réplica única. Por ejemplo, un Deployment no puede tener más de una réplica.

    Agregue la siguiente anotación para especificar un ID de instancia de EIP para un pod:

    k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>"
  3. Compruebe la configuración.

    Una vez que el pod entre en estado Running, revise la anotación network.alibabacloud.com/allocated-eipAddress para ver su dirección EIP asignada y acceder al pod.

Preguntas frecuentes

El pod está listo antes de que se vincule la EIP

El controlador asigna una EIP solo después de que se asigna una IP al pod, por lo que el pod podría estar en estado Ready antes de que se vincule la EIP. Utilice los siguientes métodos para controlar los tiempos.

Readiness gates

Nota

Configurar readiness gates requiere ack-extend-network-controller.

Con readinessGates, el controlador actualiza las condiciones del pod solo después de vincular la EIP, lo que evita el estado Ready hasta que finaliza la vinculación.

kind: Pod
...
spec:
  readinessGates:
  - conditionType: "k8s.aliyun.com/eip"
status:
  conditions:
  - lastProbeTime: "2022-12-12T03:45:48Z"
    lastTransitionTime: "2022-12-12T03:45:48Z"
    reason: Associate eip succeed
    status: "True"
    type: k8s.aliyun.com/eip
...

Init container

Configure un init container para verificar la asignación de la EIP.

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init
    image: busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/allocated-eipAddress=\\S?[0-9]+\\S?' /etc/podinfo/annotations; do echo waiting for annotations; sleep 2; done"]
    volumeMounts:
      - name: podinfo
        mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "labels"
            fieldRef:
              fieldPath: metadata.labels
          - path: "annotations"
            fieldRef:
              fieldPath: metadata.annotations

Pod inaccesible a través de la EIP

Las directivas ACL restrictivas suelen causar este problema. Revise estos controles de acceso:

  • Cloud Firewall: El tráfico de la EIP está sujeto a las reglas de control de acceso de Cloud Firewall. Permita el tráfico entrante y saliente para la EIP del pod y los puertos de servicio. Consulte Configure access control policies for an internet firewall.

  • Security group del nodo: Después de asociar una EIP a un pod, el security group del nodo sigue rigiendo el tráfico. Permita el tráfico entrante desde la IP del cliente hacia los puertos de servicio del pod, así como cualquier tráfico saliente necesario. Consulte Configure cluster security groups.