Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Ingress no EKS não está criando todas as rules necessarias no Listener do Load Balancer

Oi, bom dia.

estou com problemas na criação de rules do Listener no ALB na AWS, através do Kubernetes. Ingress no EKS não está criando todas as rules necessarias no Listener do Load Balancer

Quando aplico o manifesto, ele cria corretamente as rules da porta 443, porém as rules da porta 80 são criadas apenas para o path /*, as rules da porta 80 para o path /checkout não são criadas. Para o /checkout são criadas apenas na porta 443.

Tentei diversas combinações do manifesto. Revisei logs do aws-load-balancer-controller. Sem sucesso.

Alguém que utilize múltiplos paths no Ingress NGINX com EKS e tenha algum exemplo de manifesto para o ingress que esteja ok? ou tem alguma dica de como resolver este caso? Segue o manifesto do ingress: https://pastebin.com/dmkxeaTY

2 respostas
solução!

Oi Fernando, tudo bem?

Desculpe a demora em retornar.

Entendo que você está enfrentando problemas na criação das regras do Listener no ALB na AWS, através do Kubernetes. Parece que as regras da porta 80 para o path /checkout não estão sendo criadas corretamente, apenas as regras da porta 443.

Uma possível solução para esse problema é verificar se o seu manifesto do Ingress está configurado corretamente. Sugiro que você revise o arquivo que você compartilhou (https://pastebin.com/dmkxeaTY) e verifique se as regras estão definidas corretamente para o path /checkout na porta 80.

Além disso, você pode tentar utilizar um exemplo de manifesto do Ingress que esteja funcionando corretamente para múltiplos paths no Ingress NGINX com EKS. Existem diversos exemplos disponíveis na documentação oficial do Kubernetes e também em fóruns e comunidades online. Você pode pesquisar por "Ingress NGINX EKS multiple paths example" para encontrar exemplos que possam te ajudar.

Caso nenhum desses passos resolva o seu problema, sugiro que você verifique os logs do aws-load-balancer-controller para identificar possíveis erros ou problemas durante a criação das regras do Listener.

Espero que essas dicas te ajudem a resolver o problema.

Um abraço e bons estudos.

Oi Lorena, bom dia, tudo certo e por aí?

Obrigado pelo retorno.

Neste meio tempo eu cheguei na solução, mas você estava certa ao indicar a verificação dos logs do aws-load-balancer-controller.

Criei um post no Stackoverflow explicando a solução no formato FCA:

https://stackoverflow.com/questions/74634798/kubernetes-ingress-does-not-create-rules-in-alb-eks-when-it-has-wildcard

Segue o detalhado em português, caso alguém mais precise:

FATO

  • Kubernetes ingress não cria rules no Alb/EKS quando tem wildcard.
  • Ao tentar criar paths que se sobrepoem no Ingress do Kubernetes, o roteamento das requisições não ocorre conforme o esperado.
  • O ingress não consegue criar paths com Wildcard.

CAUSA

  • A rule com wildcard não é criada no ALB na AWS.

  • Ao tentar usar wildcard no path do Ingress no Kubernetes, ocorrem erros no ingress / aws-load-balancer-controller.

  • Logs do Ingress:

Events:
  Type     Reason            Age                  From     Message
  ----     ------            ----                 ----     -------
  Warning  FailedBuildModel  53s (x974 over 11d)  ingress  Failed build model due to ingress: api-checkout/api-checkout-develop: prefix path shouldn't contain wildcards: /teste/*
  • Logs do aws-load-balancer-controller:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller  

{"level":"error","ts":1669761828.7741847,"logger":"controller-runtime.manager.controller.ingress","msg":"Reconciler error","name":"api-checkout-max-shopify-develop","namespace":"api-checkout-max-shopify-develop","error":"ingress: api-checkout-max-shopify-develop/api-checkout-max-shopify-develop: prefix path shouldn't contain wildcards: /shopify/*"}


  • Só é possível criar rules no ALB contendo wildcard, através da Console da AWS.

AÇÃO

ImplementationSpecific: With this path type, matching is up to the IngressClass. Implementations can treat this as a separate pathType or treat it identically to Prefix or Exact path types.

EXEMPLO:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: $K8S_INGRESS_NAME_NGINX
  namespace: $K8S_NAMESPACE
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/certificate-arn: $INGRESS_CERT_ARN,$INGRESS_CERT_SUBDOMAIN_ARN
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS-1-2-Ext-2018-06
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/scheme: internet-facing
spec:
  rules:
    - host: $URL
      http:
        paths:
          - pathType: ImplementationSpecific
            path: "/teste"
            backend:
              service:
                name: $K8S_DEPLOY_NAME_NGINX_FRONTEND
                port:
                  number: $K8S_SERVICE_PORT_NGINX_FRONTEND
          - pathType: ImplementationSpecific
            path: "/teste/*"
            backend:
              service:
                name: $K8S_DEPLOY_NAME_NGINX_BACKEND
                port:
                  number: $K8S_SERVICE_PORT_NGINX_BACKEND
          - pathType: Prefix
            path: "/checkout"
            backend:
              service:
                name: $K8S_DEPLOY_NAME_NGINX_FRONTEND
                port:
                  number: $K8S_SERVICE_PORT_NGINX_FRONTEND
            path: "/"
            backend:
              service:
                name: $K8S_DEPLOY_NAME_NGINX_BACKEND
                port:
                  number: $K8S_SERVICE_PORT_NGINX_BACKEND