Contour Ingress资源上WebSocket注解失效问题排查
问题排查与解决方案
1. 修正WebSocket路由注解的匹配规则
你当前配置的projectcontour.io/websocket-routes: /api/notificationhub/是精确路径匹配,但SignalR的连接流程会涉及/api/notificationhub/negotiate、/api/notificationhub/connect等子路径,这些路径无法被精确匹配的注解覆盖,导致Contour未将其识别为WebSocket请求,进而触发错误。
修改注解为前缀匹配:
annotations: projectcontour.io/websocket-routes: /api/notificationhub/*
或者直接包含所有SignalR相关路径:
annotations: projectcontour.io/websocket-routes: /api/notificationhub/,/api/notificationhub/*
2. 排查/api/UserSettings/ 405错误
405状态码表示请求方法不被允许,通常有两种原因:
- Ingress路径匹配类型错误:确保Ingress规则中
/api/UserSettings/对应的pathType是Prefix(而非Exact),否则仅精确匹配/api/UserSettings/的请求会被转发,带参数或子路径的请求会被拒绝。示例配置:
spec: rules: - http: paths: - path: /api/UserSettings/ pathType: Prefix backend: service: name: your-app-service port: number: 80
- 后端服务路由限制:确认你的应用服务本身是否允许
/api/UserSettings/对应的HTTP方法(如POST/PUT/DELETE等),部分后端框架会对请求方法做限制,与Ingress无关。
3. 理解Grafana与你的应用的差异
Grafana的WebSocket路径为单一的/ws,精确匹配注解即可覆盖所有WebSocket流量;而你的SignalR路径包含复杂子路径结构,这是相同注解在Grafana生效、在你的应用失效的核心原因。
4. 验证Contour注解支持
确保你的Contour版本为1.10+(该版本开始支持projectcontour.io/websocket-routes注解),且未禁用Ingress资源处理(默认启用)。可查看Contour控制器日志,检查是否存在WebSocket路径匹配失败的错误记录。
内容的提问来源于stack exchange,提问作者Golide
相关产品推荐
相关产品推荐

