Untuk mengekspos aplikasi gRPC di kluster ACK ke klien eksternal, konfigurasikan NGINX Ingress dengan anotasi nginx.ingress.kubernetes.io/backend-protocol: "GRPC". Karena gRPC berjalan di atas HTTP/2, TLS wajib diaktifkan pada Ingress.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACK dengan NGINX Ingress Controller yang telah diinstal
kubectl yang telah dikonfigurasi untuk terhubung ke kluster. Lihat Hubungkan ke kluster ACK melalui kubectl
Nama domain untuk traffic gRPC (tutorial ini menggunakan
grpc.example.com)Sertifikat TLS untuk domain tersebut (dibeli dari Certificate Authority (CA) atau sertifikat tanda tangan sendiri untuk pengujian)
Cara kerja
Ketika klien mengirim permintaan gRPC ke titik akhir Ingress, NGINX:
Mengakhiri TLS dan mendekripsi traffic.
Meneruskan traffic gRPC yang telah didekripsi (melalui HTTP/2) ke Pod backend pada Port 50051.
Mengembalikan respons gRPC ke klien.
Konfigurasi utama adalah anotasi backend-protocol: "GRPC", yang memberi tahu Ingress controller untuk menggunakan gRPC alih-alih HTTP saat melakukan proxy ke backend:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grpc-ingress
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # Proxy traffic sebagai gRPC (HTTP/2)
spec:
tls:
- hosts:
- grpc.example.com # Ganti dengan domain Anda
secretName: nginx-ingress-tls
rules:
- host: grpc.example.com # Ganti dengan domain Anda
# ...Langkah 2: Simpan sertifikat TLS sebagai Secret
gRPC berjalan di atas HTTP/2, yang mewajibkan TLS pada Ingress. Simpan sertifikat dan kunci privat Anda dalam Secret Kubernetes agar Ingress controller dapat menggunakannya.
Dapatkan sertifikat TLS untuk domain Anda:
Produksi: Beli sertifikat dari Certificate Authority (CA) tepercaya. Jika Anda membelinya melalui Alibaba Cloud, unduh file sertifikat.
Pengujian: Buat sertifikat tanda tangan sendiri.
Buat Secret bernama
nginx-ingress-tlsuntuk menyimpan sertifikat dan kunci privat.Konsol
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Secrets, pilih namespace
defaultdan klik Create di pojok kiri atas. Pada panel yang muncul, konfigurasikan Secret baru lalu klik OK.Name nginx-ingress-tlsType TLS Certificate Di bawah + Add, masukkan sertifikat dan kunci privat:
Certificates: Konten lengkap file sertifikat (
.crtatau.pem).Key: Konten lengkap file kunci privat (
.key).
kubectl
Ganti
<PUBLIC_CERT>dan<PRIVATE_KEY>dengan path ke file sertifikat dan file kunci privat Anda:# --cert: file sertifikat (.crt atau .pem) # --key: file kunci privat (.key) kubectl create secret tls nginx-ingress-tls --cert <PUBLIC_CERT> --key <PRIVATE_KEY>
Langkah 3: Konfigurasikan Ingress untuk mengekspos layanan
Masuk ke Konsol ACK dan klik nama kluster. Di panel navigasi kiri, pilih Add-ons.
Cari NGINX Ingress Controller dan klik Install atau Upgrade pada kartu add-on.
Konfigurasikan Ingress untuk mengarahkan traffic gRPC ke layanan backend.
Konsol
Di panel navigasi kiri, pilih . Pilih namespace
defaultdan klik Create Ingress.Konfigurasikan Ingress dengan pengaturan berikut, lalu klik OK:
Gateway Type Nginx IngressName grpc-ingressDomain Name grpc.example.comDi bawah Mappings, atur:
Mappings /Match Rule Prefix (Prefix-based match)Service grpc-servicePort 50051Di bawah TLS settings, aktifkan opsi tersebut dan atur:
Domain Name grpc.example.comSecrets nginx-ingress-tlsDi bawah Annotations, tambahkan:
nginx.ingress.kubernetes.io/backend-protocolGRPCPada halaman Ingresses, temukan Ingress baru dan catat Endpoint-nya.
Dibutuhkan sekitar 10 detik agar NGINX Ingress berlaku. Jika endpoint belum muncul, tunggu dan klik refresh. Jika masih belum muncul, klik nama Ingress dan periksa tab Events untuk memecahkan masalah.
kubectl
Buat file bernama
grpc-ingress.yaml:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grpc-ingress annotations: # Proxy traffic sebagai gRPC (HTTP/2) ke backend nginx.ingress.kubernetes.io/backend-protocol: "GRPC" spec: ingressClassName: nginx tls: - hosts: - grpc.example.com # Ganti dengan domain Anda secretName: nginx-ingress-tls # Secret yang dibuat pada langkah sebelumnya rules: - host: grpc.example.com # Ganti dengan domain Anda http: paths: - path: / pathType: Prefix backend: service: name: grpc-service port: number: 50051Terapkan Ingress:
kubectl apply -f grpc-ingress.yamlDapatkan 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 pengaturan
Tambahkan entri ke file
hostslokal Anda untuk mengarahkan domain contoh ke alamat IP Ingress: Tambahkan baris berikut, ganti<ADDRESS>dengan IP aktual:macOS/Linux: Edit
/etc/hostsdengansudo vi /etc/hostsWindows: Buka
C:\Windows\System32\drivers\etc\hostsdi Notepad (jalankan sebagai administrator)
<ADDRESS> grpc.example.comInstal grpcurl, lalu panggil metode
SayHello:grpcurl -d '{"name": "gRPC"}' grpc.example.com:443 helloworld.Greeter/SayHelloTanggapan yang diharapkan:
{ "message": "Hello gRPC" }
Batasan
Routing berbasis bobot tidak didukung untuk gRPC. Karena koneksi gRPC bersifat long-lived, NGINX Ingress tidak mendukung routing berbasis bobot layanan (service-weight) untuk backend gRPC.
FAQ
Bagaimana cara membuat sertifikat tanda tangan sendiri untuk pengujian?
Gunakan openssl untuk membuat sertifikat tanda tangan sendiri 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"Sertifikat tanda tangan sendiri tidak dipercaya secara default oleh browser atau klien gRPC. Jangan gunakan sertifikat tanda tangan sendiri di lingkungan produksi.
Apa perbedaan antara SSL dan TLS?
Transport Layer Security (TLS) adalah pengganti modern dari protokol Secure Sockets Layer (SSL) yang lebih lama dan sudah tidak digunakan lagi. Dalam praktiknya, istilah "sertifikat SSL" sering digunakan secara umum untuk merujuk pada sertifikat TLS.