K8s中WSS请求通过Traefik IngressRoute无法触发ForwardAuth中间件
解决Traefik IngressRoute中WSS请求绕过forward-auth中间件的问题
当前问题:HTTPS请求可正常触发forward-auth中间件完成Helidon应用认证,但wss://ip:443/ws/guest这类WSS请求会直接绕过中间件转发至后端服务,未经过认证流程。
以下是针对性的排查和解决方法:
1. 给WSS请求配置高优先级路由
WebSocket握手本质是带Upgrade: websocket头的HTTP GET请求,通过给这类请求单独设置更高优先级的路由,确保Traefik优先匹配并应用中间件:
修改IngressRoute.yaml:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: annotations: kubernetes.io/ingress.class: traefik name: traefik-tls namespace: sample-domain1-ns spec: entryPoints: - websecure routes: # 专门匹配WebSocket握手请求,优先级设为10(高于默认的0) - kind: Rule match: PathPrefix(`/ws`) && Headers(`Upgrade`, `websocket`) priority: 10 middlewares: - name: test-auth-tls namespace: sample-domain1-ns services: - kind: Service name: sample-domain1-cluster port: 8001 # 匹配/ws路径下的普通HTTP请求 - kind: Rule match: PathPrefix(`/ws`) middlewares: - name: test-auth-tls namespace: sample-domain1-ns services: - kind: Service name: sample-domain1-cluster port: 8001 tls: certResolver: default
2. 确认forward-auth后端支持GET请求
WebSocket握手是GET请求,需检查Helidon应用的/auth端点是否支持处理GET方法:
- 如果当前
/auth仅接受POST请求,需修改端点逻辑,添加对GET方法的支持,保证能处理WSS握手的认证请求。
3. 拆分中间件避免执行顺序冲突
当前将headers和forward-auth放在同一个Middleware中,可能存在执行顺序问题,建议拆分为独立中间件,确保认证逻辑先执行:
创建单独的headers中间件(headers.yaml):
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: custom-headers namespace: sample-domain1-ns spec: headers: customRequestHeaders: X-Forwarded-Proto: https
修改forward-auth.yaml:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: test-auth-tls namespace: sample-domain1-ns spec: forwardAuth: address: https://sample-domain1-lb.sample-domain1-ns.svc.cluster.local:8080/auth tls: insecureSkipVerify: true
在IngressRoute中调整中间件顺序:
middlewares: - name: test-auth-tls namespace: sample-domain1-ns - name: custom-headers namespace: sample-domain1-ns
4. 查看Traefik日志验证中间件执行
启用Traefik的access日志,检查WSS请求的日志条目,确认Middleware字段包含test-auth-tls@kubernetescrd,以此判断中间件是否被正确调用。若未显示,需进一步调整路由匹配规则(比如添加Host匹配,确保请求域名与路由规则一致)。
内容的提问来源于stack exchange,提问作者atroy
相关产品推荐
相关产品推荐

