trafik背后ssl终止负载均衡器返回404



我有一个K8s设置,交通流量是这样暴露的

kubernetes:
ingressClass: traefik
service:
nodePorts:
http: 32080
serviceType: NodePort

后面,我将一些请求转发给不同的服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-name
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: my-host.com
http:
paths:
- path: /my-first-path
backend:
serviceName: my-nodeJs-services
servicePort: 3000

当DNS直接设置为解析到我的ip时,应用程序可以正常使用HTTP

http://my-host.com: 32080/my-first-path

但是当有人通过AWS ALB/API网关添加SSL时,应用程序无法访问404-NotFound错误

路线是这样的https://my-host.com/my-first-path

在AWS规模上,他们配置了这样的东西

https://my-host.com => SSL Termination and  => Forward all to 43.43.43.43:32080

我认为这个失败是因为traefik期待http://my-host.com而不是https://my-host.com,这导致它无法找到匹配的路线?或者在ssl终止时,主机名丢失了,因此trafik无法找到路由?

在这种情况下我该怎么做?

我不是很熟悉ALB,但可能发生的是负载均衡器收到的请求包含头Host: my-host.com,当它被转发到您的入口控制器时,头被Host: 43.43.43.43取代。如果是这种情况,我看到3个解决方案:

  1. ALB可能能够将原始主机头传递给目标。(如果可能的话,你必须在文件中检查)
  2. 如果你的入口背后的应用程序不检查主机头,你可以写一个不检查特定主机的入口。例如,在这些示例中,您可以看到未指定主机字段。
  3. 如果名称解析在内部工作,您可以为目标定义一个名称,并在您的ALB和入口中使用该名称。

相关内容

  • 没有找到相关文章

最新更新