All Products
Search
Document Center

Container Service for Kubernetes:Menyebarkan Layanan gRPC di Knative

Last Updated:Jul 06, 2025

Jika Layanan Knative Anda mengadopsi sistem terdistribusi atau arsitektur layanan mikro, Anda dapat menggunakan protokol gRPC untuk meningkatkan efisiensi komunikasi antara klien dan server. ACK Knative mendukung protokol HTTP dan HTTP/2, termasuk gRPC. Anda dapat menyebarkan Layanan gRPC dalam file YAML dari Layanan Knative, dan gateway Knative akan secara otomatis menerapkan pengalihan gRPC.

Prasyarat

Knative telah diterapkan di kluster Anda. Untuk informasi lebih lanjut, lihat Menyebarkan dan mengelola Knative.

Langkah 1: Menyebarkan Layanan gRPC

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster yang ingin dikelola dan pilih Applications > Knative di panel navigasi sebelah kiri.

  3. Di halaman Knative, klik tab Services. Atur Namespace menjadi default, klik Create from Template, lalu pilih Custom dari daftar drop-down Sample Template. Salin konten berikut ke editor template dan 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 # Gambar ini berisi alat yang digunakan untuk menguji gRPC dengan menyediakan Layanan gRPC untuk merespons permintaan. 
            env:
            - name: TARGET
              value: "Knative"
            ports:
            - containerPort: 9000
              name: h2c # Tetapkan nama Layanan gRPC di bagian port Knative menjadi h2c. 
              protocol: TCP
  4. Tambahkan pemetaan ke file Hosts. Peta nama domain default di kolom Default Domain ke alamat gateway di kolom Gateway pada tab Layanan.

    Temukan file Hosts di mesin Anda dan tambahkan pemetaan ke file tersebut. Format pemetaan adalah Alamat Gateway + Karakter Spasi + Nama Domain Default. Gunakan nama domain default untuk mengakses Layanan gRPC.

    Contoh:

    121.xx.xxx.xx helloworld-grpc.default.example.com

Langkah 2: Verifikasi ketersediaan Layanan gRPC

  1. Kunjungi grpcbin dan instal BloomRPC yang sesuai untuk OS Anda.

  2. Salin konten berikut ke file gRPC.proto dan simpan file tersebut ke mesin lokal:

    syntax = "proto3";
    
    package grpcbin;
    
    service GRPCBin {
      rpc Index(EmptyMessage) returns (IndexReply) {}
      // Tentukan metode RPC yang mengambil pesan kosong sebagai input dan mengembalikan pesan kosong sebagai output. 
      rpc Empty(EmptyMessage) returns (EmptyMessage) {}
      // Tentukan metode RPC yang mengambil pesan dummy sebagai input dan mengembalikan pesan dummy sebagai output. 
      rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
      // Tentukan metode RPC yang mengambil pesan dummy sebagai input dan mengembalikan aliran pesan dummy (10 pesan) sebagai output. 
      rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
      // Tentukan metode RPC yang mengambil aliran pesan dummy (10 pesan) sebagai input dan mengembalikan pesan dummy sebagai output. 
      rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
      // Tentukan metode RPC yang mengambil aliran pesan dummy sebagai input dan mengembalikan aliran pesan dummy sebagai output. 
      rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
      // Tentukan metode RPC yang mengembalikan pesan kesalahan gRPC tertentu. 
      rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
      // Tentukan metode RPC yang mengembalikan pesan kesalahan acak.
      rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
      // Tentukan metode RPC yang mengembalikan header. 
      rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
      // Tentukan 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. Jalur Layanan gRPC adalah {Nama Paket}.{Nama Layanan}/{Nama Metode}. Anda dapat mengonfigurasi gateway Knative untuk mengarahkan paket gRPC dengan menyetel bidang Path ke jalur di atas. Sebagai contoh, atur bidang Path ke grpcbin.GRPCBin/Index jika Anda menggunakan gRPC untuk mengakses GRPCBin Index melalui HTTP/2.

  3. Gunakan BloomRPC untuk memverifikasi ketersediaan Layanan gRPC. Layanan gRPC tersedia jika server mengembalikan respons normal.

    1. Impor file gRPC.proto ke BloomRPC.

    2. Di panel navigasi sebelah kiri, klik metode DummyUnary dan tentukan Nama Domain:Port di bagian atas halaman. Contoh: helloworld-grpc.default.example.com:80.

    3. Klik tombol hijau dan periksa apakah respons yang dikembalikan oleh server normal.

Referensi

Anda dapat mengonfigurasi sertifikat untuk mengakses Layanan melalui HTTPS menggunakan nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasikan Sertifikat untuk Mengakses Layanan melalui HTTPS.