Todos os produtos
Search
Central de documentação

Server Load Balancer:Migrate NGINX Ingress to ALB Ingress

Última atualização: Sep 23, 2026

Uma ferramenta de migração automatizada converte suas configurações de NGINX Ingress para o formato ALB Ingress, eliminando o trabalho manual. Transfira o tráfego gradualmente por meio do ajuste de peso via DNS para alcançar zero downtime.

Processo de migração

Resolva um nome de domínio tanto para o NGINX Ingress quanto para o ALB Ingress e ajuste os pesos do DNS progressivamente para transferir o tráfego sem interrupções. O diagrama a seguir ilustra o processo. O Migration example abaixo apresenta as etapas detalhadas.

A transferência de tráfego baseada em DNS é uma das abordagens para migração sem downtime. Este processo é fornecido apenas como referência.
image

Exemplo de migração

O exemplo a seguir percorre a migração com operações específicas.

Uma empresa executa um controlador NGINX Ingress em seu cluster. O service do tipo LoadBalancer voltado para a Internet provisiona automaticamente uma instância CLB voltada para a Internet. O DNS resolve www.example.net para o CLB, que encaminha as requisições para os pods de backend.

image

Etapa 1: Configure o ALB Ingress

O NGINX Ingress não consegue mais atender aos requisitos de desempenho e gera altos custos de O&M. A empresa usa a ferramenta de migração para converter a configuração do NGINX Ingress para ALB Ingress e adiciona o ALB Ingress ao DNS com um peso menor.

Importante

O DNS não permite que um nome de domínio resolva simultaneamente para um registro A e um registro CNAME. Instâncias CLB recebem requisições via endereços IP, enquanto instâncias ALB expõem um nome de domínio padrão (What is Application Load Balancer?). Configure um nome de domínio temporário para a instância CLB a fim de viabilizar a distribuição de tráfego baseada em peso.

image

Etapa 2: Transfira o tráfego gradualmente para o ALB Ingress

Após verificar que o ALB Ingress funciona conforme esperado, aumente o peso do DNS para o ALB Ingress a fim de rotear mais tráfego por ele.

image

Etapa 3: Exclua os recursos do NGINX Ingress

Após migrar todo o tráfego para o ALB Ingress, exclua as entradas DNS do NGINX Ingress, remova os recursos do NGINX Ingress e desinstale o add-on do controlador NGINX Ingress.

image

Pré-requisitos

Um cliente kubectl está conectado ao cluster ACK. Para mais informações, consulte Connect to an ACK cluster using kubectl.

Etapa 1: Configure o ALB Ingress

  1. A ferramenta de migração converte automaticamente os recursos AlbConfig, IngressClass e Ingress. Portanto, ao instale o add-on, selecione None para ALB Instance.

    Importante

    Para acessar serviços por meio de um ALB Ingress em um cluster ACK dedicado, conceda permissões ao controlador ALB Ingress antes de implantar os serviços. Grant permissions to the ALB Ingress controller in an ACK dedicated cluster.

  2. Crie um arquivo chamado ingress2albconfig.yaml com o seguinte conteúdo.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ingress2albconfig
      namespace: default
    spec:
      template:
        spec:
          containers:
          - name: ingress2albconfig
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/ingress2albconfig:0.0.2
            command: ["/bin/ingress2albconfig", "print", "-A"]
          restartPolicy: Never
          serviceAccount: ingress2albconfig
          serviceAccountName: ingress2albconfig
      backoffLimit: 4
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: system:ingress2albconfig
    rules:
    - apiGroups:
      - networking.k8s.io
      resources:
      - ingresses
      - ingressclasses
      verbs:
      - get
      - list
      - watch
      - update
      - create
      - patch
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ingress2albconfig
      namespace: default
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: system:ingress2albconfig
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:ingress2albconfig
    subjects:
      - kind: ServiceAccount
        name: ingress2albconfig
        namespace: default
  3. Execute o comando a seguir para iniciar o Job. O Job converte as configurações existentes do NGINX Ingress em recursos AlbConfig, IngressClass, Ingress e outros, exibindo os resultados nos logs do pod.

    kubectl apply -f ingress2albconfig.yaml

    Saída esperada:

    job.batch/ingress2albconfig created
    clusterrole.rbac.authorization.k8s.io/system:ingress2albconfig created
    serviceaccount/ingress2albconfig created
    clusterrolebinding.rbac.authorization.k8s.io/system:ingress2albconfig created
  4. Visualize o pod pertencente ao Job.

    kubectl get pod -l job-name=ingress2albconfig

    Saída esperada:

    NAME                READY   STATUS      RESTARTS   AGE
    ingress2albconfig-vw***   0/1     Completed   0          16m
  5. Visualize os logs do pod.

    kubectl logs ingress2albconfig-vw*** # Replace this with the pod name from the previous step.

    Saída esperada. Implante esses recursos no cluster para configure o ALB Ingress.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: from-nginx
    spec:
      config:
        accessLogConfig: {}
        edition: Standard
        name: from-nginx
        tags:
        - key: converted/ingress2albconfig
          value: "true"
        zoneMappings:
        - vSwitchId: vsw-xxx # Replace this with the ID of a vSwitch in your VPC.
        - vSwitchId: vsw-xxx # Replace this with the ID of a vSwitch in your VPC.
      listeners:
      - port: 80
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: from-nginx
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: from-nginx
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]'
      name: from-ingress1
      namespace: default
    spec:
      ingressClassName: from-nginx
      rules:
      - http:
          paths:
          - backend:
              service:
                name: nginx-svc-g1msr
                port:
                  number: 80
            path: /
            pathType: Prefix
    status:
      loadBalancer: {}

