Kerangka Google Remote Procedure Call (gRPC) menggunakan protokol HTTP/2 dan mendukung fitur seperti streaming dua arah, kompresi header, serta multiplexing. Hal ini meningkatkan efisiensi transmisi jaringan. Topik ini menjelaskan cara menerapkan aplikasi gRPC di kluster Container Service for Kubernetes (ACK) dan menggunakan gateway cloud-native untuk mengarahkan permintaan aplikasi gRPC.
Prasyarat
Gateway cloud-native telah dibuat. Untuk informasi lebih lanjut, lihat Buat Gateway Cloud-Native MSE.
Kluster ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola.
Langkah 1: Terapkan aplikasi gRPC di kluster ACK
Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat Aplikasi Tanpa Status dengan Menggunakan Deployment.
Dalam contoh ini, kluster ACK digunakan untuk penemuan layanan. Layanan backend didaftarkan ke CoreDNS menggunakan API layanan berbasis anotasi. Contoh ini menggunakan aplikasi bernama grpcbin sebagai layanan backend untuk mengimplementasikan beberapa layanan gRPC. Kode berikut menunjukkan konfigurasi sumber daya yang digunakan oleh aplikasi grpcbin di kluster ACK.
nama dari layanan gRPC di bidang port layanan Kubernetes harus mengandung grpc.
apiVersion: apps/v1
kind: Deployment
metadata:
name: grpcbin
spec:
replicas: 1
selector:
matchLabels:
app: grpcbin
template:
metadata:
labels:
app: grpcbin
spec:
serviceAccountName: grpcbin
containers:
- image: docker.io/moul/grpcbin
imagePullPolicy: IfNotPresent
name: grpcbin
ports:
- containerPort: 9000
- containerPort: 9001
resources:
requests:
cpu: '1'
memory: 2Gi
limit:
cpu: '1'
memory: 2Gi
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: grpcbin
---
apiVersion: v1
kind: Service
metadata:
name: grpcbin-grpc
labels:
app: grpcbin
spec:
ports:
- name: grpc
port: 9000
targetPort: 9000
selector:
app: grpcbinKode berikut menunjukkan definisi proto untuk layanan gRPC.
syntax = "proto3";
package grpcbin;
service GRPCBin {
rpc Index(EmptyMessage) returns (IndexReply) {}
// Metode yang dipanggil tanpa parameter yang ditentukan. Respons kosong dikembalikan setelah pemanggilan.
rpc Empty(EmptyMessage) returns (EmptyMessage) {}
// Parameter permintaan dikembalikan.
rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
// Panggilan streaming dimulai untuk respons, dan 10 pesan respons dikembalikan.
rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
// Panggilan streaming dimulai untuk permintaan, 10 permintaan diterima, dan badan permintaan terakhir dikembalikan.
rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
// Metode streaming yang digunakan untuk permintaan dan respons.
rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
// Setelah metode ini dipanggil, kesalahan gRPC tertentu dikembalikan.
rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
// Setelah metode ini dipanggil, kesalahan acak dikembalikan.
rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
// Setelah metode ini dipanggil, header dikembalikan.
rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
// Setelah metode ini dipanggil, tidak ada respons yang dikembalikan.
rpc NoResponseUnary(EmptyMessage) returns (EmptyMessage) {}
}
message HeadersMessage {
message Values {
repeated string values = 1;
}
map<string, Values> Metadata = 1;
}
message SpecificErrorRequest {
uint32 code = 1;
string reason = 2;
}
message EmptyMessage {}
message DummyMessage {
message Sub {
string f_string = 1;
}
enum Enum {
ENUM_0 = 0;
ENUM_1 = 1;
ENUM_2 = 2;
}
string f_string = 1;
repeated string f_strings = 2;
int32 f_int32 = 3;
repeated int32 f_int32s = 4;
Enum f_enum = 5;
repeated Enum f_enums = 6;
Sub f_sub = 7;
repeated Sub f_subs = 8;
bool f_bool = 9;
repeated bool f_bools = 10;
int64 f_int64 = 11;
repeated int64 f_int64s= 12;
bytes f_bytes = 13;
repeated bytes f_bytess = 14;
float f_float = 15;
repeated float f_floats = 16;
}
message IndexReply {
message Endpoint {
string path = 1;
string description = 2;
}
string description = 1;
repeated Endpoint endpoints = 2;
}Lapisan bawah layanan gRPC didasarkan pada protokol HTTP/2, dan bidang Path berada dalam format {Nama paket}.{Nama layanan}/{Nama metode}. Gateway cloud-native MSE dapat menggunakan bidang Path untuk mengimplementasikan perutean gRPC. Sebagai contoh, jika Anda menggunakan gRPC untuk mengakses metode Index dari grpcbin, nilai bidang Path untuk protokol HTTP/2 adalah grpcbin.GRPCBin/Index.
Langkah 2: Gunakan gateway cloud-native untuk merutekan permintaan gRPC
Tambahkan kluster ACK sebagai sumber layanan gateway cloud-native dan tambahkan layanan grpcbin.
Tambahkan sumber layanan
Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
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.
Klik Add Source. Di panel Add Source, atur Tipe Sumber ke Container Service, konfigurasikan parameter, lalu klik OK.
Parameter
Deskripsi
ACK/ACK Serverless Cluster
Pilih kluster tempat layanan backend berjalan.
CatatanSaat membuat gateway, Anda perlu memilih VPC tempat kluster diterapkan. Dengan cara ini, saat Anda menambahkan sumber layanan, kluster di VPC ini secara otomatis diperoleh.
Listen to Kubernetes Ingress
Jika Anda mengaktifkan saklar ini, gateway cloud-native secara otomatis mendengarkan perubahan sumber daya Ingress, dan konfigurasi nama domain dan rute yang didengar dari sumber daya Ingress berlaku.
Jika Anda menonaktifkan saklar ini, gateway cloud-native tidak lagi mendengarkan perubahan sumber daya Ingress, dan membuat konfigurasi nama domain dan rute yang didengar dari sumber daya Ingress menjadi tidak efektif. Berhati-hatilah saat melakukan operasi ini.
PentingPrioritas nama domain dan rute yang dikonfigurasi secara manual di konsol MSE lebih tinggi daripada prioritas nama domain dan rute sumber daya Ingress yang didengar oleh gateway cloud-native.
Ingress Class
Kelas Ingress yang terkait dengan sumber daya Ingress.
Jika Anda tidak menentukan parameter ini, gateway cloud-native memantau semua sumber daya Ingress di kluster.
Jika Anda menentukan kelas Ingress untuk parameter ini, gateway cloud-native memantau sumber daya Ingress yang memiliki anotasi
classatau nilaiSpec.IngressClassNamesama dengan nilai yang dikonfigurasi. Anda tidak dapat menentukan beberapa kelas Ingress untuk parameter ini. Jika Anda mengatur parameter ini kenginx, gateway cloud-native mendengarkan sumber daya Ingress yang IngressClass-nya adalahnginxatau sumber daya Ingress yang tidak terkait dengan kelas Ingress apa pun.
Namespace
Namespace tempat sumber daya Ingress berada.
Jika Anda tidak menentukan parameter ini, gateway cloud-native mendengarkan semua sumber daya Ingress di semua namespace kluster.
Jika Anda menentukan satu namespace untuk parameter ini, gateway cloud-native mendengarkan sumber daya Ingress di namespace yang ditentukan dari kluster. Anda tidak dapat menentukan beberapa namespace untuk parameter ini sekaligus.
Update Ingress Status
Jika Anda memilih Buka untuk parameter ini, alamat IP dari Ingress yang Anda dengarkan diubah menjadi alamat IP instance Server Load Balancer (SLB) yang terkait dengan gateway cloud-native.
CatatanAnda hanya dapat menggunakan fitur ini jika versi gateway adalah 1.2.9 atau lebih baru.
Security Group Rules
Grup keamanan dikonfigurasi di kolam node kluster ACK. Dalam banyak kasus, jika komponen di luar kluster ingin mengakses layanan di kluster, Anda harus mengaktifkan semua port yang diperlukan oleh layanan di grup keamanan.
Anda dapat memodifikasi grup keamanan. Untuk informasi lebih lanjut, lihat Konfigurasikan aturan grup keamanan.
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 Tambah Layanan, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Source Type
Pilih Container Service.
Namespace
Pilih namespace kluster.
Services
Pilih satu atau lebih layanan dari bagian Layanan.
Tambahkan rute dari gateway ke layanan grpcbin
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 Add Route, konfigurasikan parameter dan klik Save and Advertise. Untuk informasi lebih lanjut, lihat Buat Rute.
Parameter
Deskripsi
Routing Rule Name
Masukkan grpc di bidang ini.
Domain name
Pilih nama domain default * dari daftar drop-down.
Path
Pilih Prefix dari daftar drop-down dan masukkan path yang dimulai dengan /grpcbin.GRPCBin.
CatatanPath layanan gRPC berada dalam format {Nama paket}.{Nama layanan}/{Nama metode}. Anda dapat mengonfigurasi awalan rute yang diperlukan.
Scenario
Pilih Single Service untuk rute.
Backend Service
Tentukan layanan dan konfigurasikan parameter Port Layanan.
Verifikasi hasil
Gunakan bloomrpc untuk menguji ketersediaan layanan gRPC. Jika respons dikembalikan, layanan gRPC tersedia.
Anda juga dapat menggunakan klien gRPC lainnya untuk pengujian.