WebSocket adalah protokol komunikasi yang menyediakan saluran komunikasi full-duplex melalui satu koneksi Transmission Control Protocol (TCP). Protokol ini berada di lapisan aplikasi dalam model Open Systems Interconnection (OSI) dan memungkinkan server mendorong data ke klien. Layanan yang sesuai dengan protokol ini disebut layanan WebSocket. Topik ini menjelaskan cara menggunakan ingress gateway untuk mengakses layanan WebSocket di instance Service Mesh (ASM).
Prasyarat
Langkah 1: Terapkan aplikasi sampel
Gunakan kubectl untuk terhubung ke cluster Container Service for Kubernetes (ACK). Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig dari cluster dan gunakan kubectl untuk terhubung ke cluster.
Gunakan konten berikut untuk membuat file YAML bernama tornado:
apiVersion: v1 kind: Service metadata: name: tornado labels: app: tornado service: tornado spec: ports: - port: 8888 name: http selector: app: tornado --- apiVersion: apps/v1 kind: Deployment metadata: name: tornado spec: replicas: 1 selector: matchLabels: app: tornado version: v1 template: metadata: labels: app: tornado version: v1 spec: containers: - name: tornado image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/tornado:lastest imagePullPolicy: Always ports: - containerPort: 8888 ---Jalankan perintah berikut untuk membuat aplikasi tornado:
kubectl apply -f tornado.yaml
Langkah 2: Konfigurasikan aturan routing
Masuk ke Konsol ASM.
Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance atau tombol Manage di kolom Actions.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri. Pada halaman yang muncul, klik Create from YAML.
Pada halaman Buat, pilih default dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: tornado-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"Atur parameter
numbermenjadi80. Dengan cara ini, layanan WebSocket dapat menerima trafik masuk atau keluar HTTP dan TCP melalui port 80.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri. Pada halaman yang muncul, klik Create from YAML.
Pada halaman Buat, pilih default dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: tornado spec: hosts: - "*" gateways: - tornado-gateway http: - match: - uri: prefix: / route: - destination: host: tornado weight: 100Atur parameter
hostsmenjadi*. Dengan cara ini, semua permintaan dapat mengakses layanan WebSocket.
Langkah 3: Periksa alamat IP dari ingress gateway
Metode 1: menggunakan Konsol ASM
Masuk ke Konsol ASM. Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih .
Pada halaman Ingress Gateway, peroleh Service address.
Metode 2: menggunakan Konsol ACK
Masuk ke Konsol ACK. Di panel navigasi sisi kiri, klik Clusters.
Pada halaman Clusters, temukan cluster yang diinginkan dan klik namanya. Di panel sisi kiri, pilih .
Pada halaman Services, pilih istio-system dari daftar drop-down Namespace. Di kolom External IP, lihat alamat IP port 80 untuk istio-ingressgateway.
Langkah 4: Gunakan ingress gateway untuk mengakses layanan WebSocket
Masukkan http://<alamat IP ingress gateway> di bilah alamat empat browser berbeda.

Jalankan perintah berikut untuk mengakses layanan WebSocket:
curl "http://<alamat IP ingress gateway>/api?id=8&value=300"curl "http://<alamat IP ingress gateway>/api?id=5&value=600"curl "http://<alamat IP ingress gateway>/api?id=1&value=200"curl "http://<alamat IP ingress gateway>/api?id=3&value=290"Lihat data layanan WebSocket di empat browser. Data layanan WebSocket di empat browser diperbarui pada saat yang sama, dan data yang sama ditampilkan.
Langkah 5: Beralih ke protokol WebSocket Secure (wss)
Buat sertifikat server dan kunci privat untuk ingress gateway. Untuk informasi lebih lanjut, lihat Langkah 1: Siapkan sertifikat server dan kunci privat untuk beberapa server.
Pastikan rahasia yang berisi sertifikat server dan kunci privat dibuat di namespace istio-system dari cluster ACK, dan rahasia tersebut diberi nama myexample-credential.
Ubah aturan routing yang dibuat di Langkah 2: Konfigurasikan Aturan Routing.
Contoh file YAML:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: tornado-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: credentialName: myexample-credential mode: SIMPLE
Langkah 6: Gunakan protokol wss untuk mengakses layanan WebSocket
Ubah file hosts di komputer Anda untuk menyelesaikan nama domain a.aliyun.com ke alamat IP ingress gateway. Pastikan Anda dapat menggunakan nama domain dalam sertifikat yang dibuat di sublangkah 1 Langkah 5 untuk mengakses ingress gateway.
Masukkan https://a.aliyun.com di bilah alamat empat browser berbeda.

Jalankan perintah berikut untuk mengakses layanan WebSocket:
curl -k "https://<alamat IP ingress gateway>/api?id=8&value=300"curl -k "https://<alamat IP ingress gateway>/api?id=5&value=600"curl -k "https://<alamat IP ingress gateway>/api?id=1&value=200"curl -k "https://<alamat IP ingress gateway>/api?id=3&value=290"Lihat data layanan WebSocket di empat browser. Data layanan WebSocket di empat browser diperbarui pada saat yang sama, dan data yang sama ditampilkan.