全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasikan layanan gRPC untuk NGINX Ingress

更新时间:Oct 23, 2025

Untuk memungkinkan klien eksternal mengakses aplikasi gRPC yang diterapkan di dalam kluster Container Service for Kubernetes (ACK), Anda dapat mengonfigurasi NGINX Ingress dan menambahkan anotasi nginx.ingress.kubernetes.io/backend-protocol: "GRPC" untuk merutekan lalu lintas gRPC.

Contoh konfigurasi inti

Contoh berikut menunjukkan konfigurasi inti untuk secara aman mengekspos layanan gRPC menggunakan NGINX Ingress.

  • Proksi Protokol gRPC: Anotasi backend-protocol: "GRPC" menginstruksikan pengontrol Ingress untuk memproksi lalu lintas menggunakan protokol gRPC, yang didasarkan pada HTTP/2, bukan protokol HTTP default.

  • Enkripsi TLS: Transport Layer Security (TLS) diaktifkan untuk domain sampel grpc.example.com. Lalu lintas dienkripsi menggunakan sertifikat yang disimpan dalam Secret.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grpc-ingress
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # Konfigurasi utama: Tentukan bahwa layanan backend adalah gRPC
spec:
  tls:
  - hosts:
    - grpc.example.com                                   # Ganti dengan domain layanan gRPC Anda
    secretName: nginx-ingress-tls                        # Secret yang berisi sertifikat TLS Anda.
  rules:
  - host: grpc.example.com                               # Ganti dengan domain layanan gRPC Anda
  #...

