WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。WebSocket允许服务端主动向客户端推送数据。遵守WebSocket协议的服务即为WebSocket服务。本文通过示例介绍如何通过ASM入口网关访问网格内的WebSocket服务。
前提条件
- 已创建ASM实例。具体操作,请参见创建ASM实例。
- 已创建Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群。
- 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
- 已部署入口网关服务。具体操作,请参见创建入口网关服务。
- 已部署应用到ASM实例。具体操作,请参见部署应用到ASM实例。
- 已创建ASM企业版或旗舰版实例。具体操作,请参见创建ASM实例。
- 已创建ASM企业版或旗舰版实例,且实例为最新版本。具体操作,请参见创建ASM实例。
- 已通过kubectl工具连接集群。具体操作,请参见通过kubectl工具连接集群。
步骤一:部署示例应用
- 通过kubectl连接集群。具体操作,请参见通过kubectl工具连接集群。
- 使用以下内容,创建名为tornado的YAML文件。
apiVersion: v1 kind: Service metadata: name: tornado labels: app: tornado service: tornado spec: ports: - port: 8888 name: http selector: app: tornado --- apiVersion: apps/v1 kind: Deployment metadata: name: tornado spec: replicas: 1 selector: matchLabels: app: tornado version: v1 template: metadata: labels: app: tornado version: v1 spec: containers: - name: tornado image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/asm-wss-server-sample:latest imagePullPolicy: Always ports: - containerPort: 8888 ---
- 执行以下命令,创建tornado应用。
kubectl apply -f tornado.yaml
步骤二:设置路由规则
- 登录ASM控制台。
- 在左侧导航栏,选择 。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 创建网关规则。
- 创建虚拟服务。
步骤三:获取入口网关的地址
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择 。
- 在服务页面顶部设置命名空间为istio-system,查看istio-ingressgateway外部端点列下端口为80的IP地址。
步骤四:验证通过入口网关访问WebSocket服务
- 在四个不同类型的浏览器中输入http://<入口网关地址>。
- 分别执行以下命令,请求WebSocket服务。
curl "http://<入口网关地址>/api?id=8&value=300"
curl "http://<入口网关地址>/api?id=5&value=600"
curl "http://<入口网关地址>/api?id=1&value=200"
curl "http://<入口网关地址>/api?id=3&value=290"
可以看到,四个浏览器的WebSocket服务页面数据同时被更新,且页面显示结果一致。
步骤五:切换使用wss协议访问
- 为上述网关设置服务器证书和私钥。具体操作,请参见步骤一:为多个主机准备服务器证书和私钥。
请确保在ACK集群下的istio-system命名空间中,已经创建了包含证书和私钥的Secret,且Secret名称为myexample-credential。
- 修改步骤二:设置路由规则中创建的路由规则。
YAML示例如下:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: tornado-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: credentialName: myexample-credential mode: SIMPLE
步骤六:验证使用wss协议访问WebSocket服务
- 在四个不同类型的浏览器中输入http://<入口网关地址>。
- 分别执行以下命令,请求WebSocket服务。
curl -k "https://<入口网关地址>/api?id=8&value=300"
curl -k "https://<入口网关地址>/api?id=5&value=600"
curl -k "https://<入口网关地址>/api?id=1&value=200"
curl -k "https://<入口网关地址>/api?id=3&value=290"
可以看到,四个浏览器的WebSocket服务页面数据同时被更新,且页面显示结果一致。