Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Configure a static IP, dedicated vSwitch, and security group for a pod

Última atualização: Aug 28, 2026

Use o Trunk ENI do Terway para atribuir IPs estáticos por pod, vSwitches dedicados ou grupos de segurança. Isso permite gerenciamento granular de tráfego, isolamento de rede, configuração de políticas de rede e gestão de endereços IP.

Contexto

O ACK oferece uma solução baseada em ENI para configuração de rede por pod. Estão disponíveis dois modos de ENI:

  • Modo Exclusive ENI: Cada pod se vincula a uma ENI exclusiva com recursos de rede dedicados. Oferece forte isolamento, mas consome mais cotas de ENI. Ideal para aplicações de alto desempenho sensíveis ao isolamento.

    Para usar este modo, configure Exclusive ENI network mode ao criar um node pool.

  • Modo Trunk ENI: Uma Trunk ENI no nó fornece dinamicamente ENIs auxiliares para múltiplos pods. Aumenta a densidade de pods por nó e adequa-se a configurações de rede personalizadas em grande escala.

    Ative primeiro o recurso Trunk ENI no cluster. O add-on terway-controlplane será implantado automaticamente para gerenciar o ciclo de vida das configurações de rede personalizadas e a entrega de políticas. Arquitetura:

    image

    O modo Trunk ENI também suporta configurações de rede personalizadas. Ele atribui vSwitches dedicados, grupos de segurança e IPs estáticos sob demanda para pods críticos, enquanto outros pods usam a configuração compartilhada padrão.

Limitações

  • Se você usar um ACK dedicated cluster, acesse o Quota Center e solicite a cota chamada Container network supports Terway ENI Trunking mode.

  • Cada nó tem um limite de hospedagem de pods. Consulte Use the Terway network plugin.

  • As regras de grupo de segurança não se aplicam ao tráfego entre pods no mesmo nó ou ao tráfego de pod para host. Use uma NetworkPolicy nesses cenários.

  • Requisitos de versão do Terway:

    Para atualizar Terway , consulte Add-ons .
    • Modo Trunk ENI: Terway v1.3.0 ou posterior

    • Modo Exclusive ENI: Terway v1.11.0 ou posterior

  • Este recurso suporta apenas instâncias ECS.

  • Clusters ACS suportam apenas as capacidades de atribuição de vSwitch e grupo de segurança do PodNetworking. Outras funcionalidades, como IPs estáticos e seleção de elastic network interface (ENI), não são compatíveis com clusters ACS. Essa capacidade é fornecida pelo acs-virtual-node e independe do Terway. Se a definição do PodNetworking CRD não existir no cluster, baixe-a e instale-a.

Caminho de dados

O diagrama a seguir ilustra a diferença no caminho de dados entre os modos Trunk ENI e Exclusive ENI.

image

Escopo das configurações dedicadas de pod

Com uma configuração dedicada de pod, cada pod obtém uma ENI exclusiva com seu próprio vSwitch e grupo de segurança.

Dois modos de configuração de nó suportam configurações dedicadas de pod:

Nós que suportam Trunk ENIs

Nós que suportam elastic network interfaces (Consulte Configure exclusive ENI network mode for a node pool)

Tipos de cluster suportados

ACK managed cluster

ACK managed cluster, ACK dedicated cluster

Densidade de implantação

Pods regulares compartilham uma ENI; pods especificados usam ENIs exclusivas. Alta densidade geral.

Todos os pods usam ENIs exclusivas. Baixa densidade.

Tipos de nó suportados

Nós ECS

Nós ECS

Tipo de instância

Selecione um tipo de instância que suporte Trunk ENI e retorne EniTrunkSupported=true. Consulte DescribeInstanceTypes para ver os tipos suportados.

Tipos de instância que suportam ENIs.

Casos de uso

Serviços sensíveis a custos e de baixa concorrência.

Serviços de alto desempenho, baixa latência e alta concorrência.

Limites de recursos do Kubernetes

  • Não há suporte para pods no namespace kube-system.

  • Não há suporte para pods que usam HostNetwork.

  • Não há suporte para pods com o rótulo k8s.aliyun.com/ignore-by-terway=true.

Etapa 1: Ativar o recurso Trunk ENI para um cluster

Novo cluster

Ao criar um cluster ACK, defina Network Plug-in como Terway e selecione Support for ENI Trunking na seção Terway Mode (tipo de plugin de rede: terway-eniip). Consulte Create an ACK dedicated cluster (discontinued) e Create an ACK managed cluster.

Nota

