AWS EKS中Socket协议微服务的外部访问配置求助
在AWS EKS上通过ALB Ingress配置WebSocket服务的外部访问
AWS ALB原生支持WebSocket协议(基于HTTP Upgrade机制),你可以基于现有Ingress配置扩展,或者新建独立Ingress来实现WebSocket服务的外部访问,具体步骤如下:
1. 部署WebSocket服务的Service
首先为你的WebSocket微服务创建ClusterIP类型的Service,确保Pod标签与Service的selector匹配:
apiVersion: v1 kind: Service metadata: name: websocket-service spec: type: ClusterIP ports: - port: 3001 targetPort: 3001 protocol: TCP selector: app: websocket-microservice # 替换为你的WebSocket Pod标签
执行部署命令:
kubectl apply -f websocket-service.yaml
2. 配置Ingress支持WebSocket
方案一:复用现有Ingress(推荐)
直接在已有的cc-ingress中新增WebSocket路径规则,同时可选配置连接超时(避免ALB默认60秒断开长连接):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cc-ingress annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip # 可选:调整WebSocket连接空闲超时时间,按需设置(单位:秒) alb.ingress.kubernetes.io/connection-idle-timeout: "3600" spec: ingressClassName: alb rules: - http: paths: - path: /api pathType: Prefix backend: service: name: microservice-name port: number: 3001 # 新增WebSocket路径规则 - path: /some-route pathType: Prefix backend: service: name: websocket-service port: number: 3001
方案二:新建独立Ingress
如果需要为WebSocket服务单独配置域名或路径,可创建独立Ingress:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: websocket-ingress annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/connection-idle-timeout: "3600" spec: ingressClassName: alb rules: - http: paths: - path: /some-route pathType: Prefix backend: service: name: websocket-service port: number: 3001
执行Ingress更新/部署命令:
kubectl apply -f cc-ingress.yaml # 方案一 # 或 kubectl apply -f websocket-ingress.yaml # 方案二
3. 验证访问
- 获取ALB的外部域名:
kubectl get ingress <ingress-name> # 替换为cc-ingress或websocket-ingress
输出中的ADDRESS字段即为ALB域名。
- 用Postman测试:
选择WebSocket请求类型,输入访问地址:
- 若ALB配置HTTPS(生产环境推荐):
wss://<ALB域名>/some-route - 若使用HTTP:
ws://<ALB域名>/some-route
发送消息验证连接是否正常。
注意事项
- 确保后端WebSocket服务正确处理
Upgrade: websocket请求头,支持WebSocket协议。 - 检查安全组配置:ALB的安全组需开放80(HTTP)或443(HTTPS)端口;EKS节点安全组需允许ALB访问Pod的3001端口。
- 若使用HTTPS,需确保ALB已配置证书(可通过Ingress注解
alb.ingress.kubernetes.io/certificate-arn指定AWS ACM证书)。
内容的提问来源于stack exchange,提问作者mohsen
相关产品推荐
相关产品推荐

