应用程序网关服务器,向应用程序网关公开 WebSocket 服务器

本文档介绍如何在Azure应用网关v2中配置WebSocket服务器的公开,强调即使没有选择性启用或禁用的设置,该服务也支持WebSocket和HTTP/2。提供了Kubernetes部署YAML示例,并讨论了健康检查问题,因为应用网关的默认健康检查可能导致WebSocket服务器返回400错误。解决方案是添加一个HTTPGET处理程序以确保正确的健康检查响应。
摘要由CSDN通过智能技术生成

您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

向应用程序网关公开 WebSocket 服务器

11/4/2019

本文内容

如应用程序网关 v2 文档中所述,它为 WebSocket 和 HTTP/2 协议提供本机支持。 请注意,对于应用程序网关和 Kubernetes 入口,用户都无法通过配置设置来选择性地启用或禁用 WebSocket 支持。

下面的 Kubernetes 部署 YAML 显示了用于部署 WebSocket 服务器的最小配置,它与部署常规 Web 服务器相同:

apiVersion: apps/v1

kind: Deployment

metadata:

name: websocket-server

spec:

selector:

matchLabels:

app: ws-app

replicas: 2

template:

metadata:

labels:

app: ws-app

spec:

containers:

- name: websocket-app

imagePullPolicy: Always

image: your-container-repo.azurecr.io/websockets-app

ports:

- containerPort: 8888

imagePullSecrets:

- name: azure-container-registry-credentials

---

apiVersion: v1

kind: Service

metadata:

name: websocket-app-service

spec:

selector:

app: ws-app

ports:

- protocol: TCP

port: 80

targetPort: 8888

---

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: websocket-repeater

annotations:

kubernetes.io/ingress.class: azure/application-gateway

spec:

rules:

- host: ws.contoso.com

http:

paths:

- backend:

serviceName: websocket-app-service

servicePort: 80

由于所有先决条件都已满足,并且你有一个受 AKS 中的 Kubernetes 入口控制的应用程序网关,因此上面的部署会导致在应用程序网关的公共 IP 和 ws.contoso.com 域的端口 80 上公开 WebSockets 服务器。

以下 cURL 命令会测试 WebSocket 服务器部署:

curl -i -N -H "Connection: Upgrade" \

-H "Upgrade: websocket" \

-H "Origin: http://localhost" \

-H "Host: ws.contoso.com" \

-H "Sec-Websocket-Version: 13" \

-H "Sec-WebSocket-Key: 123" \

http://1.2.3.4:80/ws

WebSocket 运行状况探测

如果部署未显式定义运行状况探测,应用程序网关会在 WebSocket 服务器终结点上尝试 HTTP GET。

根据服务器实现情况(这是我们喜欢的),可能需要特定于 WebSocket 的标头(例如 Sec-Websocket-Version)。

由于应用程序网关不添加 WebSocket 标头,因此应用程序网关的运行状况探测响应(来自 WebSocket 服务器)最可能是 400 Bad Request。

因此,应用程序网关会将你的 Pod 标记为运行不正常,这最终会导致 WebSocket 服务器的使用者收到 502 Bad Gateway 错误。

为了避免此情况,可能需要将运行状况检查的 HTTP GET 处理程序添加到服务器(例如 /health,会返回 200 OK)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值