Todos os produtos
Search
Central de documentação

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

Última atualização: Nov 03, 2026

Em clusters Kubernetes, os endereços IP dos pods são geralmente privados. O Terway e o ack-extend-network-controller permitem associar um Elastic IP Address (EIP) diretamente a um pod. Assim, o pod obtém uma saída pública independente, sem compartilhar tráfego com outros pods.

Pré-requisitos

Use um ACK Managed cluster ou um ACK Dedicated cluster com o plugin de rede Terway. Para criar um cluster, consulte Criar um ACK Managed cluster e Criar um ACK Dedicated cluster (A criação de novos clusters não é mais suportada). Para obter detalhes sobre o modo de rede Terway, visualize Usar o plugin de rede Terway.

Importante

Desde novembro de 2023, o Terway não mantém mais o recurso de EIP; a versão v1.7.0 o removeu. Use o ack-extend-network-controller para associar EIPs independentes aos pods. Consulte Migrar o recurso de EIP do Terway para o ack-extend-network-controller.

Limitações

  • Antes de usar um EIP, revise seus limites. Consulte Limites.

  • Este recurso é suportado apenas em nós ECS.

  • O add-on gerencia o ciclo de vida dos EIPs criados pelo controller. Se você desinstalar o componente após atribuir um EIP a um pod, o EIP permanecerá alocado e não será liberado automaticamente.

    Antes de interromper o componente, exclua os pods que usam EIPs. Verifique o status de alocação e liberação do EIP inspecionando o recurso podeips.alibabacloud.com correspondente ao nome do pod. Confirme que o EIP não está mais em uso antes de desativar o recurso de EIP; caso contrário, a cobrança continuará.

Faturamento

A ativação do Terway e do ack-extend-network-controller é gratuita, mas os recursos de nuvem consumidos geram cobranças. Consulte Faturamento de recursos de nuvem para obter detalhes sobre o faturamento do ACK.

Contexto

No modo de rede Terway, os pods normalmente acessam a rede pública por meio de SNAT do host ou SNAT externo via EIP, com Services do tipo LoadBalancer roteando o tráfego de entrada. Alguns cenários exigem um endereço IP público independente. Por exemplo:

  • Um pod expõe serviços em portas aleatórias, comum em aplicações baseadas em UDP, como servidores de jogos e teleconferência. O RTSP, por exemplo, usa uma porta diferente para cada cliente.

  • Um pod necessita de uma saída pública dedicada para evitar contenção com outros pods.

Etapa 1: Configure permissões RAM para EIPs

