Mudança do Ingress ( NGINX ) para o Traefik em IBM Cloud
IBM Cloud Kubernetes Service está deixando de usar o Ingress — NGINX — porque o projeto original foi descontinuado. O Traefik é o controlador do Ingress que o site IBM passará a utilizar daqui em diante.
Durante o período de transição, ambos os controladores do Ingress estarão disponíveis, oferecendo a você a flexibilidade de testar o Traefik e realizar a migração no seu próprio ritmo.
Este tópico compara as principais diferenças de configuração entre o Ingress — NGINX — e o Traefik, além de oferecer orientações para a sua transição.
Comparando o Ingress- NGINX com o Traefik em IBM Cloud
A tabela a seguir compara as principais diferenças entre o Ingress- NGINX e o Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
| IBM-classes padrão do Ingress fornecidas | public-iks-k8s-nginx para o público e private-iks-k8s-nginx para o setor privado. |
public-iks-traefik para o público e private-iks-traefik para o setor privado. |
| Esquema de versões | 0.X.X_XXXX_iks e 1.X.X_XXXX_iks |
A partir da versão 3 do Traefik: 3.X.X_XXXX_iks |
| Recursos processados | Somente entrada | Ingress com o “ Ingress – Compatibilidade com oNGINX ” opcional e CRDs do Traefik |
| IBM-nome da conta de serviço implantada | ibm-k8s-ingress |
ibm-traefik-ingress |
A tabela a seguir compara como configurar recursos comuns no Ingress — NGINX — e no Traefik.
| Configuração | Ingress- NGINX | Traefik |
|---|---|---|
| Autenticação do App ID | Adicione “ nginx.ingress.kubernetes.io/auth-url ” e as anotações de snippet relacionadas ao recurso Ingress. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik ForwardAuth e aplique-o por meio da anotação traefik.ingress.kubernetes.io/router.middlewares. Consulte a documentação do Traefik. |
| Tamanho máximo do corpo da solicitação do cliente | Use a anotação nginx.ingress.kubernetes.io/proxy-body-size . Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Buffering e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Buffer de dados de resposta do cliente | Use a anotação nginx.ingress.kubernetes.io/proxy-buffering . Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Buffering e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Tempos limite de conexão e leitura | Use as anotações nginx.ingress.kubernetes.io/proxy-connect-timeout e proxy-read-timeout. Consulte a documentação do Ingress em NGINX. |
Configure os tempos limite de leitura, gravação e inatividade no arquivo de configuração do sistema ( ibm-ingress-deploy-config ) ConfigMap, e utilize um CRD ServersTransport para os tempos limite de encaminhamento
do back-end. Consulte a documentação do Traefik. |
| Ações customizadas de erro | Defina o campo “ custom-http-errors ” ( ) em ibm-k8s-controller-config ConfigMap. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Errors e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Personalização dos cabeçalhos das solicitações | Defina o campo “ proxy-set-headers ” ( ) em ibm-k8s-controller-config ConfigMap. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Headers e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Personalização dos cabeçalhos de resposta | Use a anotação nginx.ingress.kubernetes.io/configuration-snippet . Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Headers e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| HTTP para o redirecionamento de HTTPS | Defina ssl-redirect no ibm-k8s-controller-config ConfigMap ou use a anotação nginx.ingress.kubernetes.io/ssl-redirect . Consulte a documentação do Ingress em NGINX. |
Defina o campo “ httpsRedirect ” ( ) em ibm-ingress-deploy-config ConfigMap. Consulte a documentação do Traefik. |
| HTTP Strict Transport Security (hsts) | Defina o campo “ hsts ” ( ) em ibm-k8s-controller-config ConfigMap. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Headers com o campo “ stsSeconds ” e os campos relacionados, e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Correspondência de caminho URI (expressão regular) | Use a anotação nginx.ingress.kubernetes.io/use-regex . Consulte a documentação do Ingress em NGINX. |
Use a anotação traefik.ingress.kubernetes.io/router.pathmatcher . Consulte a documentação do Traefik. |
| Autenticação mútua de TLS | Use as anotações nginx.ingress.kubernetes.io/auth-tls-* no recurso Ingress. Consulte a documentação do Ingress em NGINX. |
Crie um CRD do tipo TLSOption do Traefik e aplique-o por meio da anotação traefik.ingress.kubernetes.io/router.tls.options . Consulte a documentação do Traefik. |
| Tentar novamente / próximo upstream | Use nginx.ingress.kubernetes.io/proxy-next-upstream e as anotações relacionadas. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik Retry e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Limitação de taxa | Use as anotações nginx.ingress.kubernetes.io/limit-* no recurso Ingress. Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik RateLimit e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Reescrita de caminho | Use a anotação nginx.ingress.kubernetes.io/rewrite-target . Consulte a documentação do Ingress em NGINX. |
Crie um CRD de middleware do Traefik ( ReplacePath ou ReplacePathRegex ) e aplique-o ao recurso Ingress. Consulte a documentação do Traefik. |
| Afinidade de sessão (cookies persistentes) | Use nginx.ingress.kubernetes.io/affinity e as anotações relacionadas. Consulte a documentação do Ingress em NGINX. |
Use as anotações de “ sticky cookie ” do Traefik diretamente no recurso Ingress. Consulte a documentação do Traefik. |
| TLS a montante (serviços SSL ) | Use as anotações nginx.ingress.kubernetes.io/backend-protocol e proxy-ssl-*. Consulte a documentação do Ingress em NGINX. |
Crie um CRD do Traefik ServersTransport com o campo rootCAs e aplique-o ao serviço de backend. Consulte a documentação do Traefik. |
| SSL protocolos e algoritmos de criptografia | Defina os campos “ ssl-protocols ” e “ ssl-ciphers ” no ibm-k8s-controller-config ConfigMap. Consulte a documentação do Ingress em NGINX. |
Crie um CRD do Traefik TLSOption com os campos minVersion, maxVersion e cipherSuites. Consulte a documentação do Traefik. |
Se um recurso depender de CRDs do Traefik, como Middleware, TLSOption ou ServersTransport, certifique-se de que o processamento de CRDs esteja habilitado. O processamento CRD está habilitado por padrão.
Para configurar o processamento de CRDs, consulte o campo “ processTraefikCRDs ” no ibm-ingress-deploy-config ConfigMap, na seção “Criação de configurações personalizadas” do Ingress ConfigMap.
A tabela a seguir lista os parâmetros de implantação personalizáveis compatíveis com o Ingress- NGINX e o Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
replicas |
Suportado | Suportado |
ingressClass |
Suportado | Suportado |
httpPort, httpsPort |
Suportado | Suportado |
tcpServicesConfig |
Suportado | Não aplicável. Utilize o CRD “ IngressRouteTCP ”. |
enableSslPassthrough |
Suportado | Não aplicável. Você não precisa ativar essa configuração explicitamente. |
defaultCertificate |
Suportado | Não aplicável. Utilize o [CRD TLSStore com o defaultCertificate](https://doc.traefik.io/traefik/reference/routing-configuration/kubernetes/crd/tls/tlsstore/#configuration-example){: external}. |
defaultBackendService |
Suportado | Não aplicável. Use o Ingress de backend padrão global. |
deepInspect |
Suportado | Não aplicável |
defaultConfig |
Suportado | Não aplicável |
enableAnnotationValidation |
Suportado | Não aplicável. O Traefik não é suscetível à injeção de configuração por meio de anotações. |
enableIngressValidation |
Suportado | Não aplicável |
logLevel |
Aceita-se um número entre 0 e 5 para definir o nível de detalhamento. | É suportado como uma string com os seguintes valores: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC. |
ingressProvider |
Não aplicável | Suportado |
processTraefikCRDs |
Não aplicável | Suportado |
traefikIngressNginxAllowExternalNameServices |
Não aplicável | Suportado |
traefikCRDAllowCrossNamespace |
Não aplicável | Suportado |
traefikCRDAllowExternalNameServices |
Não aplicável | Suportado |
httpReadTimeout, httpsReadTimeout |
Não aplicável. Configure através do ibm-k8s-controller-config ConfigMap. |
Suportado |
httpWriteTimeout, httpsWriteTimeout |
Não aplicável. Configure através do ibm-k8s-controller-config ConfigMap. |
Suportado |
httpIdleTimeout, httpsIdleTimeout |
Não aplicável. Configure através do ibm-k8s-controller-config ConfigMap. |
Suportado |
httpsRedirect |
Não aplicável. Configure por meio do ibm-k8s-controller-configConfigMap ou de uma anotação. |
Suportado |
tolerations |
Suportado | Suportado |
Aspectos a serem considerados durante a migração
Os seguintes mecanismos do IBM Cloud ajudam a evitar a interrupção do serviço em determinados cenários.
Gerenciamento de DNS em clusters clássicos
Em clusters clássicos, ativar ou desativar instâncias públicas do ALB adiciona automaticamente os endereços IP desses ALBs ao domínio padrão do cluster.
Ao habilitar diferentes tipos de ALBs (combinando o Traefik com o Ingress — NGINX ), os registros DNS não são adicionados. Isso evita a situação indesejada em que diferentes tipos de ALB sejam misturados em um único domínio, o que poderia causar problemas difíceis de depurar. Nenhum novo endereço IP é registrado enquanto esse estado misto persistir. A remoção do endereço IP continua funcionando como antes.
Quando a última instância do tipo diferente é desativada (seja o Traefik ou o Ingress — NGINX ), os ALBs restantes são automaticamente registrados novamente para restaurar o estado desejado, no qual todas as instâncias públicas do ALB estão registradas por trás do subdomínio padrão do cluster.
Tratamento padrão de classes de Ingress
A classe de Ingress padrão é reconciliada a cada evento de ativação ou desativação do ALB. Se a classe padrão do Ingress for mantida na configuração padrão “ IBM ” e não for configurada, ela será atualizada automaticamente.
Se o cluster tiver apenas ALBs baseados no Traefik habilitados, public-iks-traefik ou private-iks-traefik passa a ser o padrão, dependendo se public-iks-k8s-nginx ou private-iks-k8s-nginx era o padrão anterior. Da mesma forma, se apenas os ALBs baseados em Ingress- NGINX estiverem habilitados no cluster, a classe Ingress padrão volta a ser a Ingress- NGINX.
As classes personalizadas do Ingress nunca são definidas como padrão automaticamente.
Para obter mais informações sobre como configurar e personalizar o Traefik, consulte “Sobre o Ingress com o Traefik ”.