All Products
Search
Document Center

Container Service for Kubernetes:Konfigurasikan Nginx Ingress untuk gRPC

Last Updated:Jun 16, 2026

Untuk aplikasi gRPC yang diterapkan di kluster ACK, konfigurasikan Nginx Ingress dengan menambahkan anotasi nginx.ingress.kubernetes.io/backend-protocol: "GRPC" guna mengarahkan traffic gRPC dan mengaktifkan akses klien eksternal.

Prasyarat

Pastikan hal-hal berikut:

  • Kluster ACK dengan NGINX Ingress Controller yang telah diinstal.

  • kubectl terhubung ke kluster.

  • Nama domain untuk traffic gRPC (misalnya, grpc.example.com).

  • Sertifikat TLS untuk domain tersebut (ditandatangani CA atau self-signed untuk pengujian).

Cara kerja

Saat klien mengirim permintaan gRPC ke titik akhir Ingress, NGINX:

  1. Mengakhiri TLS dan mendekripsi traffic.

  2. Meneruskan traffic gRPC yang telah didekripsi (melalui HTTP/2) ke Pod backend pada Port 50051.

  3. Mengembalikan respons gRPC ke klien.

Anotasi backend-protocol: "GRPC" memberi tahu Ingress controller untuk memproksi traffic sebagai gRPC, bukan HTTP:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grpc-ingress
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"  # Proxy traffic as gRPC (HTTP/2)
spec:
  tls:
  - hosts:
    - grpc.example.com          # Replace with your domain
    secretName: nginx-ingress-tls
  rules:
  - host: grpc.example.com      # Replace with your domain
  # ...

Langkah 1: Terapkan aplikasi gRPC contoh

Konsol

  1. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  2. Pada halaman Deployments, klik Create from YAML. Tempel YAML berikut dan klik Create.

    YAML aplikasi contoh

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: grpc-service
      template:
        metadata:
          labels:
            run: grpc-service
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/grpc-server:latest
            imagePullPolicy: Always
            name: grpc-service
            ports:
            - containerPort: 50051
              protocol: TCP
          restartPolicy: Always
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grpc-service
    spec:
      ports:
      - port: 50051
        protocol: TCP
        targetPort: 50051
      selector:
        run: grpc-service
      sessionAffinity: None
      type: NodePort
  3. Pada dialog, klik View dan verifikasi bahwa Pod berstatus Running.

kubectl

  1. Buat file grpc.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: grpc-service
      template:
        metadata:
          labels:
            run: grpc-service
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/grpc-server:latest
            imagePullPolicy: Always
            name: grpc-service
            ports:
            - containerPort: 50051
              protocol: TCP
          restartPolicy: Always
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grpc-service
    spec:
      ports:
      - port: 50051
        protocol: TCP
        targetPort: 50051
      selector:
        run: grpc-service
      type: NodePort
  2. Terapkan aplikasi:

    kubectl apply -f grpc.yaml

Aplikasi contoh ini mengekspos layanan Greeter dengan satu RPC unary, yaitu SayHello:

Definisi antarmuka aplikasi contoh gRPC

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Lihat contoh layanan gRPC.

Langkah 2: Simpan sertifikat TLS sebagai Secret

Nginx Ingress memerlukan TLS untuk mengaktifkan HTTP/2, yang merupakan prasyarat gRPC. Simpan sertifikat TLS dan kunci privat Anda dalam Secret Kubernetes agar dapat digunakan oleh Ingress controller.

  1. Dapatkan sertifikat TLS untuk domain Anda:

  2. Buat Secret bernama nginx-ingress-tls untuk menyimpan sertifikat dan kunci privat.

    Konsol

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

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Configurations > Secrets.

    3. Pada halaman Secrets, pilih namespace default lalu klik Create. Konfigurasikan Secret dan klik OK.

      Name

      nginx-ingress-tls

      Type

      TLS Certificate

      Di bawah + Add, masukkan sertifikat dan kunci privat:

      • Certificates: Konten lengkap file sertifikat (.crt atau .pem).

      • Key: Konten lengkap file kunci privat (.key).

    kubectl

    Ganti PUBLIC_CERT dan PRIVATE_KEY dengan path file sertifikat dan kunci Anda:

    # --cert: certificate file (.crt or .pem)
    # --key:  private key file (.key)
    kubectl create secret tls nginx-ingress-tls --cert PUBLIC_CERT --key PRIVATE_KEY

