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.
-
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
-
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.
-
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.
-
Certifique-se de que seu cluster tenha pelo menos dois nós de trabalho por zona para garantir alta disponibilidade.
-
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
- Obter as versões disponíveis do Traefik.
ibmcloud ks ingress alb versions - 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
-
Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina
spec.selectorpara incluirapp.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(ouprivate-cr<cluster_id>-traefikpara ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional. -
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.
-
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(ouprivate-iks-traefikpara ALBs privadas). -
Teste os aplicativos por meio do domínio do Traefik e verifique se estão funcionando corretamente.
-
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
- 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
-
Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina
spec.selectorpara incluirapp.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(ouprivate-cr<cluster_id>-traefikpara ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional. -
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.
-
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(ouprivate-iks-traefikpara ALBs privadas) - Use o mesmo valor de
service.nameque seu recurso Ingress existente — NGINX — utiliza - Use seu domínio de teste nos campos
hostetls.hosts
- Especifique
-
Teste seu aplicativo nos dois domínios.
- Acesso pelo domínio do Ingress — NGINX (produção)
- Acesso pelo domínio do Traefik (testing)
-
Compare o comportamento, o desempenho e a funcionalidade entre os dois controladores.
-
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
- 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
-
Para clusters de VPC, implante manualmente um serviço “ LoadBalancer ” adicional para fins de teste. Defina
spec.selectorpara incluirapp.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(ouprivate-cr<cluster_id>-traefikpara ALBs privadas). Nos clusters Classic, um novo balanceador de carga é provisionado automaticamente, sem a necessidade de nenhuma configuração adicional. -
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 -
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
-
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(ouprivate-iks-traefikpara ALBs privadas) e seu domínio de produção nos camposhostetls.hosts. -
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.
-
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
-
Obtenha o ID do seu ALB atual do Ingress- NGINX.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
Desative o ALB do Ingress ( NGINX ).
ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAMEClusters 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.
-
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
```
- 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]
-
Atualize seus recursos do Ingress para usar a classe Traefik Ingress. Se seus recursos definirem explicitamente a classe do Ingress, atualize
spec.ingressClassNamedepublic-iks-k8s-nginxparapublic-iks-traefik(ou deprivate-iks-k8s-nginxparaprivate-iks-traefikno caso de ALBs privadas). -
Aplique os recursos atualizados do Ingress.
kubectl apply -f ingress.yaml -
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
- Obtenha o endereço IP do seu ALB do Traefik.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 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 - Verifique a atualização do domínio.
ibmcloud ks ingress domain ls --cluster CLUSTER_NAME - 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.
- Liste todos os ALBs e identifique aqueles baseados no Ingress- NGINX.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - Desative cada ALB do Ingress ( NGINX ).
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 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.
-
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 -
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 -
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_NAMEComo alternativa, crie um novo ALB e use o sinalizador “
--ip” para reutilizar o endereço IP original. -
Atualize seus recursos do Ingress para usar a classe Traefik Ingress. Se seus recursos definirem explicitamente a classe do Ingress, atualize
spec.ingressClassNamedepublic-iks-k8s-nginxparapublic-iks-traefik(ou deprivate-iks-k8s-nginxparaprivate-iks-traefikno caso de ALBs privadas). -
Aplique os recursos atualizados do Ingress.
kubectl apply -f ingress.yaml -
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
- 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] - Verifique a configuração do balanceador de carga.
ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME - 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.
- Liste todos os ALBs e identifique aqueles baseados no Ingress- NGINX.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - Desative cada ALB do Ingress ( NGINX ).
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 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:
-
Monitore seus aplicativos para detectar qualquer comportamento inesperado ou erros após a migração.
-
Atualizar a documentação interna para refletir a nova configuração do Ingress com o Traefik.
-
Remova quaisquer ALBs, domínios ou recursos do Ingress de teste que não sejam mais necessários.
-
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-traefikouprivate-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.