全部产品
Search
文档中心

Microservices Engine:Mengarahkan permintaan aplikasi WebSocket berdasarkan gateway cloud-native

更新时间:Jul 02, 2025

Protokol WebSocket memungkinkan komunikasi dua arah terus-menerus antara klien dan server dengan koneksi persisten serta latensi rendah. Saat kluster Container Service for Kubernetes mengakses layanan WebSocket eksternal, gateway cloud-native menerima dan mengalihkan permintaan ke layanan backend tertentu sesuai aturan routing yang telah ditentukan. Topik ini menjelaskan cara menerapkan aplikasi WebSocket di kluster Container Service for Kubernetes dan mengalihkan permintaan menggunakan gateway cloud-native.

Prasyarat

Langkah 1: Terapkan aplikasi WebSocket di kluster ACK

Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat Aplikasi Tanpa Status Menggunakan Deployment.

Dalam contoh ini, kluster ACK digunakan untuk penemuan layanan. Layanan backend didaftarkan dengan CoreDNS menggunakan API layanan berbasis anotasi. Layanan backend dalam contoh ini menyediakan beberapa API WebSocket. Aplikasi WebSocket yang diterapkan di kluster ACK menggunakan konfigurasi sumber daya berikut:

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

Langkah 2: Gunakan gateway cloud-native untuk mengarahkan permintaan aplikasi WebSocket

Tambahkan kluster ACK sebagai sumber layanan dari gateway cloud-native dan tambahkan layanan Sockbin.

Tambahkan sumber layanan

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Source.

  4. Di tab Source, klik Add Source. Di panel Add Source, konfigurasikan parameter, dan klik OK.

    Parameter

    Deskripsi

    Source Type

    Pilih Container Service.

    ACK/ACK Serverless Cluster

    Pilih kluster tempat layanan backend Anda diterapkan.

    Listen to Kubernetes Ingress

    Jika Anda menyalakan sakelar, gateway cloud-native secara otomatis mendengarkan perubahan pada sumber daya Ingress dan membuat konfigurasi domain dan rute yang didengarkan dari sumber daya Ingress tersebut menjadi efektif.

    Jika Anda mematikan sakelar, gateway cloud-native tidak lagi mendengarkan perubahan pada sumber daya Ingress dan membuat konfigurasi domain dan rute yang didengarkan dari sumber daya Ingress tersebut menjadi tidak efektif.

    Catatan

    Prioritas domain dan rute yang dikonfigurasi secara manual di Konsol MSE lebih tinggi daripada prioritas domain dan rute yang didengarkan dari sumber daya Ingress.

Tambahkan layanan

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.

  4. Di tab Services, klik Add Service. Di panel Add Service, konfigurasikan parameter, dan klik OK.

    Parameter

    Deskripsi

    Service Source

    Pilih Container Service.

    Namespace

    Pilih namespace dari kluster tujuan.

    Services

    Pilih satu atau lebih layanan.

Tambahkan rute dari gateway ke layanan Sockbin

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Routes.

  4. Di tab Routes, klik Add Route. Di halaman yang muncul, konfigurasikan parameter, dan klik Save and Advertise.

    Parameter

    Deskripsi

    Routing Rule Name

    Masukkan sockbin-route.

    Domain name

    Pilih nama domain terkait default * dari daftar drop-down.

    Path

    Pilih Prefix dari daftar drop-down kondisi pencocokan dan masukkan / di bidang tersebut.

    Scenario

    Pilih Single Service.

    Backend Service

    Pilih service tujuan dan port layanan.

Verifikasi hasil

Anda dapat menggunakan salah satu metode berikut untuk memverifikasi ketersediaan layanan WebSocket.

Metode 1: Lakukan pengujian di halaman layanan Sockbin

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di tab Gateway Ingress di halaman Overview gateway, temukan titik akhir publik dari instance Server Load Balancer (SLB) yang terkait dengan gateway. Lalu, masukkan titik akhir di bilah alamat browser Anda dan tekan Enter.

    Gateway melakukan routing berdasarkan nama domain dan path yang termasuk dalam permintaan jabat tangan WebSocket untuk membuka halaman layanan Sockbin.sockbin服务的界面

Metode 2: Lakukan pengujian pada klien WebSocket dalam bahasa pemrograman tertentu

Sebagai contoh, Anda dapat menggunakan klien WebSocket di Python untuk menerima respons server dengan latensi 1 detik.

#!/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())