A partir do Kubernetes 1.31, o Trunk ENI vem ativado por padrão em novos ACK managed cluster s, sem necessidade de configuração adicional.

Importante

Após a ativação, não é possível modificar o Trunk ENI.

Cluster existente

Pré-requisitos

O cluster existente deve usar o plugin de rede terway-eniip. Consulte Use the Terway network plugin.

Nota

Verifique o plugin de rede na página Add-ons do cluster.

Limitações

  • ACK managed cluster s criados antes de junho de 2020 podem não suportar este recurso. Siga a Etapa 1 para verificar a compatibilidade.

  • Após a ativação, não é possível desativar os recursos de IP estático, vSwitch dedicado e grupo de segurança.

Etapa 1: Verificar suporte a Trunk ENI

Importante
  • Para um ACK dedicated cluster, solicite permissões para usar instâncias ECS que suportem Trunk ENIs. Para solicitar, envie um ticket.

  • Para um ACK managed cluster existente ou migrado de um ACK dedicated cluster, verifique o suporte a Trunk ENI e modifique a configuração. Não são necessárias permissões de instância ECS.

Verifique a configuração do token:

kubectl get secret -nkube-system addon.network.token

Saída esperada caso a configuração exista:

NAME                  TYPE     DATA   AGE
addon.network.token   Opaque   1      69m

Se a configuração do token existir, prossiga para a próxima etapa. Caso contrário, crie um novo cluster com suporte a Trunk ENI.

Etapa 2: Ativar terway-eniip e Trunk ENI

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

  2. Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em Components and Add-ons .

  3. Na página Add-ons, clique na aba Network e localize o add-on terway-eniip.

  4. No cartão terway-eniip, clique em Upgrade para atualizar o add-on terway-eniip para a versão mais recente.

    Se o botão Upgrade não aparecer, o add-on já está atualizado. Pule esta etapa.

  5. Ative o terway-eniip.

    1. Edite o ConfigMap eni-config:

      kubectl edit cm -nkube-system eni-config
    2. Edite os parâmetros eni-config no arquivo YAML:

      Parâmetro

      Valor

      Descrição

      enable_eni_trunking

      true

      Ativa o Trunk ENI. Não pode ser desativado após a ativação.

      credential_path

      /var/addon/token-config

      Para um ACK managed cluster, adicione este parâmetro se ainda não estiver presente.

      Importante
      • Não modifique outros parâmetros.

      • O conteúdo do ConfigMap eni-config deve ser um JSON válido.

      Exemplo de configuração:

      apiVersion: v1
      data:
        eni_conf: |
          {
            "min_pool_size": 0,
            "enable_eni_trunking": true,
            "credential_path": "/var/addon/token-config",
            ...
          }
      kind: ConfigMap
    3. Reinicie os pods do Terway para aplicar a configuração:

      kubectl delete pod -n kube-system -l app=terway-eniip
  6. Após configurar os parâmetros do terway-eniip, acesse a aba Network na página Add-ons e instale o add-on terway-controlplane.

    Após a instalação, o cartão terway-controlplane exibirá Installed.

Etapa 2: Criar um recurso personalizado PodNetworking

