共用方式為


將 WebSocket 伺服器公開至應用程式閘道

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