Langkah 1: Terapkan aplikasi gRPC contoh

  1. Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.

  2. Buat file bernama grpc.yaml dengan konten berikut untuk mendefinisikan layanan gRPC 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

    Layanan didefinisikan dalam file .proto berikut, bernama Greeter, yang menyediakan metode SayHello.

    Definisi Antarmuka Aplikasi Contoh gRPC

    option java_multiple_files = true;
    option java_package = "io.grpc.examples.helloworld";
    option java_outer_classname = "HelloWorldProto";
    
    package helloworld;
    
    // Definisi layanan salam
    service Greeter {
      // Mengirim salam
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    // Pesan permintaan yang berisi nama pengguna
    message HelloRequest {
      string name = 1;
    }
    
    // Pesan tanggapan yang berisi salam
    message HelloReply {
      string message = 1;
    }

    Untuk informasi lebih lanjut, lihat contoh layanan gRPC.

  3. Terapkan aplikasi gRPC.

    kubectl apply -f grpc.yaml

Langkah 2: Simpan sertifikat SSL sebagai Secret

Mengaktifkan HTTP/2, yang bergantung pada gRPC, memerlukan Anda terlebih dahulu mengaktifkan enkripsi TLS untuk Ingress Anda. Simpan sertifikat SSL dan kunci privat dalam Secret untuk manajemen yang aman. Kemudian, referensikan Secret ini untuk mengonfigurasi enkripsi TLS.

  1. Dapatkan sertifikat SSL.

  2. (Opsional) Jika Anda membeli sertifikat dari Alibaba Cloud, unduh file sertifikat SSL.

  3. Buat Secret Kubernetes untuk menyimpan sertifikat dan kunci privat Anda.

    Konsol

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

    2. Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di bilah navigasi kiri, pilih Configurations > Secrets.

    3. Di halaman Secrets, pilih namespace default, klik Create, dan konfigurasikan Secret baru di panel yang muncul. Lalu, klik OK.

      • Key: nginx-ingress-tls

      • Type: TLS Certificate

      • Klik + Add

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

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

    kubectl

    Ganti <PUBLIC_CERT> dan <PRIVATE_KEY> dengan jalur ke file sertifikat Anda (.crt atau .pem) dan file kunci privat (.key). Lalu, jalankan perintah untuk menyimpan sertifikat dan kunci privat sebagai Secret.

    # Parameter --key menentukan file kunci privat, dan parameter --cert menentukan file sertifikat.
    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 target. Di bilah navigasi kiri, pilih Add-ons.

  2. Masukkan Nginx Ingress Controller di kotak pencarian. Pada kartu add-on, klik Install atau Upgrade.

  3. Konfigurasikan Ingress. Gunakan annotations untuk menentukan bahwa protokol backend adalah gRPC dan referensikan Secret yang Anda buat.

    Konsol

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

    2. Konfigurasikan Ingress dengan parameter berikut, lalu klik OK.

      • Gateway Type: Pilih Nginx Ingress.

      • Name: grpc-ingress.

      • Domain Name: grpc.example.com.

      • Mappings

        • Path: /

        • Matching Rule: Awalan (Pencocokan Berbasis Awalan)

        • Service: grpc-service

        • Port: 50051

      • TLS Settings: Aktifkan opsi ini.

        • Domain Name: grpc.example.com

        • Secret: nginx-ingress-tls

      • Annotations

        • Name: nginx.ingress.kubernetes.io/backend-protocol

        • Value: GRPC

    3. Di halaman Ingresses, lihat Ingress baru untuk mendapatkan akses Endpoint-nya.

      Membutuhkan sekitar 10 detik agar NGINX Ingress berlaku. Lalu, klik tombol refresh untuk melihat informasi endpoint. Jika informasi endpoint tidak diperbarui, klik nama Ingress dan buka tab Events untuk memperbaiki masalah.

    kubectl

    1. Buat file bernama grpc-ingress.yaml dengan konten berikut.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: grpc-ingress
        annotations:
          # Konfigurasi utama: Tentukan bahwa protokol backend adalah gRPC
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
      spec:
        ingressClassName: nginx
        # Konfigurasikan TLS dengan mereferensikan Secret
        tls:
        - hosts:
          - grpc.example.com             # Ganti dengan domain layanan gRPC Anda
          secretName: nginx-ingress-tls  # Nama yang ditentukan untuk Secret yang dibuat pada langkah sebelumnya
        rules:
        - host: grpc.example.com         # Ganti dengan domain layanan gRPC Anda
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: grpc-service
                  port:
                    number: 50051
    2. Terapkan sumber daya Ingress.

      kubectl apply -f grpc-ingress.yaml
    3. Dapatkan alamat IP eksternal pengontrol Ingress. Mungkin butuh beberapa saat untuk alamat IP ditetapkan. Jika tidak ada alamat yang dikembalikan, tunggu 10 detik dan coba lagi.

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

Langkah 4: Akses layanan gRPC

  1. Untuk tujuan pengujian, tambahkan entri ke file hosts lokal Anda untuk memetakan domain ke alamat IP Ingress.

    • macOS/Linux: sudo vi /etc/hosts

    • Windows: Buka Notepad sebagai administrator, lalu buka file di C:\Windows\System32\drivers\etc\hosts.

    Ganti <ADDRESS> dengan Endpoint sebenarnya. Tambahkan pemetaan nama domain berikut ke akhir file dan simpan:

    <ADDRESS> grpc.example.com
  2. Instal grpcurl. Lalu, panggil antarmuka layanan gRPC.

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

Keterbatasan

Karena sifat koneksi jangka panjang gRPC, NGINX Ingress saat ini tidak mendukung perutean berdasarkan bobot layanan (service-weight) untuk backend gRPC.

Tanya Jawab Umum

Bagaimana cara menghasilkan sertifikat tanda tangan sendiri untuk pengujian?

Gunakan openssl untuk menghasilkan sertifikat tanda tangan sendiri (grpc.crt) dan kunci privat (grpc.key) yang valid selama 365 hari untuk nama domain grpc.example.com.

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 tanda tangan sendiri tidak dipercaya secara default oleh browser atau klien. Mengakses layanan yang menggunakan sertifikat tanda tangan sendiri memicu peringatan keamanan. Jangan gunakan sertifikat tanda tangan sendiri di lingkungan produksi.

Apa perbedaan antara sertifikat SSL dan sertifikat TLS?

Secure Sockets Layer (SSL) adalah protokol lama yangsudah tidak digunakan lagi dan telah digantikan oleh protokol TLS yang lebih aman.

Dalam terminologi modern, "sertifikat SSL" sering digunakan secara umum untuk merujuk pada apa yang secara teknis merupakan "sertifikat TLS".

Referensi