Todos os produtos
Search
Central de documentação

Container Compute Service:Montar um EIP em um pod usando annotations

Última atualização: Jun 29, 2026

Por padrão, os pods em clusters ACK usam endereços IP privados. Em cenários como isolamento de dados multilocatário ou isolamento de segurança, um pod pode precisar de um endereço IP público independente. Você pode montar um Elastic IP Address (EIP) em um pod usando annotations.

Informações básicas

Por padrão, os pods acessam a internet por meio de um gateway NAT da Internet (Ative acesso à internet para um cluster). O tráfego de entrada geralmente flui por um Serviço LoadBalancer. No entanto, alguns cenários exigem que o pod tenha seu próprio endereço IP público:

  • Alocação dinâmica de portas: servidores de jogos UDP ou protocolos RTSP alocam portas aleatórias por cliente. Um endereço IP independente evita conflitos de porta.

  • Contorno de SNAT: quando um serviço externo exige um IP fixo em sua lista de permissões, o IP de saída SNAT compartilhado pode ser bloqueado.

  • Identidade direta de IP: conexões ponta a ponta com sistemas externos, como protocolos de comunicação em tempo real, requerem um endereço IP independente.

Limites

  • Leia os limites dos EIPs antes de começar.

  • Na alocação automática de EIP, os endereços podem ser solicitados e liberados repetidamente quando os pods são recriados ou quando a execução da Container Network Interface (CNI) falha, o que pode acionar limites de EIP. Para evitar isso, especifique um EIP definindo a annotation do pod network.alibabacloud.com/allocated-eip-id.

Procedimento

Para montar um EIP em um pod, instale o componente ack-extend-network-controller na página Component Management.

image

Etapa 1: Instalar ou atualizar o componente

Nota

Se você já instalou o componente via Helm ou ACK Marketplace, desinstale-o antes de prosseguir.

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

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

  3. Na caixa de pesquisa, procure por ACK Extend Network Controller e clique em Install no canto inferior direito do cartão do componente.

    image

  4. Na caixa de diálogo exibida, configure os parâmetros conforme a tabela a seguir e clique em OK.

    Parâmetro

    Descrição

    enableControllers

    Recursos a serem ativados:

    • eip: ativa o recurso de EIP.

    • ipv6gw: ativa o recurso de IPv6.

    • natgw: ativa o recurso de gateway DNAT.

    eip e ipv6gw vêm selecionados por padrão e não exigem permissões adicionais de RAM.

    natgw requer permissões de RAM. Para mais informações, consulte Configure permissões de RAM necessárias para DNAT.

    natGwPool

    Configuração de DNAT.

    customStatefulWorkloadKinds

    Tipos personalizados de contêineres com estado. StatefulSets do Kubernetes e pods criados diretamente têm suporte por padrão. Para adicionar outros tipos de contêiner, clique em + Add.

Etapa 2: Ative o recurso de EIP

Você pode montar um EIP em um pod adicionando annotations à configuração do pod. Para obter a lista completa de annotations compatíveis, consulte Annotations para anexar um EIP a um pod.

Nota

Você pode alocar automaticamente um novo EIP ou especifique uma instância de EIP existente. Os dois métodos diferem nas annotations e no comportamento de liberação: EIPs alocados automaticamente são liberados por padrão quando o pod é excluído; EIPs especificados são retidos. Para mais informações sobre políticas de liberação de EIP, consulte Configure a política de liberação de EIP.

