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.

Comparação geral das propriedades do Ingress, do NGINX e do Traefik
Esta tabela comparativa possui cabeçalhos de linhas e colunas. Os cabeçalhos das linhas identificam a propriedade que está sendo comparada, e os cabeçalhos das colunas identificam o Ingress, o NGINX e o Traefik. Use a tabela para comparar as principais diferenças entre os dois controladores de entrada.
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.

Comparação de recursos de configuração entre o Ingress, o NGINX e o Traefik
Esta tabela tem cabeçalhos de linha e coluna. Os cabeçalhos das linhas identificam um recurso de configuração, e os cabeçalhos das colunas descrevem como configurar esse recurso 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.

Parâmetros de implantação personalizáveis suportados pelo Ingress — NGINX e Traefik
Esta tabela tem cabeçalhos de linha e coluna. Os cabeçalhos das linhas identificam um parâmetro de implantação, e os cabeçalhos das colunas indicam se o Ingress- NGINX e o Traefik suportam esse parâmetro ou oferecem uma alternativa.
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 ”.