部署在AKS上的WebSocket无法连接问题排查请求
AKS部署Golang WebSocket服务器无法建立连接问题
我们用Golang开发了一个WebSocket服务器,本地及Docker环境测试均正常,但部署到Azure Kubernetes Services(AKS)后无法建立连接,使用的是Azure免费订阅。以下是相关配置及信息:
Deployment.yaml配置
apiVersion: apps/v1 kind: Deployment metadata: name: overseerservice-deployment labels: app: dexam-overseer spec: replicas: 1 selector: matchLabels: app: dexam-overseer template: metadata: labels: app: dexam-overseer spec: containers: - name: dexam-overseer image: eyadzz/dexam_overseer_service:latest ports: - containerPort: 9999 env: - name: RABBITMQ_HOST value: rabbitmq-service - name: RABBITMQ_PORT value: :5672 --- apiVersion: v1 kind: Service metadata: name: overseer-service spec: selector: app: dexam-overseer type: LoadBalancer ports: - port: 9999 protocol: TCP targetPort: 9999 nodePort: 30008
JS客户端连接代码
let socket = new WebSocket("ws://20.106.105.25:9999/ws"); console.log("Attempting Connection..."); socket.onopen = () => { console.log("Successfully Connected"); socket.send(("1").toString()) }; socket.onclose = event => { console.log("Socket Closed Connection: ", event); socket.send("Client Closed!") }; socket.onerror = error => { console.log("Socket Error: ", error); };
错误信息

排查建议
- 确认负载均衡器外部IP有效性:执行
kubectl get services overseer-service,检查输出的EXTERNAL-IP是否为20.106.105.25,且状态为Ready。 - 检查AKS网络安全组规则:登录Azure门户,找到AKS集群对应的NSG,添加入站规则允许TCP 9999端口的外部流量。免费订阅的AKS默认可能限制非常见端口的外部访问。
- 验证Pod内服务状态:进入WebSocket Pod内部,执行
kubectl exec -it <你的Pod名称> -- curl -i http://localhost:9999/ws,查看是否返回WebSocket协议的握手响应(状态码101 Switching Protocols)。 - 检查服务与Pod的关联:执行
kubectl get endpoints overseer-service,确认输出中包含运行中的Pod IP和端口,说明Service已正确关联Pod。 - 确认RabbitMQ依赖可用性:在WebSocket Pod内执行
nslookup rabbitmq-service,检查是否能解析到RabbitMQ服务的IP;同时确认RabbitMQ的Deployment和Service是否正常运行,避免服务因依赖未就绪而启动失败。 - 核对WebSocket路由路径:确认服务端代码中WebSocket的监听路径是
/ws,和客户端连接的路径完全一致,没有拼写或路径层级错误。
内容的提问来源于stack exchange,提问作者Eyad Youssef
相关产品推荐
相关产品推荐