ack-extend-network-controller (Recommended)

  • Conceder permissões RAM para um ACK managed cluster ou um ACK dedicated cluster

    1. Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.

          {
            "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. Conceda permissões à função RAM worker do cluster. Consulte Etapa 2: Conceder permissões à função RAM worker do cluster.

Terway

O Terway requer permissões relacionadas a EIP e configurações adicionais para atribuir EIPs aos pods.

  • Conceder permissões RAM para um ACK managed cluster ou um ACK basic managed cluster criado em junho de 2020 ou posteriormente

    1. Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Conceda permissões à função RAM worker do cluster. Consulte Etapa 2: Conceder permissões à função RAM worker do cluster.

  • Conceder permissões RAM para um ACK dedicated cluster ou um ACK managed cluster criado antes de junho de 2020

    1. Crie uma política de permissão personalizada com o seguinte conteúdo. Consulte Etapa 1: Criar uma política de permissão personalizada.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Na aba Policies da página da função RAM AliyunCSManagedNetworkRole, clique em Grant Permission. Em seguida, clique em Custom Policy, selecione a política de permissão personalizada criada e clique em OK.

Etapa 2: Instale ou atualize um plugin de cluster

Aviso

Não ative o recurso de EIP simultaneamente no ack-extend-network-controller e no Terway. Isso pode causar alocações duplicadas de EIP e falhas de vinculação. Use o ack-extend-network-controller.

Comparação de plugins

Item

ack-extend-network-controller

Terway

Tipos de cluster suportados

  • ACK Managed Cluster

  • ACK Dedicated Cluster

  • ACK Serverless Cluster

  • ACK Managed Cluster

  • ACK Dedicated Cluster

EIP estático

Suportado

Não suportado

Fase de configuração

Após a atribuição de um IP ao pod, o controller atribui e vincula um EIP.

Atribui e vincula um EIP durante a execução do CNI.

Versões suportadas

Versão do plugin v0.2.0 ou posterior.

Versão do plugin Terway v1.0.10.280-gdc2cb6c-aliyun ou posterior, mas anterior à v1.7.0.

Instale ou atualize um plugin

Para o ack-extend-network-controller, instale-o a partir do Marketplace e ative o controller de EIP. Para o Terway, atualize para a versão v1.0.10.280-gdc2cb6c-aliyun ou posterior.

ack-extend-network-controller (recommended)

  1. Faça login no console ACK. No painel de navegação à esquerda, clique em Marketplace > Marketplace.

  2. Na página Marketplace, pesquise por ack-extend-network-controller e clique na aplicação desejada.

  3. Na página de detalhes da aplicação, clique em Deploy no canto superior direito.

  4. No painel Create, selecione um cluster e namespace e clique em Next.

    1. Na página OK, selecione uma versão, configure os parâmetros e clique em OK.

      A tabela a seguir descreve os parâmetros.

      Parâmetro

      Tipo

      Obrigatório

      Descrição

      clusterID

      string

      Sim

      O ID do cluster.

      regionID

      string

      Sim

      A região do cluster.

      enableControllers

      []string

      Sim

      Defina como eip para ativar o recurso de EIP.

      networkController.vpcID

      string

      Sim

      O ID da VPC do cluster.

      networkController.eipController.maxConcurrentReconciles

      int

      Não

      O número de reconciliações simultâneas para o controller de EIP.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      Não

      O intervalo, em minutos, para a coleta de lixo de EIPs estáticos.

      networkController.customStatefulWorkloadKinds

      []string

      Não

      Os tipos de controllers stateful personalizados.

      enableVirtualNode

      bool

      Não

      Ativa o suporte a nó virtual ECI.

      Importante

      Se você ativar este recurso, o controller atribuirá EIPs aos pods em instâncias ECI. A annotation configurada no pod não pode ser igual àquela usada para o recurso de EIP suportado pelo ECI. Use este recurso com cautela.

      enableRRSA

      bool

      Não

      Ativa o RRSA para autenticação.

      Nota

      Suportado pelo plugin ack-extend-network-controller v0.10.0 e posterior.

      A configuração do RRSA suporta apenas o método de injeção ack-pod-identity-webhook. Para detalhes de configuração, consulte Usar RRSA para configurar permissões RAM para uma ServiceAccount e isolar permissões de pod.

      rrsaRoleName

      string

      Não

      O nome da função.

      Nota

      Suportado pelo plugin ack-extend-network-controller v0.10.0 e posterior.

      credential.accessKey

      string

      Não

      O AccessKey ID da conta com permissões para associar EIPs.

      Este parâmetro não é necessário se você concluiu a configuração na Etapa 1: Configure as permissões RAM necessárias para associar um EIP.

      Importante

      Não recomendado, pois este método armazena informações sensíveis em um Secret do Kubernetes.

      credential.accessSecret

      string

      Não

      O AccessKey Secret da conta com permissões para associar EIPs.

      Este parâmetro não é necessário se você concluiu a configuração na Etapa 1: Configure as permissões RAM necessárias para associar um EIP.

      Importante

      Não recomendado, pois este método armazena informações sensíveis em um Secret do Kubernetes.

      kubeClientQPS

      float32

      Não

      Limite de QPS quando o componente acessa o servidor de API do cluster.

      Nota

      Suportado pelo plugin ack-extend-network-controller v0.12.2 e posterior.

      kubeClientBurst

      int

      Não

      Número máximo de requisições em rajada para o servidor de API do cluster.

      Nota

      Suportado pelo plugin ack-extend-network-controller v0.12.2 e posterior.

      Exemplo de configuração:

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

Para atualizar a versão e os parâmetros do ack-extend-network-controller, consulte Modifique um chart Helm.

Terway

Se o seu cluster usa o Terway, atualize o terway-eni ou terway-eniip para uma versão que suporte EIPs. Consulte Gerencie componentes.

Nota

A versão do plugin Terway deve ser v1.0.10.280-gdc2cb6c-aliyun ou posterior, mas anterior à v1.7.0. Consulte Terway para detalhes sobre versões.

Etapa 3: Ative o recurso de EIP

Annotations de EIP

Use annotations de pod para ativar EIPs: atribua um automaticamente a um pod ou associe um EIP existente.

Automatically assign an EIP

Importante

A atribuição automática de EIP pode criar e liberar EIPs repetidamente durante a recriação de pods ou falhas de CNI. Especifique um EIP existente como alternativa.

Annotations de pod

Valor

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

Especifica se deve criar e associar automaticamente um EIP. Valores válidos:

  • true: Criar e associar automaticamente um EIP.

  • false: Não criar e associar automaticamente um EIP.

k8s.aliyun.com/eci-with-eip (Compatível)

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

Esta annotation aplica-se apenas ao criar um EIP.

Especifica a largura de banda de pico do EIP em Mbps. Consulte Solicitar um EIP.

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

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

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o método de medição do EIP. Valores válidos:

  • PayByTraffic (padrão): pagamento por tráfego.

  • PayByBandwidth: pagamento por largura de banda.

Consulte Solicitar um EIP.

k8s.aliyun.com/eip-charge-type (Compatível)

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

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

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o método de faturamento do EIP. Valores válidos:

  • PostPaid: pagamento conforme o uso.

Consulte Solicitar um EIP.

Nota

Esta annotation é suportada apenas pelo ack-extend-network-controller.

A opção PrePaid (assinatura) não é suportada.

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

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

ID do EIP Bandwidth Plan a ser associado.

Nota

Este recurso requer Terway v1.2.3 ou posterior. Não há restrições de versão para o componente ack-extend-network-controller.

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o tipo de linha do EIP. Valores válidos:

  • BGP: Linha BGP (Multi-ISP).

  • BGP_PRO: Linha BGP (Multi-ISP) Pro.

  • Se você estiver na lista de permissões para largura de banda de ISP único, também poderá selecionar um dos seguintes 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

  • Se você usar a região China (Hangzhou Finance), defina o valor como BGP_FinanceCloud.

Consulte Solicitar um EIP.

Nota

Este recurso requer Terway v1.2.3 ou posterior. Não há restrições de versão para o componente ack-extend-network-controller.

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

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

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o ID do pool de endereços IP. Consulte Pools de endereços IP para limites e procedimentos.

Nota

Isso é suportado apenas pelo ack-extend-network-controller.

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

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

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o ID do grupo de recursos para o EIP. Consulte Solicitar um EIP.

Nota

Isso é suportado pelo ack-extend-network-controller v0.4.0 e posterior.

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o nome do EIP. Consulte Solicitar um EIP.

Nota

Isso é suportado pelo ack-extend-network-controller v0.6.0 e posterior.

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

Esta annotation aplica-se apenas ao criar um EIP.

Especifica a descrição do EIP. Consulte Solicitar um EIP.

Nota

Isso é suportado pelo ack-extend-network-controller v0.6.0 e posterior.

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

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

Esta annotation aplica-se apenas ao criar um EIP.

Especifica o nível de proteção de segurança para o EIP. EIPs com Anti-DDoS ativado são suportados.

  • Se deixado em branco, este parâmetro assume como padrão o Anti-DDoS Origin Basic.

  • Defina o valor como AntiDDoS_Enhanced para usar o Anti-DDoS Origin Pro.

Para especificar vários níveis de proteção, separe-os com vírgula (,). Consulte Solicitar um EIP.

Nota

Isso é suportado pelo ack-extend-network-controller v0.9.0 e posterior.

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

Esta annotation aplica-se apenas ao criar um EIP.

Especifica tags para adicionar ao EIP. O valor deve ser uma string JSON válida. Consulte Gerencie tags.

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

Nota

Isso é suportado pelo ack-extend-network-controller v0.11.0 e posterior.

Specify an EIP instance

Especifique o ID da instância de EIP em uma annotation de pod para associar um EIP existente. A annotation apenas vincula o EIP; ela não altera a configuração do EIP.

Importante

Este recurso não é adequado para controllers de múltiplas réplicas, como Deployments. Apenas um pod pode referenciar cada instância de EIP. Use-o com workloads stateful, como StatefulSets.

Annotations de pod

Valor

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

O ID da instância de EIP a ser associada, por exemplo, eip-bp14qxxxxxxx.

Importante

Não atribua a mesma instância de EIP a pods com nomes diferentes. Após a exclusão de um pod, o controller de EIP desassocia o EIP. Durante esse período, você não pode usar a mesma instância de EIP para um novo pod. Para verificar se a desassociação foi concluída, confirme que o recurso PodEIP com o mesmo nome do pod não existe mais.

k8s.aliyun.com/eci-eip-instanceid (Compatível)

Annotations de estratégia de liberação de EIP

Esta estratégia de liberação retém o EIP de um pod após sua recriação. Combine-a com a atribuição automática para manter EIPs persistentes em workloads stateful.

Importante
  • Este recurso é suportado apenas pelo ack-extend-network-controller e aplica-se somente a controllers de réplicas stateful. Não pode ser usado para controllers stateless.

  • Se você especificar um ID de instância de EIP, a instância de EIP não será liberada quando o pod for excluído.

Annotation de pod

Valor

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

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

A estratégia de liberação para o EIP do pod. Valores válidos:

  • Follow (padrão): O EIP é liberado quando o pod é excluído.

  • Never: O EIP não é excluído quando o pod é excluído. Exclua manualmente o recurso PodEIP quando ele não for mais necessário.

Você também pode especificar um período de retenção. Expressões de duração no estilo Go são suportadas. Por exemplo, 5m30s especifica que o EIP será liberado 5,5 minutos após a exclusão do pod.

Ative EIP no ack-extend-network-controller ou Terway

Enable in ack-extend-network-controller

Nota

O ack-extend-network-controller chama APIs da Alibaba Cloud para criar recursos. Configure as permissões RAM, instale o componente a partir do Marketplace e use annotations para criar e associar EIPs aos pods.

Crie e associe EIPs com annotations

Use annotations no manifesto do pod para criar um EIP e associá-lo ao pod. Consulte FAQ para detalhes sobre annotations.

  1. Crie uma aplicação e use annotations para criar e associar um EIP a um pod.

    Deployment

    Este manifesto cria um Deployment onde o ACK atribui automaticamente uma instância de EIP com largura de banda de pico de 5 Mbps para 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

    Após a criação do pod, consulte o recurso podeips.alibabacloud.com que possui o mesmo nome do pod para visualizar os detalhes do EIP atribuído.

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

    Saída 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

    Use o seguinte manifesto para criar um StatefulSet com dois pods. Um EIP é atribuído automaticamente a cada pod, e a estratégia de liberação é definida para excluir o recurso PodEIP 10 minutos após a exclusão do pod correspondente.

    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

    Após a criação dos pods, consulte os recursos podeips.alibabacloud.com para rastrear informações sobre os EIPs atribuídos.

    kubectl get podeip -n <namespace> -o yaml

    Saída 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: ""

    Após a exclusão de um pod nesta aplicação stateful, seu recurso personalizado (CR) PodEIP é retido por 10 minutos antes de ser excluído. Se um pod com o mesmo nome for criado durante esse período, ele reutilizará o EIP correspondente.

  2. Verifique a configuração.

    Depois que o pod entrar no estado Running, verifique a annotation k8s.aliyun.com/allocated-eipAddress para visualizar o endereço de EIP atribuído e acessar o pod.

Enable in Terway

  1. Implante a configuração do Terway para suportar o recurso de EIP.

    1. Edite o ConfigMap do Terway.

      kubectl edit cm eni-config -n kube-system
    2. Em eni_conf, adicione a seguinte linha.

      "enable_eip_pool": "true"
      Nota

      Para forçar a desassociação de um EIP de sua instância atual ao associá-lo a uma nova, adicione o parâmetro "allow_eip_rob": "true" em eni_conf.

    3. Após concluir a edição, pressione a tecla Esc, insira :wq! e pressione a tecla Enter para salvar as alterações e sair do modo de edição.

    4. Recrie os pods do Terway para aplicar as alterações.

      kubectl delete pod -n kube-system -l app=terway-eniip # If you installed the terway-eni component, replace terway-eniip with terway-eni.
  2. Crie e associe um EIP a um pod usando annotations.

    Use annotations no manifesto do pod para criar um EIP e associá-lo ao pod. Consulte Limites relacionados a EIP.

    Automatically assign an EIP

    Adicione estas annotations para atribuir automaticamente um EIP e especificar a largura de banda:

    • k8s.aliyun.com/pod-with-eip: "true": Atribui um EIP público dedicado ao pod.

    • k8s.aliyun.com/eip-bandwidth: "5": Especifica a largura de banda do EIP. O padrão é 5 Mbps.

    Manifesto de exemplo:

    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

    Specify an EIP

    Importante
    • Como um único EIP não pode ser associado a múltiplos pods, este método não é adequado para workloads como Deployments e StatefulSets que possuem mais de uma réplica.

    • Por padrão, se o EIP especificado já estiver associado a uma instância, a associação falhará. Para forçar a desassociação do EIP da instância anterior e associá-lo à nova, você deve definir "allow_eip_rob": "true" no ConfigMap conforme descrito anteriormente.

    • Você pode especificar um ID de instância de EIP apenas para workloads de réplica única. Por exemplo, um Deployment não pode ter mais de uma réplica.

    Adicione a seguinte annotation para especificar um ID de instância de EIP para um pod:

    k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>"
  3. Verifique a configuração.

    Depois que o pod entrar no estado Running, verifique a annotation network.alibabacloud.com/allocated-eipAddress para visualizar o endereço de EIP atribuído e acessar o pod.

FAQ

Pod pronto antes da vinculação do EIP

O controller atribui um EIP somente após a alocação de um IP ao pod, portanto, o pod pode ficar Ready antes que o EIP seja vinculado. Use os métodos a seguir para controlar o tempo.

Readiness gates

Nota

A configuração de readiness gates requer o ack-extend-network-controller.

Com readinessGates, o controller atualiza as condições do pod apenas após a vinculação do EIP, impedindo o status Ready até que a vinculação seja concluída.

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 um init container para verificar a atribuição do 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 inacessível via EIP

Políticas restritivas de ACL frequentemente causam isso. Verifique estes controles de acesso:

  • Cloud Firewall: O tráfego de EIP está sujeito às regras de controle de acesso do Cloud Firewall. Permita o tráfego de entrada e saída para o EIP do pod e as portas de serviço. Consulte Configure políticas de controle de acesso para um firewall de internet.

  • Grupo de segurança do nó: Após a associação de um EIP a um pod, o grupo de segurança do nó ainda governa o tráfego. Permita o tráfego de entrada do IP do cliente para as portas de serviço do pod e qualquer tráfego de saída necessário. Consulte Configure grupos de segurança do cluster.