Migração do controlador Ingress ( NGINX ) para o controlador Ingress do Traefik

Migre sua configuração do Ingress para usar o controlador Traefik em vez do controlador Ingress- NGINX.

Antes de Iniciar

Verifique esses pré-requisitos antes de realizar a migração.

  1. Certifique-se de que possui as permissões necessárias.

    • Função de acesso de plataforma Administrador para o cluster
    • Função de acesso de serviço Gerenciador em todos os namespaces
  2. Analise os recursos existentes do Ingress para verificar se há anotações ou configurações específicas do Ingress- NGINX. Consulte a documentação sobre as principais diferenças entre os dois controladores do Ingress.

  3. Planeje sua estratégia de migração com base nos requisitos da carga de trabalho, na tolerância ao tempo de inatividade e na disponibilidade de recursos. Ambos os controladores podem funcionar simultaneamente durante a migração.

  4. Certifique-se de que seu cluster tenha pelo menos dois nós de trabalho por zona para garantir alta disponibilidade.

  5. Faça backup das suas configurações atuais do Ingress antes de fazer alterações.

Estratégia 1: Configuração separada do Ingress com domínio diferente

Teste o Traefik em um ambiente separado, mantendo a produção no Ingress — NGINX. Essa estratégia proporciona o máximo de isolamento e segurança.

Use essa estratégia quando:

  • É recomendável testar exaustivamente o Traefik antes de migrar as cargas de trabalho de produção.
  • Você pode implantar um conjunto diferente de aplicativos para testes.
  • Você dispõe dos recursos necessários para operar ALBs adicionais.
  • Você quer que não haja nenhum risco para o seu ambiente de produção durante os testes.

Etapas

  1. Obter as versões disponíveis do Traefik.
    ibmcloud ks ingress alb versions
    
  2. Crie um novo ALB com o Traefik.

