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
Kluster ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola.
Gateway cloud-native MSE telah dibuat. Untuk informasi lebih lanjut, lihat Buat Gateway Cloud-Native.
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: NodePortLangkah 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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di panel navigasi kiri, klik Routes. Lalu, klik tab Source.
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.
CatatanPrioritas 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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.
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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di panel navigasi kiri, klik Routes. Lalu, klik tab Routes.
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
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
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.

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())