You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS NLB TLS监听器后端Traefik返回404错误问题

解决AWS NLB TLS终止后Traefik IngressRoute返回404的问题

你的问题核心在于AWS NLB已经完成了TLS终止:当用户访问https://whoami.k3s.internal时,NLB会解密HTTPS请求,再以HTTP协议将请求转发到Traefik的80端口(web入口点)。但你在IngressRoute中配置了tls: {},这会让Traefik认为该路由仅处理HTTPS请求(对应websecure入口点,默认443端口),实际收到的HTTP请求无法匹配路由规则,因此返回404。

从日志也能佐证这一点:HTTPS访问时的日志没有匹配到任何路由器("-" "-"),而HTTP访问时明确显示匹配到了default-whoami-ingress-xxx@kubernetescrd路由器。


解决方案

1. 调整IngressRoute配置,适配NLB的TLS终止

修改IngressRoute,移除tls: {}块,并添加中间件处理NLB的转发头,让Traefik识别原始请求的协议:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: whoami-ingress
spec:
  entryPoints:
    - web  # NLB转发HTTP请求到这个入口点
  routes:
    - kind: Rule
      match: Host(`whoami.k3s.internal`)
      services:
        - name: whoami
          port: 80
      middlewares:
        - name: forwarded-headers
---
# 配置ForwardedHeaders中间件,信任NLB所在的IP段
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: forwarded-headers
spec:
  forwardedHeaders:
    trustedIPs:
      - 172.19.0.0/16  # 替换为你的NLB或VPC实际IP段
      - 10.0.0.0/8
    protoHeaders: ["X-Forwarded-Proto"]

2. 确认NLB监听器的转发端口

确保NLB的443 TLS监听器的目标组,是转发到EC2实例的80端口(对应Traefik的web入口点),而非443端口。如果转发到443,Traefik的websecure入口点会收到未加密的HTTP请求,无法完成TLS握手,同样会导致请求失败。


额外验证步骤

  • 查看Traefik仪表盘,确认IngressRoute的路由器已关联到web入口点;
  • 在EC2实例上抓包,验证从NLB过来的请求是HTTP协议,且包含正确的Host头和X-Forwarded-Proto: https头;
  • 检查Traefik配置,确保forwardedHeaders中间件已正确加载,且信任NLB的IP范围。

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:47:45