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:
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.
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 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.
Dapatkan sertifikat TLS untuk domain Anda:
Produksi: Beli sertifikat dari Certificate Authority (CA) tepercaya. Untuk sertifikat Alibaba Cloud, unduh file sertifikat.
Pengujian: Buat sertifikat self-signed.
Buat Secret bernama
nginx-ingress-tlsuntuk menyimpan sertifikat dan kunci privat.Konsol
Masuk ke Konsol ACK atau . Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Secrets, pilih namespace
defaultlalu klik Create. Konfigurasikan Secret dan 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_CERTdanPRIVATE_KEYdengan 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
Masuk ke Konsol ACK dan klik nama kluster. Di panel navigasi kiri, pilih Add-ons.
Cari NGINX Ingress Controller lalu klik Install atau Upgrade.
Catatan: Versi sebelum v1.2 tidak lagi didukung. Lakukan upgrade ke versi terbaru.
Konfigurasikan Ingress untuk mengarahkan traffic gRPC ke layanan backend.
Konsol
Di panel navigasi kiri, pilih . Pilih namespace
defaultlalu klik Create Ingress.Konfigurasikan Ingress seperti 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, 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
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: 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 konfigurasi
Tambahkan IP Ingress ke file
hostsAnda. GantiADDRESSdengan IP aktual:macOS/Linux: Edit
/etc/hostsdengansudo vi /etc/hosts.Windows: 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. 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"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.