You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 验证访问

  1. 获取ALB的外部域名:
kubectl get ingress <ingress-name>  # 替换为cc-ingress或websocket-ingress

输出中的ADDRESS字段即为ALB域名。

  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:55:23