Alocar automaticamente um EIP

  1. Na página Clusters, clique em o nome do cluster desejado e escolha Workloads > Deployments no painel de navegação à esquerda.

  2. No canto superior direito da página, clique em Create From YAML.

  3. Use o YAML de exemplo a seguir para crie um deployment chamado example.

    Expandir para visualize o YAML do Deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-with-eip: "true"
            network.alibabacloud.com/eip-bandwidth: "5"
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    Essa configuração aloca automaticamente um EIP com largura de banda de 5 Mbit/s para cada pod.

  4. Após crie o deployment, abra a página de detalhes dele. Clique em o nome de um pod, como example-78d17b7xxx-adxxx, para visualize a página de Details do pod. A seção Annotations exibe as informações do EIP. Clique em Edit para ver os detalhes do EIP no YAML do pod.

    Expandir para visualize o YAML do pod

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx0y884ucrevoxxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx563trofuhaxxxxx
        network.alibabacloud.com/eip-bandwidth: '5'
        network.alibabacloud.com/pod-with-eip: 'true'
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-78d17b7xxx-adxxx
      namespace: default
    spec:
      ...
  5. Ao concluir o exemplo, exclua o deployment. Como nenhum ID de instância de EIP foi especificado, o EIP alocado automaticamente é liberado por padrão quando o pod é excluído.

Especifique uma instância de EIP

  1. Prepare uma instância de EIP. Solicitar um EIP.

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

  3. No canto superior direito da página, clique em Create From YAML.

  4. Use o YAML de exemplo a seguir para crie um StatefulSet chamado example.

    Expandir para visualize o YAML do StatefulSet

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      labels:
        app: example
      name: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    Essa configuração vincula o EIP eip-xxxxx66wjkj16lf9xxxxx ao pod. Substitua o ID da instância pelo seu ID real de EIP.

  5. Após crie o StatefulSet, abra a página de detalhes dele. Clique em o nome de um pod, como example-0, para visualize a página de Details do pod. A seção Annotations exibe as informações do EIP anexado. Clique em Edit para ver os detalhes do EIP no YAML do pod.

    Expandir para visualize o YAML do pod

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx66wjkj16lf9xxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx612ub33hunxxxxx
        network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-0
      namespace: default
    spec:
      ...
  6. Ao concluir o exemplo, exclua o StatefulSet. Como um ID de instância de EIP foi especificado, o EIP é retido quando o pod é excluído.

Operações relacionadas

O controlador VPC anexa um EIP após a alocação do endereço IP do pod. O pod pode entrar no estado Ready antes da anexação do EIP, o que pode causar interrupções de serviço ou tempos limite de conexão. Use os métodos a seguir para garantir que o EIP esteja anexado antes que o pod aceite tráfego.

Usar readiness gates para verificar o status de anexação do EIP

Com readinessGates configurado, o controlador VPC define as conditions do pod após anexar o EIP. O pod não entra no estado Ready até que a anexação do EIP 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
...

Usar initContainers para verificar o status de anexação do EIP

Configure initContainers para que o pod verifique se o EIP foi alocado nos initContainers. Código de exemplo para configure initContainers:

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/pod-ips=\\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

Configure permissões de RAM necessárias para DNAT

O recurso DNAT exige que o ack-extend-network-controller acesse a OpenAPI da Alibaba Cloud. Configure as seguintes permissões de RAM.

  1. Faça login no console Resource Access Management (RAM). No painel de navegação à esquerda, clique em Access Policies e, em seguida, clique em Create Policy.

  2. Na página Create Policy, clique em Script Editor, cole o conteúdo a seguir na seção Statement do editor de código e clique em OK. Defina o Policy Name como DNAT-Policy e clique em OK novamente.

    {
          "Effect": "Allow",
          "Action": [
            "ecs:DescribeNetworkInterfaces",
            "vpc:DescribeNatGateways",
            "vpc:DescribeForwardTableEntries",
            "vpc:CreateForwardEntry",
            "vpc:DescribeEipAddresses",
            "vpc:DeleteForwardEntry",
            "vpc:DescribeRouteTableList",
            "vpc:DescribeRouteEntryList"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
  3. No painel de navegação à esquerda, clique em Roles. Na caixa de pesquisa, procure por AliyunCCNECRole. Na coluna Actions, clique em Grant Permission.

  4. Na caixa de pesquisa da seção Access Policy, procure e selecione DNAT-Policy. Em seguida, clique em Confirm.