Nginx Ingress Controller 默认已支持 WebSocket,但需通过以下注解优化连接参数:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# WebSocket 核心配置
nginx.ingress.kubernetes.io/proxy-http-version: "1.1" # 强制使用 HTTP/1.1(WebSocket 必需)
nginx.ingress.kubernetes.io/proxy-read-timeout: "86400" # 读超时(单位:秒,建议长连接设为 24 小时)
nginx.ingress.kubernetes.io/proxy-send-timeout: "86400" # 写超时(单位:秒,与读超时对齐)
# 其他原有注解保持不变(如 CORS、安全拦截等)
nginx.ingress.kubernetes.io/configuration-snippet: |
...
nginx.ingress.kubernetes.io/server-snippet: |
...
spec:
...
注解说明
注解名称 | 作用 |
---|---|
proxy-http-version: "1.1" | 强制使用 HTTP/1.1 协议,确保支持 Upgrade 标头实现 WebSocket 握手 |
proxy-read-timeout: "86400" | 后端服务器读超时(防止空闲 WebSocket 连接断开) |
proxy-send-timeout: "86400" | 后端服务器写超时(与读超时一致,保持对称性) |
注意事项
-
无需手动添加
Upgrade
和Connection
头
Nginx Ingress 自动处理 WebSocket 的协议升级,无需在server-snippet
中手动配置proxy_set_header
。 -
超时时间设置
- 根据业务场景调整
proxy-read-timeout
和proxy-send-timeout
(例如实时性要求高的场景可缩短)。 - 避免超过 Nginx 的默认最大值(通常为 60 秒需显式覆盖)。
- 根据业务场景调整
-
CORS 兼容性
WebSocket 握手阶段可能需要 CORS 头,确保Access-Control-Allow-Origin
等头已正确配置(示例中已包含)。
配置验证
-
连接测试
使用wscat
工具测试 WebSocket 连通性:wscat -c wss://ai-application.dossen.com
-
响应头检查
确认握手响应包含HTTP/1.1 101 Switching Protocols
和Connection: upgrade
。 -
日志监控
查看 Nginx Ingress 日志,过滤WebSocket
相关连接状态和超时事件:kubectl logs -n ingress-namespace <nginx-ingress-pod> | grep -i websocket
完整配置示例
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"
nginx.ingress.kubernetes.io/proxy-send-timeout: "86400"
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($http_origin ~* ^https?://(your-domains)\.com$) {
add_header 'Access-Control-Allow-Origin' '$http_origin' always;
# 其他 CORS 头...
}
nginx.ingress.kubernetes.io/server-snippet: |
location ~ ^/(敏感路径) { return 403; }
spec:
rules:
- host: ai-application.dossen.com
http:
paths:
- path: /
backend:
serviceName: dossen-ai-application-service
servicePort: 18080
tls:
- hosts:
- ai-application.dossen.com
secretName: dossen.com
评论