全部产品
Search
文档中心

Microservices Engine:Mengarahkan permintaan aplikasi gRPC berdasarkan gateway cloud-native

更新时间:Jul 02, 2025

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

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.

Catatan

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: grpcbin

Kode 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

  1. Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Source.

  4. 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.

    Catatan

    Saat 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.

    Penting

    Prioritas 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 class atau nilai Spec.IngressClassName sama dengan nilai yang dikonfigurasi. Anda tidak dapat menentukan beberapa kelas Ingress untuk parameter ini. Jika Anda mengatur parameter ini ke nginx, gateway cloud-native mendengarkan sumber daya Ingress yang IngressClass-nya adalah nginx atau 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.

    Catatan

    Anda 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

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.

  4. 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

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.

  3. Di panel navigasi kiri, klik Routes. Lalu, klik tab Routes.

  4. 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.

    Catatan

    Path 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.测试gRPC服务可用性