Anda dapat menggunakan ASM Gateway untuk mengamankan layanan gRPC dengan mutual Transport Layer Security (mTLS). Fitur ini memastikan hanya klien yang berwenang yang dapat mengakses layanan Anda, serta menerapkan enkripsi end-to-end dan otentikasi dua arah guna mencegah penyadapan, perusakan, dan akses tidak sah.
Prasyarat
-
Buat instans Service Mesh (ASM) Edisi Perusahaan. Untuk informasi selengkapnya, lihat Buat instans ASM.
Kluster ACK yang dikelola telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
-
Terapkan ingress gateway. Untuk informasi selengkapnya, lihat Buat ingress gateway.
-
Terapkan aplikasi di kluster yang terkait dengan instans ASM. Untuk informasi selengkapnya, lihat Terapkan aplikasi di kluster yang terkait dengan instans ASM.
Latar Belakang
Fitur manajemen traffic Service Mesh memungkinkan Anda mengakses layanan gRPC internal melalui ingress gateway. Karena gRPC berbasis protokol HTTP/2, Anda dapat menggunakan Transport Layer Security (TLS) atau mutual TLS (mTLS) untuk mengenkripsi data dalam transit dan menjamin keamanan komunikasi. ASM Gateway juga mendukung gRPC melalui TLS/mTLS, yang memungkinkan gerbang melakukan terminasi TLS untuk aliran TCP terenkripsi. Dengan demikian, tidak diperlukan konfigurasi TLS terpisah pada aplikasi di dalam service mesh.
Prosedur
Langkah 1: Terapkan aplikasi contoh
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di bagian atas halaman Deployments, pilih namespace dari daftar drop-down Namespace dan klik Create Resources in YAML.
-
Pada halaman Create, tempel YAML berikut ke editor lalu klik Create.
CatatanKarena mekanisme pemilihan protokol Istio, nilai parameter
namepada bidangportsdalam konfigurasi Service harus diawali denganhttp2-ataugrpc-. Jika tidak, Istio tidak dapat mengenali protokol layanan secara benar.
Langkah 2: Terapkan ingress gateway
Contoh ini menggunakan port default 443 untuk mengekspos layanan. Untuk informasi selengkapnya, lihat Buat ingress gateway.
Langkah 3: Konfigurasikan aturan routing Service Mesh
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans target, atau klik Manage di kolom Actions.
-
Buat Gateway.
-
Pada halaman detail instans ASM, pilih di panel navigasi kiri.
-
Pada halaman Gateway, klik Create from YAML.
-
Pada halaman Create, pilih default dari daftar drop-down Namespaces, tempel YAML berikut ke editor, lalu klik Create.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: gw-grpc-443 namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: example-credential mode: MUTUAL
-
-
Buat VirtualService.
-
Pada halaman detail instans ASM, pilih di panel navigasi kiri.
-
Pada halaman VirtualService, klik Create from YAML.
-
Pada halaman Create, pilih default dari daftar drop-down Namespaces, tempel YAML berikut ke editor, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-vs spec: hosts: - "*" gateways: - gw-grpc-443 http: - match: - port: 443 route: - destination: host: istio-grpc-server
-
Langkah 4: Konfigurasikan sertifikat
Klien gRPC biasanya memerlukan sertifikat dengan Subject Alternative Name (SAN). Kami merekomendasikan penggunaan sertifikat contoh dari repositori grpc-go. Sertifikat ini harus dikonfigurasi di namespace istio-system kluster ACK karena digunakan oleh ASM Gateway.
-
Untuk instans ASM sebelum v1.17
Jalankan perintah berikut untuk membuat Secret di namespace istio-system:
kubectl create -n istio-system secret generic example-credential --from-file=tls.key=server_key.pem --from-file=tls.crt=server_cert.pem --from-file=ca.crt=client_ca_cert.pemCatatanNama Secret harus sesuai dengan nilai credentialName yang ditentukan di Gateway.
-
Untuk instans ASM v1.17 dan yang lebih baru
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans target. Di panel navigasi kiri, pilih .
-
Pada halaman Certificate Management, klik Create. Di panel Certificate Information, konfigurasikan parameter lalu klik OK.
-
Langkah 5: Jalankan klien gRPC
Tutorial ini menggunakan contoh resmi grpc-go sebagai klien gRPC mTLS.
-
Ikuti tutorial resmi grpc-go untuk menginstal dependensi gRPC. Untuk informasi selengkapnya, lihat Quick start for gRPC in Go.
-
Ikuti tutorial resmi grpc-go untuk mengkloning repositori kode grpc-go. Untuk informasi selengkapnya, lihat repositori grpc-go.
-
Ganti isi file /grpc-go/examples/helloworld/greeter_client/main.go dengan kode berikut, lalu ubah nilai
addressmenjadi"<your_asm_gateway_address>:443". -
Setelah mengganti kode, buka direktori examples dan jalankan perintah berikut.
go run helloworld/greeter_client/main.goOutput yang diharapkan:
Greeting: Hello worldJika sertifikat tidak dikonfigurasi dengan benar, klien akan mengembalikan error seperti berikut. Jika hal ini terjadi, ikuti langkah-langkah dalam topik ini untuk mengonfigurasi ulang sertifikat.
2022/09/23 15:44:44 could not greet: rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority" exit status 1