Protokol WebSocket memungkinkan komunikasi dua arah persisten berlatensi rendah antara klien dan server. Saat Anda mengakses layanan WebSocket dari luar kluster Kubernetes, gateway cloud-native MSE menerima dan meneruskan permintaan ke layanan backend yang sesuai berdasarkan aturan routing yang telah ditentukan. Tutorial ini menjelaskan cara men-deploy aplikasi WebSocket di kluster Container Service for Kubernetes (ACK) dan menggunakan gateway cloud-native MSE untuk penerusan traffic.
Prasyarat
-
Anda telah membuat ACK managed cluster.
-
Anda telah membuat MSE cloud-native gateway.
Langkah 1: Deploy aplikasi WebSocket
Untuk instruksi lengkap, lihat Buat workload stateless menggunakan Deployment.
Tutorial ini menggunakan metode service discovery native Kubernetes. Resource API Service deklaratif mendaftarkan layanan backend ke CoreDNS. Layanan backend contoh menyediakan beberapa titik akhir WebSocket. Terapkan konfigurasi YAML berikut di kluster ACK Anda:
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: Rutekan traffic WebSocket
Tambahkan kluster ACK sebagai sumber layanan untuk gateway, lalu tambahkan layanan Sockbin.
Tambahkan sumber layanan
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway tersebut.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Source.
-
Klik Add Source, konfigurasikan parameter berikut, lalu klik OK.
Parameter
Deskripsi
Source Type
Pilih Container Service.
ACK/ACK Serverless Cluster
Pilih kluster tempat layanan backend Anda dideploy.
Listen to Kubernetes Ingress
Jika Anda mengaktifkan opsi ini, gateway cloud-native MSE secara otomatis mendengarkan perubahan pada resource Ingress dan menerapkan konfigurasi nama domain serta rute yang didefinisikan dalam resource tersebut.
Jika Anda menonaktifkan opsi ini, gateway berhenti mendengarkan resource Ingress, dan semua konfigurasi yang sebelumnya diterapkan dari resource tersebut menjadi tidak valid.
CatatanNama domain dan rute yang Anda konfigurasikan secara manual di Konsol MSE memiliki prioritas lebih tinggi dibandingkan konfigurasi dari resource Ingress.
Tambahkan layanan
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway tersebut.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.
-
Klik Create Service, konfigurasikan parameter berikut, lalu klik OK.
Parameter
Deskripsi
Service Sources
Pilih Container Service.
Namespaces
Pilih namespace dari kluster target.
Services
Pilih layanan Anda dari daftar.
Tambahkan rute Sockbin
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway tersebut.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Routes.
-
Klik Add Route, konfigurasikan parameter berikut, lalu klik Save and Advertise.
Parameter
Deskripsi
Route Name
Masukkan
sockbin-route.Domain Name
Pilih nama domain default *.
Path
Untuk kondisi pencocokan, pilih Prefix. Untuk nilai path, masukkan
/.Scenario
Pilih Single Service.
Backend Service
Pilih target Service dan Service Port.
Verifikasi hasil
Anda dapat menggunakan salah satu metode berikut untuk memverifikasi bahwa layanan WebSocket tersedia.
Metode 1: Uji dengan UI Sockbin
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway tersebut.
-
Di halaman Overview gateway, buka tab Gateway Ingress. Temukan titik akhir publik instans Server Load Balancer (SLB) terkait dan buka di browser.
Gateway merutekan permintaan ke UI layanan Sockbin berdasarkan nama domain dan path dalam handshake WebSocket.
Output: CONNECTING to / ... CONNECTED to / SENT: Hello Sockbin! RESPONSE: { "timestamp": "Tue May 31 2022 07:49:41 GMT+0000 (UTC)", "url": "http://sockb.in/", "reqData": "Hello Sockbin!" }
Metode 2: Uji dengan client WebSocket
Sebagai contoh, Anda dapat menggunakan client WebSocket Python untuk menerima respons server dengan penundaan 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())