Anotações convertidas automaticamente

A ferramenta de migração converte as seguintes anotações do NGINX Ingress para anotações do ALB Ingress.

Importante

Anotações que não constam nesta tabela são ignoradas durante a conversão. Verifique a configuração do ALB Ingress após a conversão.

Lista de anotações

Anotação do NGINX Ingress

Anotação do ALB Ingress

nginx.ingress.kubernetes.io/canary

alb.ingress.kubernetes.io/canary

nginx.ingress.kubernetes.io/canary-by-header

alb.ingress.kubernetes.io/canary-by-header

nginx.ingress.kubernetes.io/canary-by-header-value

alb.ingress.kubernetes.io/canary-by-header-value

nginx.ingress.kubernetes.io/canary-by-cookie

alb.ingress.kubernetes.io/canary-by-cookie

nginx.ingress.kubernetes.io/canary-weight

alb.ingress.kubernetes.io/canary-weight

nginx.ingress.kubernetes.io/use-regex

alb.ingress.kubernetes.io/use-regex

nginx.ingress.kubernetes.io/rewrite-target

alb.ingress.kubernetes.io/rewrite-target

nginx.ingress.kubernetes.io/ssl-redirect

alb.ingress.kubernetes.io/ssl-redirect

nginx.ingress.kubernetes.io/enable-cors

alb.ingress.kubernetes.io/enable-cors

nginx.ingress.kubernetes.io/cors-allow-origin

alb.ingress.kubernetes.io/cors-allow-origin

nginx.ingress.kubernetes.io/cors-allow-methods

alb.ingress.kubernetes.io/cors-allow-methods

nginx.ingress.kubernetes.io/cors-allow-headers

alb.ingress.kubernetes.io/cors-allow-headers

nginx.ingress.kubernetes.io/cors-expose-headers

alb.ingress.kubernetes.io/cors-expose-headers

nginx.ingress.kubernetes.io/cors-allow-credentials

alb.ingress.kubernetes.io/cors-allow-credentials

nginx.ingress.kubernetes.io/backend-protocol

alb.ingress.kubernetes.io/backend-protocol

nginx.ingress.kubernetes.io/load-balance

alb.ingress.kubernetes.io/backend-scheduler

nginx.ingress.kubernetes.io/upstream-hash-by

alb.ingress.kubernetes.io/backend-scheduler-uch-value

Etapa 2: Transfira o tráfego gradualmente para o ALB Ingress

Aviso
  • Antes de alternar o tráfego, compare e teste as regras de encaminhamento do NGINX Ingress e do ALB Ingress para garantir funcionalidade idêntica.

  • Alterne o tráfego durante períodos de baixa utilização.

  • Após configure o ALB Ingress, direcione uma pequena parcela do tráfego para ele como canary release. Verifique as regras de encaminhamento e as configurações antes de aumentar o peso gradualmente.

Configure um domínio temporário para a instância CLB

O DNS não suporta a resolução de um nome de domínio para um registro A e um registro CNAME simultaneamente. Como instâncias ALB utilizam um nome de domínio padrão, configure um nome de domínio temporário para a instância CLB.

  1. Faça login no console do Alibaba Cloud DNS.

  2. Na página Public Zone, localize e clique em no nome de domínio DNS www.example.net que aponta para a instância CLB a ser migrada.

  3. Na página Settings, localize o registro A que aponta de www.example.net para o endereço IP da instância CLB. Na coluna Actions, clique em Edit.

  4. No painel Edit Record, altere o Hostname e clique em OK. Neste exemplo, o Hostname é alterado para web0. Mantenha os demais parâmetros sem alteração.

  5. Na página Settings, clique em Add Record. No painel Add Record, configure os parâmetros a seguir e clique em OK.

    Parâmetro

    Descrição

    Record Type

    Selecione CNAME.

    Hostname

    O prefixo do nome de domínio. Neste exemplo, insira www.

    Query Source

    Selecione Default.

    Record Value

    Insira o nome de domínio temporário. Neste exemplo, insira web0.example.net.

    TTL

    Mantenha o valor padrão.

    Nota

    O registro CNAME agora resolve www.example.net para web0.example.net, e o registro A resolve web0.example.net para o endereço IP do CLB.