O Terway usa um recurso personalizado (CR) PodNetworking para descrever configurações de rede. Crie múltiplos objetos PodNetworking para definir diferentes planos de rede.

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

  2. Na página Clusters, clique no nome do cluster e escolha Workloads > Custom Resources no painel de navegação à esquerda.

  3. Na página Custom Resources, clique na aba CRDs e clique em Create from YAML.

    Exemplo de YAML para PodNetworking:

    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodNetworking
    metadata:
      name: example
    spec:
      allocationType:
        type: Fixed # The pod IP address allocation policy. Valid values: Elastic and Fixed.
        releaseStrategy: TTL # This parameter is valid only when type is set to Fixed. If type is set to Elastic, you do not need to configure releaseStrategy and releaseAfter.
        releaseAfter: "1h" # This parameter is valid only when releaseStrategy is set to TTL.
      selector:
        podSelector:
          matchLabels:
            foo: bar
        namespaceSelector:
          matchLabels:
            foo: bar
      securityGroupIDs:
      - sg-bpxxxx
      vSwitchOptions:
      - vsw-bpxxxx
      eniOptions:
        eniType: Default

    Descrição dos parâmetros:

    Parâmetro

    Descrição

    allocationType

    (Política de alocação de endereço IP do pod)

    type

    Valores válidos:

    • Elastic: Os recursos de IP são liberados após a exclusão do pod.

    • Fixed: Política de endereço IP estático.

      Quando type é Fixed, aplica-se a pods com nomes fixos (StatefulSets e pods sem ownerReferences por padrão). Para workloads personalizados, configure o terway-controlplane na página Add-ons.

      Nota

      Com a política de IP estático, os pods recriados ficam restritos à mesma zona do original.

    releaseStrategy

    Válido apenas quando type é Fixed. Valores válidos:

    • TTL: Liberação atrasada. O IP é liberado após um tempo especificado da exclusão do pod. Mínimo: 5 minutos.

    • Never: O IP nunca é liberado. Exclua manualmente o recurso PodENI quando não for mais necessário.

    releaseAfter

    Tempo de liberação atrasada. Válido apenas quando releaseStrategy é TTL. Usa o formato de tipo de tempo Go com unidades h e m, como 2h45m ou 5m0s.

    selector

    (Seletor de rótulos. Pods correspondentes usam esta configuração de rede.)

    podSelector

    • Corresponde aos rótulos do pod. Os pods correspondentes usam esta configuração de rede.

    • Se podSelector e namespaceSelector estiverem configurados, os pods que corresponderem a todas as regras usarão esta configuração.

    • Garanta uma correspondência única. Se um pod corresponder a múltiplas configurações PodNetworking, o sistema aplicará uma arbitrariamente.

    namespaceSelector

    • Rótulos para corresponder a um Namespace. Pods nos Namespaces correspondentes usam esta configuração.

    • Se podSelector e namespaceSelector estiverem configurados, os pods que corresponderem a todas as regras usarão esta configuração.

    • Garanta uma correspondência única. Múltiplas correspondências resultam em seleção arbitrária.

    vSwitchOptions

    -

    • Os vSwitches para os pods. Os IDs de vSwitch especificados têm relação OR; cada pod usa apenas um vSwitch, e o Terway seleciona aquele que atende às condições.

    • Os pods ficam restritos às mesmas zonas dos vSwitches especificados.

    • As zonas dos vSwitches devem corresponder às zonas dos nós de destino e deve haver endereços IP suficientes disponíveis. Caso contrário, a criação do pod falhará.

    Nota

    Com o auto scaling ativado, as restrições de zona do vSwitchOptions podem impedir o scale-out do node pool. Consulte Auto scaling FAQ.

    vSwitchSelectOptions

    (Configura a política de seleção de vSwitch)

    vSwitchSelectionPolicy

    Valores válidos:

    • ordered (padrão): Seleciona na ordem inserida.

    • most: Prioriza o vSwitch com mais IPs disponíveis.

    • random: Seleciona aleatoriamente um vSwitch.

    Nota

    Suportado no Terway v1.11.0 e posteriores.

    securityGroupIDs

    -

    Suporta múltiplos IDs de grupo de segurança (todos entram em vigor). Máximo: 10.

    Nota

    O Terway v1.13.6 e posteriores suportam até 10 grupos de segurança.

    eniOptions

    (Configura o tipo de ENI usado pelo pod)

    eniType

    Valores válidos:

    • Default: Trunk ENI para clusters com ENI compartilhada, ENI exclusiva para clusters com ENI exclusiva.

    • ENI: Usa uma ENI exclusiva.

    • Trunk: Usa uma Trunk ENI.

    Nota

    Suportado no Terway v1.11.0 e posteriores.

  4. Clique em Create.

    Após criar um recurso PodNetworking, o Terway sincroniza a configuração de rede. O PodNetworking entra em vigor somente depois que seu status se tornar Ready.

    Verifique se o status do recurso é ready:

    kubectl describe PodNetworking example # Replace example with the name of your custom resource.

(Opcional) Etapa 3: Adicionar rótulos correspondentes a um namespace

Para aplicar regras PodNetworking via correspondência de rótulos, adicione os rótulos correspondentes ao namespace de destino.

  1. Crie um namespace de teste chamado example:

    kubectl create ns example
  2. Adicione o rótulo foo=bar ao namespace:

    kubectl label namespaces example foo=bar  # Replace example with your target namespace name.
  3. Visualize os rótulos do namespace:

    kubectl get namespace example --show-labels  # Replace example with your target namespace name.

    Saída esperada:

     NAME      STATUS   AGE   LABELS
    example   Active   24s   foo=bar,kubernetes.io/metadata.name=example

(Opcional) Etapa 4: Criar um pod de aplicação

Quando um pod é criado, o sistema compara seus rótulos com os recursos PodNetworking. Os pods correspondentes recebem uma ENI conforme a configuração encontrada; os demais usam a ENI padrão.

