# 部署前需要改两处: # 1. spec.ingressClassName —— 用 `kubectl get ingressclass` 确认集群里实际的 class 名 # 2. spec.rules[].host 与 spec.tls[].hosts —— 换成你自己的域名 # # 证书二选一: # A) cert-manager 自动签发:在 annotations 里加 # cert-manager.io/cluster-issuer: <你的 ClusterIssuer 名> # B) 手动导入已有证书: # kubectl -n wuziqi create secret tls wuziqi-tls \ # --cert=fullchain.pem --key=privkey.pem # 没有域名时删掉整段 spec.tls,并去掉 annotations 里的 force-ssl-redirect(若有), # 改为纯 HTTP 访问;Socket.IO 在 HTTP 下也能工作,但手机网络上不如 wss 稳定。 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: wuziqi namespace: wuziqi labels: app: wuziqi annotations: # —— Socket.IO 长连接的关键三项 —— # 默认 proxy-read-timeout 只有 60s,长连接会被 Ingress 直接掐断, # 表现为手机每隔一分钟掉线一次。心跳间隔 25s,这里放宽到 1 小时。 nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # 关闭缓冲,避免事件被攒着不发导致落子延迟 nginx.ingress.kubernetes.io/proxy-buffering: "off" # 显式声明 WebSocket Upgrade 的目标 Service nginx.ingress.kubernetes.io/websocket-services: "wuziqi" # —— 会话亲和性 —— # 客户端 transports 为 [websocket, polling],WebSocket 不通时会回退到长轮询。 # 长轮询的握手与后续请求必须落到同一 Pod,否则会话丢失。 # replicas=1 时这几项是空操作,但一旦调大副本数就是必需的。 nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-name: "wuziqi-affinity" nginx.ingress.kubernetes.io/session-cookie-max-age: "3600" nginx.ingress.kubernetes.io/session-cookie-samesite: "Lax" spec: ingressClassName: nginx tls: - hosts: - gomoku.example.com secretName: wuziqi-tls rules: - host: gomoku.example.com http: paths: - path: / pathType: Prefix backend: service: name: wuziqi port: number: 80