MSE云原生网关以托管的方式来作为流量入口,提供了丰富的流量治理能力,支持多种服务发现方式,如容器服务、MSE Nacos、MSE ZooKeeper、ECS和域名,同时支持gRPC、HTTP和WebSocket等多种协议。本文介绍基于容器服务K8s和云原生网关实现WebSocket应用的转发路由。
前提条件
- 已创建Kubernetes集群,请参见创建Kubernetes托管版集群。
- 已开通MSE云原生网关,请参见创建MSE云原生网关。
步骤一:使用容器服务部署WebSocket应用
应用部署的具体操作,请参见创建无状态工作负载Deployment。
在本示例中,使用容器服务K8s原生的服务发现方式,即通过声明式Service API资源将后端服务注册到CoreDNS。示例中的后端服务提供了多个WebSocket接口,在容器服务ACK中应用如下资源:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: sockbin
name: sockbin-app
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: sockbin
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: sockbin
spec:
containers:
- image: therebelrobot/sockbin
imagePullPolicy: Always
name: sockbin
ports:
- containerPort: 4080
protocol: TCP
resources:
limits:
cpu: 500m
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
labels:
app: sockbin
name: sockbin-service
namespace: default
spec:
ports:
- name: http
port: 4080
protocol: TCP
targetPort: 4080
selector:
app: sockbin
sessionAffinity: None
type: NodePort
步骤二:使用云原生网关作为WebSocket的路由分发
添加ACK集群作为网关的服务来源并添加Sockbin服务。
添加服务来源
添加服务
添加网关到Sockbin服务的路由
- 登录MSE管理控制台,并在顶部菜单栏选择地域。
- 在左侧导航栏,选择 ,单击目标网关名称。
- 在左侧导航栏,单击路由配置,并在路由配置页面左上角,单击创建路由。
- 在创建路由面板,配置路由相关参数。
步骤三: 验证WebSocket服务可用性
本文为您提供两种方式来验证WebSocket服务可用性。
方式一:通过Sockbin服务的界面直接进行测试
网关会根据WebSocket握手时携带的域名和Path进行路由,使用如下配置访问网关即可得到Sockbin服务的界面。

方式二:使用各种语言的WebSocket客户端进行测试
例如,使用Python的WebSocket客户端来得到一个延迟1秒的服务端响应。
#!/usr/bin/env python
import asyncio
import websockets
async def hello():
async with websockets.connect("ws://ip_addr/delay/1000") as websocket:
await websocket.send("Hello Test")
text = await websocket.recv()
print(text)
asyncio.run(hello())