Adicione um registro CNAME para a instância ALB

  1. Execute o comando a seguir para localizar o nome de domínio da instância ALB.

    kubectl get albconfig

    Saída esperada. alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com é o nome de domínio da instância ALB.

    NAME         ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
    from_nginx   alb-a8mmh2tqbmrm11****   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com                            20m
  2. Na página Settings, clique em Add Record. No painel Add Record, configure os parâmetros a seguir e clique em OK.

    Parâmetro

    Descrição

    Record Type

    Selecione CNAME.

    Hostname

    O prefixo do nome de domínio. Neste exemplo, insira www.

    Query Source

    Selecione Default.

    Record Value

    Insira o nome de domínio da instância ALB.

    TTL

    Mantenha o valor padrão.

Defina o peso do tráfego

  1. Na página Settings, localize o registro CNAME adicionado na etapa anterior. Na coluna Actions, clique em na seta ao lado de Edit e selecione Edit Record Set.

  2. No painel Edit Record, defina o peso do CLB como 100 e o peso do ALB como 0. Clique em OK.

  3. Diminua gradualmente o peso do CLB e aumente o peso do ALB após confirme que não há impacto nos negócios.

  4. Execute o comando dig várias vezes para verifique o efeito da transferência de tráfego.

    [root@xxx 2uvl6raykm3Z ~]# dig www.xxx.net
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31592
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.xxx.net.                IN      A
    
    ;; ANSWER SECTION:
    www.xxx.net.        5       IN      CNAME   web0.xxx.net.
    web0.xxx.net.       5       IN      A       47.xxx.144
    
    ;; Query time: 63 msec
    ;; SERVER: 100.xxx.136#53(100.xxx.136)
    ;; WHEN: Thu Jan 19 15:46:40 CST 2023
    ;; MSG SIZE  rcvd: 66
    [root@xxx ~]# dig www.xxx.net
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14224
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.xxx.net.                IN      A
    
    ;; ANSWER SECTION:
    www.xxx.net.        5       IN      CNAME   alb-a8mmh2xxxm74.cn-hangzhou.alb.aliyuncs.com.
    alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 116.xxx.54
    alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 118.xxx.39
    
    ;; Query time: 4 msec
    ;; SERVER: 100.xxx.136#53(100.xxx.136)
    ;; WHEN: Thu Jan 19 15:47:52 CST 2023
    ;; MSG SIZE  rcvd: 128
  5. Após a verificação, defina gradualmente o peso do CLB como 0 e o peso do ALB como 100.

Se o seu provedor de service DNS não suporta configuração de peso para registros CNAME, clique aqui para ver uma solução alternativa de transferência de tráfego.

Alternative traffic shifting solution

Etapa 3: Exclua os recursos do NGINX Ingress

Após o encerramento de todas as conexões persistentes com o NGINX Ingress e a cessação de novo tráfego direcionado a ele, monitore o sistema por um período adequado ao seu negócio antes de liberar os recursos redundantes.

  1. Exclua as entradas DNS relacionadas ao NGINX Ingress pelo console do Alibaba Cloud DNS.

  2. Desinstale o add-on do controlador NGINX Ingress.

    1. Faça login no ACK console.

    2. Na página Clusters, clique em no nome do cluster de destino. No painel de navegação à esquerda, escolha Network > Ingresses.

    3. Localize o NGINX Ingress. Na coluna Actions, escolha image > Delete. Na caixa de diálogo exibida, clique em Confirm Deletion.

    4. No painel de navegação à esquerda, escolha Add-ons. Clique em na aba Networking. No card NGINX Ingress controller, clique em Uninstall.

    5. Na caixa de diálogo exibida, clique em OK.

      A desinstalação do add-on libera automaticamente a instância CLB utilizada pelo controlador NGINX Ingress, encerrando a cobrança correspondente.
  3. Faça login no console do Container Compute Service. No painel de navegação à esquerda, clique em Applications > Helm e desinstale o add-on do controlador NGINX Ingress.

Documentos relacionados