Jika layanan Knative Anda menggunakan sistem terdistribusi atau arsitektur microservices, Anda dapat memanfaatkan protokol gRPC untuk meningkatkan efisiensi komunikasi antara klien dan server. ACK Knative mendukung protokol HTTP dan HTTP/2, termasuk gRPC.
Prasyarat
Knative telah dideploy di kluster Anda. Untuk informasi selengkapnya, lihat Deploy and manage Knative components.
Langkah 1: Deploy a gRPC Service
-
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster yang ingin Anda kelola, lalu pilih di panel navigasi sebelah kiri.
Pada halaman Knative, klik tab Services. Atur Namespace menjadi default, klik Buat dengan Template, lalu pilih Custom dari daftar drop-down Sampel Template. Salin konten berikut ke editor templat, lalu klik Create untuk membuat layanan Knative bernama helloworld-grpc.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-grpc spec: template: metadata: annotations: autoscaling.knative.dev/class: mpa.autoscaling.knative.dev spec: containers: - image: docker.io/moul/grpcbin # Image ini berisi tool yang digunakan untuk menguji gRPC dengan menyediakan layanan gRPC yang merespons permintaan. env: - name: TARGET value: "Knative" ports: - containerPort: 9000 name: h2c # Tetapkan nama layanan gRPC di bagian port Knative menjadi h2c. protocol: TCPTambahkan pemetaan ke file Hosts. Petakan nama domain default pada kolom Default Domain ke alamat gateway pada kolom Gateway di tab Services.
Cari file Hosts di mesin Anda dan tambahkan pemetaan tersebut ke file Hosts. Format pemetaannya harus berupa Alamat Gateway + Karakter spasi + Nama domain default. Setelah itu, gunakan nama domain default untuk mengakses layanan gRPC.
Contoh:
121.xx.xxx.xx helloworld-grpc.default.example.com
Langkah 2: Verifikasi ketersediaan layanan gRPC
Buka grpcbin dan instal BloomRPC yang sesuai dengan sistem operasi Anda.
Salin konten berikut ke file
gRPC.protodan simpan file tersebut di mesin lokal Anda:syntax = "proto3"; package grpcbin; service GRPCBin { rpc Index(EmptyMessage) returns (IndexReply) {} // Definisikan metode RPC yang menerima pesan kosong sebagai input dan mengembalikan pesan kosong sebagai output. rpc Empty(EmptyMessage) returns (EmptyMessage) {} // Definisikan metode RPC yang menerima pesan dummy sebagai input dan mengembalikan pesan dummy sebagai output. rpc DummyUnary(DummyMessage) returns (DummyMessage) {} // Definisikan metode RPC yang menerima pesan dummy sebagai input dan mengembalikan aliran pesan dummy (10 pesan) sebagai output. rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {} // Definisikan metode RPC yang menerima aliran pesan dummy (10 pesan) sebagai input dan mengembalikan pesan dummy sebagai output. rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {} // Definisikan metode RPC yang menerima aliran pesan dummy sebagai input dan mengembalikan aliran pesan dummy sebagai output. rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {} // Definisikan metode RPC yang mengembalikan pesan berisi error gRPC tertentu. rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {} // Definisikan metode RPC yang mengembalikan pesan berisi error acak. rpc RandomError(EmptyMessage) returns (EmptyMessage) {} // Definisikan metode RPC yang mengembalikan header. rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {} // Definisikan metode RPC yang tidak mengembalikan pesan apa pun. 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; }Layanan gRPC menggunakan HTTP/2. Path layanan gRPC adalah
{Nama paket}.{Nama layanan}/{Nama metode}. Anda dapat mengonfigurasi gateway Knative untuk mengarahkan paket gRPC dengan mengatur bidangPathmenggunakan format path tersebut. Misalnya, untuk memanggil metodeIndexdalam paketgrpcbin, path-nya adalahgrpcbin.GRPCBin/Index.Gunakan BloomRPC untuk memverifikasi ketersediaan layanan gRPC. Layanan gRPC tersedia jika server mengembalikan tanggapan secara normal.
Impor file
gRPC.protoke BloomRPC.Di panel navigasi kiri, klik metode DummyUnary dan masukkan
Nama domain:Portdi bagian atas halaman. Contoh:helloworld-grpc.default.example.com:80.Klik tombol hijau dan periksa apakah tanggapan yang dikembalikan oleh server normal.
Referensi
Anda dapat mengonfigurasi Sertifikat untuk mengakses layanan melalui HTTPS menggunakan nama domain kustom. Untuk informasi selengkapnya, lihat Configure HTTPS access.