Langkah 3: Konfigurasikan Ingress untuk mengekspos layanan

  1. Masuk ke Konsol ACK dan klik nama kluster. Di panel navigasi kiri, pilih Add-ons.

  2. Cari NGINX Ingress Controller lalu klik Install atau Upgrade.

    Catatan: Versi sebelum v1.2 tidak lagi didukung. Lakukan upgrade ke versi terbaru.
  3. Konfigurasikan Ingress untuk mengarahkan traffic gRPC ke layanan backend.

    Konsol

    1. Di panel navigasi kiri, pilih Network > Ingresses. Pilih namespace default lalu klik Create Ingress.

    2. Konfigurasikan Ingress seperti berikut, lalu klik OK:

      Gateway Type

      Nginx Ingress

      Name

      grpc-ingress

      Domain Name

      grpc.example.com

      Di bawah Mappings, atur:

      Mappings

      /

      Match Rule

      Prefix (Prefix-based match)

      Service

      grpc-service

      Port

      50051

      Di bawah TLS settings, aktifkan opsi tersebut dan atur:

      Domain Name

      grpc.example.com

      Secrets

      nginx-ingress-tls

      Di bawah Annotations, tambahkan:

      nginx.ingress.kubernetes.io/backend-protocol

      GRPC

    3. Pada halaman Ingresses, catat Endpoint dari Ingress baru.

      Ingress membutuhkan waktu sekitar 10 detik untuk aktif. Jika endpoint tidak muncul setelah refresh, periksa tab Events untuk mengatasi masalah.

    kubectl

    1. Buat file grpc-ingress.yaml:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: grpc-ingress
        annotations:
          # Proxy traffic as gRPC (HTTP/2) to the backend
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
      spec:
        ingressClassName: nginx
        tls:
        - hosts:
          - grpc.example.com             # Replace with your domain
          secretName: nginx-ingress-tls  # The Secret created in the previous step
        rules:
        - host: grpc.example.com         # Replace with your domain
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: grpc-service
                  port:
                    number: 50051
    2. Terapkan Ingress:

      kubectl apply -f grpc-ingress.yaml
    3. Dapatkan alamat Endpoint. Jika tidak ada alamat yang dikembalikan, tunggu 10 detik lalu coba lagi:

      ADDRESS=$(kubectl get ingress grpc-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      echo $ADDRESS

Langkah 4: Verifikasi konfigurasi

  1. Tambahkan IP Ingress ke file hosts Anda. Ganti ADDRESS dengan IP aktual:

    • macOS/Linux: Edit /etc/hosts dengan sudo vi /etc/hosts.

    • Windows: Buka C:\Windows\System32\drivers\etc\hosts di Notepad (jalankan sebagai administrator).

    ADDRESS grpc.example.com
  2. Instal grpcurl, lalu panggil metode SayHello:

    grpcurl -d '{"name": "gRPC"}' grpc.example.com:443 helloworld.Greeter/SayHello

    Tanggapan yang diharapkan:

    {
      "message": "Hello gRPC"
    }

Batasan

Routing berbasis bobot tidak didukung untuk gRPC. gRPC menggunakan koneksi berdurasi panjang yang tidak kompatibel dengan anotasi service-weight pada Nginx Ingress.

FAQ

Bagaimana cara membuat sertifikat self-signed untuk pengujian?

Gunakan openssl untuk membuat sertifikat self-signed dan kunci privat yang berlaku selama 365 hari:

openssl req -x509 -newkey rsa:2048 -keyout grpc.key -out grpc.crt -days 365 -nodes \
  -subj "/CN=grpc.example.com" \
  -addext "subjectAltName=DNS:grpc.example.com"
Penting

Sertifikat self-signed tidak dipercaya secara default oleh browser atau klien gRPC. Jangan gunakan sertifikat tersebut di lingkungan produksi.

Apa perbedaan antara SSL dan TLS?

Transport Layer Security (TLS) adalah penerus modern dari Secure Sockets Layer (SSL) yang sudah tidak digunakan lagi. Dalam praktiknya, istilah "sertifikat SSL" secara umum merujuk pada sertifikat TLS.

Langkah selanjutnya