O Terway cria um recurso personalizado PodENI para rastrear os recursos de rede de cada pod correspondente. Consulte Labels and Selectors.

  1. Crie um arquivo chamado my-nginx.yaml com o seguinte conteúdo YAML:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: my-nginx    # The name of the sample application.
      namespace: example   # Specify the namespace as example.
      labels:
        app: nginx
    spec:
      serviceName: "nginx-service"  
      replicas: 1    
      selector:
        matchLabels:
          app: nginx 
      template:
        metadata:
          labels:
            app: nginx
            foo: bar  # Add the foo:bar label to the pod.
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80  
    
    #  If the StatefulSet requires persistent storage, you must define volumeClaimTemplates.
    #  Example:
    #  volumeClaimTemplates:
    #  - metadata:
    #      name: nginx-storage
    #    spec:
    #      accessModes: ["ReadWriteOnce"]
    #      storageClassName: "my-storage-class"
    #      resources:
    #        requests:
    #          storage: 1Gi
  2. Implante a aplicação de exemplo my-nginx. Após a implantação, consulte Verify PodNetworking usage para verificar a configuração de rede.

    kubectl apply -f my-nginx.yaml

Parar o terway-controlplane para migração

Não é possível migrar diretamente um ACK dedicated cluster com configurações personalizadas de pod para um ACK managed Pro cluster. Pare o terway-controlplane antes da migração e reative-o posteriormente.

  1. Prepare a migração.

    1. Pare o terway-controlplane:

      kubectl scale deploy -nkube-system terway-controlplane --replicas 0
    2. Configure o webhook:

      # Back up the webhook configuration.
      kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.validatingwebhookconfigurations.yaml
      # Clean up the webhook configuration.
      kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml
    3. Configure o service:

      # Back up the original service configuration.
      kubectl get service -nkube-system terway-controlplane -oyaml > terway-controlplane.service.yaml
      # Clean up the original service configuration.
      kubectl delete -f terway-controlplane.service.yaml
  2. Após a migração, verifique o resultado.

    • Se a migração falhar, restaure o webhook e o terway-controlplane:

      # Restore the service configuration.
      kubectl apply -f terway-controlplane.service.yaml
      # Restore the webhook configuration.
      kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml
      # Restore terway-controlplane.
      kubectl scale deploy -nkube-system terway-controlplane --replicas 1
    • Se a migração for bem-sucedida, limpe os recursos:

      kubectl delete deploy -nkube-system terway-controlplane
  3. Instale o terway-controlplane na página Add-ons. Consulte Manage add-ons.

Perguntas frequentes

Verificar uso do PodNetworking

  1. Após a criação, as annotations do pod incluem k8s.aliyun.com/pod-networking para indicar o uso do PodNetworking.

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/pod-eni: "true"
        k8s.aliyun.com/pod-networking: podnetworking
      labels:
        app: example
        pod-ip: elastic
  2. O Terway cria um recurso PodENI (mesmo nome/namespace do pod) para registrar sua configuração de rede.

    kubectl get podenis.network.alibabacloud.com <my-nginx-0> -n <example> -o yaml # Replace <my-nginx-0> with the pod name and <example> with the pod's namespace.

    Saída esperada mostrando o PodNetworking em uso:

    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodENI
    metadata:
      finalizers:
      - pod-eni
      generation: 1
      name: <my-nginx-0>
      namespace: default
    spec:
      allocations:
      - allocationType:
          type: Elastic
        eni:
          id: eni-bp1xxxx
          mac: 00:16:xx:xx:xx:xx
          securityGroupIDs:
          - sg-bp1xxxx
          vSwitchID: vsw-bp1xxxx
          zone: cn-hangzhou-h
        ipv4: 192.168.x.x
        ipv4CIDR: 192.168.x.x/19
        ipv6: 2408:x:x:x:x:x:x:x
        ipv6CIDR: 2408:x:x:x::/64
      zone: cn-hangzhou-h
    status:
      eniInfos:
        eni-bp1xxxx:
          id: eni-bp1xxxx
          status: Bind
          vid: 1001
      instanceID: i-bp1xxxx
      phase: Bind
      podLastSeen: "2021-xx-xxT00:00:00Z"
      trunkENIID: eni-bp1xxxx

O pod não usa a configuração PodNetworking

  1. Verifique se o status do PodNetworking é Ready.

  2. Confirme se os rótulos do pod correspondem unicamente ao seletor PodNetworking.

  3. A política de IP estático aplica-se apenas a pods gerenciados por StatefulSet.

Documentos relacionados