Conjuntos clássicos sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Clusters de VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina spec.selector para incluir app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (ou private-cr<cluster_id>-traefik para ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional.

  2. Crie um domínio personalizado para o Traefik ALB e direcione-o para o nome de host ou endereço IP do balanceador de carga. Consulte “Criação de domínios personalizados” para obter instruções detalhadas.

  3. Crie um recurso Ingress para aplicativos de teste usando a classe Traefik Ingress. Siga a Etapa 3: Crie o recurso Ingress, especificando ingressClassName: public-iks-traefik (ou private-iks-traefik para ALBs privadas).

  4. Teste os aplicativos por meio do domínio do Traefik e verifique se estão funcionando corretamente.

  5. Após os testes, prossiga para a seção “Fazendo a migração” para migrar suas cargas de trabalho de produção.

Estratégia 2: Dois balanceadores de carga com a mesma carga de trabalho

Teste os dois controladores com a mesma carga de trabalho, criando dois recursos Ingress que apontem para o mesmo serviço. É possível comparar diretamente o comportamento dos controladores sem afetar o tráfego de produção.

Use essa estratégia quando:

  • Você quer comparar o comportamento do Ingress — NGINX — e do Traefik na mesma carga de trabalho.
  • Você precisa verificar se o Traefik lida corretamente com o seu aplicativo específico.
  • Você pode fazer o teste usando um domínio que não seja de produção.
  • Você deseja minimizar o número de aplicativos de teste necessários.

Etapas

  1. Ativar um novo ALB com uma versão baseada no Traefik.

Conjuntos clássicos sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Clusters de VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina spec.selector para incluir app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (ou private-cr<cluster_id>-traefik para ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional.

  2. Crie um domínio personalizado para o Traefik ALB e direcione-o para o nome de host ou endereço IP do balanceador de carga. Consulte “Criação de domínios personalizados” para obter instruções detalhadas.

  3. Crie um segundo recurso Ingress que utilize a classe Traefik Ingress, mas que aponte para o mesmo serviço que o seu recurso Ingress existente — NGINX. Siga as instruções da Etapa 3: Criar o recurso Ingress, certificando-se de:

    • Especifique ingressClassName: public-iks-traefik (ou private-iks-traefik para ALBs privadas)
    • Use o mesmo valor de service.name que seu recurso Ingress existente — NGINX — utiliza
    • Use seu domínio de teste nos campos host e tls.hosts
  4. Teste seu aplicativo nos dois domínios.

    • Acesso pelo domínio do Ingress — NGINX (produção)
    • Acesso pelo domínio do Traefik (testing)
  5. Compare o comportamento, o desempenho e a funcionalidade entre os dois controladores.

  6. Após a validação, prossiga para a seção “Fazendo a transição” para migrar seu domínio de produção para o Traefik.

Estratégia 3: Teste de DNS dividido

Use uma configuração de DNS dividido para testar o Traefik com seu domínio de produção em um ambiente semelhante ao de produção, sem afetar seus usuários.

Use essa estratégia quando:

  • Você quer fazer o teste no seu domínio de produção real.
  • Você tem controle sobre a configuração de DNS do seu ambiente de teste.
  • Você precisa validar a configuração exata de produção.
  • Você quer minimizar as diferenças entre o ambiente de teste e o de produção.

Etapas

  1. Ativar um novo ALB com uma versão baseada no Traefik.

Conjuntos clássicos sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Clusters de VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina spec.selector para incluir app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (ou private-cr<cluster_id>-traefik para ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional.

  2. Obtenha o endereço IP (clássico) ou o nome do host (VPC) do novo ALB do Traefik.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  3. Configure o split-DNS no seu ambiente de teste.

    • Para suas máquinas de teste ou rede, configure o DNS para que o domínio de produção seja resolvido para o IP/nome de host do Traefik ALB
    • Os usuários de produção continuam acessando o ALB do Ingress — NGINX
    • Isso pode ser feito por meio de arquivos locais de /etc/hosts, servidores DNS internos ou configurações de DNS específicas para VPN
  4. Crie um novo recurso Ingress usando a classe Traefik Ingress com seu domínio de produção. Siga a Etapa 3: Crie o recurso Ingress, especificando ingressClassName: public-iks-traefik (ou private-iks-traefik para ALBs privadas) e seu domínio de produção nos campos host e tls.hosts.

  5. Faça um teste a partir do seu ambiente de DNS dividido para validar o Traefik com o domínio e a configuração de produção.

  6. Após a validação, prossiga para a seção “Fazendo a mudança” para atualizar o DNS de produção de modo que aponte para o Traefik.

Estratégia 4: Migração direta

Mude diretamente do Ingress ( NGINX ) para o Traefik com alterações mínimas na configuração e no gerenciamento de recursos.

Essa estratégia causa interrupção no serviço durante a migração. Planeje um intervalo para manutenção antes de começar.

Use essa estratégia quando:

  • Você tem uma carga de trabalho pequena ou aplicativos não essenciais.
  • Você pode tolerar um breve período de inatividade durante a migração.
  • Você deseja minimizar o número de recursos a serem gerenciados.
  • Você já verificou a compatibilidade com o Traefik em outro ambiente.
  • No Classic, é necessário manter os endereços IP dos seus ALBs inalterados, pois seus clientes se conectam usando endereços IP em vez de domínios DNS.

Desativar e reativar um ALB preserva seu endereço IP original, a menos que esse endereço IP tenha sido ocupado por outros serviços nesse intervalo. Para obter mais informações, consulte “Ativando ou desativando ALBs ”.

Etapas

  1. Obtenha o ID do seu ALB atual do Ingress- NGINX.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Desative o ALB do Ingress ( NGINX ).

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    

    Clusters VPC: Se você desativar seu último ALB público ou privado, aguarde até que a implantação do ALB e o recurso de serviço do balanceador de carga correspondente sejam excluídos antes de ativar um ALB do Traefik.

  3. Habilite o ALB com uma versão do Traefik.

Conjuntos clássicos sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME Para usar um endereço IP específico para o ALB no modo clássico, utilize o sinalizador --ip . Para obter mais informações, consulte “Ativando ou desativando ALBs ”.

[Clusters de VPC]{: tag-vpc}
```sh {: pre}
ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
```
  1. Para clusters VPC, configure o backend do balanceador de carga como Traefik.

Clusters de VPC sh {: pre} ibmcloud ks ingress load-balancer backend set --cluster CLUSTER-ID --public-backend traefik [--private-backend traefik]

  1. Atualize seus recursos do Ingress para usar a classe Traefik Ingress. Se seus recursos definirem explicitamente a classe do Ingress, atualize spec.ingressClassName de public-iks-k8s-nginx para public-iks-traefik (ou de private-iks-k8s-nginx para private-iks-traefik no caso de ALBs privadas).

  2. Aplique os recursos atualizados do Ingress.

    kubectl apply -f ingress.yaml
    
  3. Verifique se suas aplicações estão acessíveis por meio do controlador Traefik.

    curl https://<domain>/<app_path>
    

Mudando para o Traefik

Após os testes, mude o tráfego de produção para usar o controlador Traefik. As etapas variam entre os clusters clássicos e os clusters VPC. Escolha a opção que corresponda ao seu tipo de cluster e à sua configuração.

Classic clusters

Para clusters clássicos, atualize seu domínio de produção para que ele aponte para o balanceador de carga que expõe o Traefik, em vez do Ingress — NGINX.

Opção 1: Atualizar o mapeamento de domínios

  1. Obtenha o endereço IP do seu ALB do Traefik.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Atualize seu domínio para que ele aponte para o ALB do Traefik.
    ibmcloud ks ingress domain update --cluster CLUSTER_NAME --domain DOMAIN_NAME --ip TRAEFIK_ALB_IP
    
  3. Verifique a atualização do domínio.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    
  4. Teste suas aplicações no domínio de produção para garantir que agora sejam servidas pelo Traefik.

Opção 2: Desativar os ALBs do Ingress - NGINX

Como alternativa, você pode desativar todos os ALBs baseados no Ingress- NGINX, o que atualiza automaticamente os mapeamentos de domínio.

  1. Liste todos os ALBs e identifique aqueles baseados no Ingress- NGINX.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Desative cada ALB do Ingress ( NGINX ).
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. Verifique se o seu domínio agora está direcionado para os ALBs do Traefik.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    

Opção 3: Manter os endereços IP do ALB

Se seus clientes se conectarem diretamente aos endereços IP do ALB, em vez de nomes DNS, você poderá manter esses endereços IP durante a migração. A preservação dos endereços IP exige a desativação temporária dos ALBs, o que causa uma breve interrupção no serviço.

Desativar e reativar um ALB preserva seu endereço IP original, a menos que esse endereço IP tenha sido ocupado por outros serviços.

  1. Liste todos os ALBs e identifique aqueles baseados no Ingress- NGINX para obter seus IDs e endereços IP.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Desative o ALB do Ingress ( NGINX ). Isso causa uma breve interrupção no serviço para o tráfego nesse endereço IP.

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    
  3. Reative o ALB com uma versão do Traefik para reutilizar o mesmo endereço IP.

    ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
    

    Como alternativa, crie um novo ALB e use o sinalizador “ --ip ” para reutilizar o endereço IP original.

  4. Atualize seus recursos do Ingress para usar a classe Traefik Ingress. Se seus recursos definirem explicitamente a classe do Ingress, atualize spec.ingressClassName de public-iks-k8s-nginx para public-iks-traefik (ou de private-iks-k8s-nginx para private-iks-traefik no caso de ALBs privadas).

  5. Aplique os recursos atualizados do Ingress.

    kubectl apply -f ingress.yaml
    
  6. Verifique se suas aplicações estão acessíveis por meio do controlador Traefik.

    curl https://<domain>/<app_path>
    

Clusters do VPC

Para clusters VPC, atualize o backend do balanceador de carga para expor o Traefik em vez do Ingress — NGINX.

Opção 1: Atualizar o backend do balanceador de carga

  1. Atualize o balanceador de carga para usar o backend do Traefik.
    ibmcloud ks ingress load-balancer backend set --cluster CLUSTER_NAME --public-backend traefik [--private-backend traefik]
    
  2. Verifique a configuração do balanceador de carga.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    
  3. Teste suas aplicações para garantir que agora estejam sendo servidas pelo Traefik.

Opção 2: Desativar os ALBs do Ingress - NGINX

Como alternativa, você pode desativar todos os ALBs baseados no Ingress- NGINX.

  1. Liste todos os ALBs e identifique aqueles baseados no Ingress- NGINX.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Desative cada ALB do Ingress ( NGINX ).
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. Verifique se o balanceador de carga agora utiliza os ALBs do Traefik.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    

Tarefas de pós-migração

Após a migração para o Traefik, execute as seguintes tarefas:

  1. Monitore seus aplicativos para detectar qualquer comportamento inesperado ou erros após a migração.

  2. Atualizar a documentação interna para refletir a nova configuração do Ingress com o Traefik.

  3. Remova quaisquer ALBs, domínios ou recursos do Ingress de teste que não sejam mais necessários.

  4. Após confirmar que o Traefik está funcionando conforme o esperado, desative os ALBs restantes do Ingress- NGINX.

    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    

Resolução de problemas

Caso encontre problemas durante ou após a migração, siga as etapas a seguir para diagnosticá-los e resolvê-los.

Verificar a classe do Ingress

Verifique se os recursos do Ingress utilizam a classe correta do Traefik (public-iks-traefik ou private-iks-traefik).

Verificar o status do ALB

Certifique-se de que seus ALBs do Traefik estejam em bom estado.

ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
Verificar o status do Ingress

Verifique o status dos seus recursos do Ingress.

kubectl get ingress -A
Revisar registros

Verifique se há erros nos logs do controlador do Traefik.

kubectl logs -n kube-system -l alb-image-type=traefik
Executar diagnósticos

Use o relatório de status do Ingress para identificar problemas.

ibmcloud ks ingress status-report get --cluster CLUSTER_NAME
Reverta, se necessário

Caso encontre problemas graves, volte para o Ingress- NGINX desativando o ALB do Traefik e reativando o ALB do Ingress- NGINX com sua versão original. Planeje resolver os problemas e realizar a migração novamente.

Para obter ajuda adicional, consulte a seção “Solução de problemas do Ingress” ou entre em contato com o suporte do IBM Cloud.