Azure 應用程式閘道 v2 提供 WebSocket 和 HTTP/2 通訊協定的原生支援。 應用程式閘道 和 Kubernetes 輸入都沒有用戶可設定的設定,可選擇性地啟用或停用 WebSocket 支援。
提示
請考慮針對 Kubernetes 輸入解決方案的容器 應用程式閘道。
適用於 WebSocket 伺服器部署的 YAML
下列 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: networking.k8s.io/v1
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
假設所有必要條件都已滿足,而且您擁有由 Azure Kubernetes Service 中 Kubernetes 輸入所控制的 應用程式閘道 部署,上述部署會導致 WebSocket 伺服器公開在 應用程式閘道 部署公用 IP 位址和ws.contoso.com
網域的埠 80 上。
以下 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標示為狀況不良。 此狀態最終會導致 502 Bad Gateway
WebSocket 伺服器的取用者發生錯誤。
若要避免此錯誤 502 Bad Gateway
,您可能需要為伺服器的健康情況檢查新增 HTTP GET
處理程式。 例如 /health
會傳回 200 OK
。