Menyiapkan mesh layanan gRPC tanpa proxy
Panduan ini menunjukkan cara mengonfigurasi mesh layanan gRPC tanpa proxy.
Konfigurasi didukung untuk pelanggan Pratinjau, tetapi kami tidak merekomendasikannya untuk pengguna Cloud Service Mesh baru. Untuk informasi selengkapnya, lihat Ringkasan Cloud Service Mesh.
Sebelum memulai
Jangan membuat mesh layanan gRPC tanpa proxy dalam namespace tempat Envoy injeksi otomatis file bantuan diaktifkan. Untuk menentukan apakah injeksi file bantuan aktifkan, jalankan perintah berikut:
kubectl get namespace default --show-labels
Jika injeksi otomatis file bantuan diaktifkan, jalankan perintah ini untuk menghapus label:
kubectl label namespace default istio-injection-
Men-deploy layanan gRPC
Di bagian ini, Anda akan men-deploy layanan contoh helloworld
gRPC. Tujuan
Layanan contoh helloworld
adalah aplikasi server gRPC yang menampilkan
sebagai respons terhadap permintaan klien gRPC. Layanan helloworld
mengekspos
dan layanan gRPC pada port 8080 di cluster.
Dalam file
grpc-td-helloworld.yaml
, simpan hal berikut:apiVersion: v1 kind: Service metadata: name: helloworld namespace: default spec: ports: - port: 8080 name: helloworld protocol: TCP targetPort: 50051 selector: run: app1 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: run: app1 name: app1 namespace: default spec: selector: matchLabels: run: app1 replicas: 2 template: metadata: labels: run: app1 annotations: sidecar.istio.io/inject: "false" spec: containers: - image: grpc/java-example-hostname:1.37.0 name: app1 ports: - protocol: TCP containerPort: 50051
Terapkan file
grpc-td-helloworld.yaml
:kubectl apply -f grpc-td-helloworld.yaml
Pastikan layanan
helloworld
baru telah dibuat:kubectl get svc -n default
Outputnya mirip dengan hal berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT (S) AGE helloworld ClusterIP 10.71.9.71 <none> 8080/TCP 41m [..skip..]
Pastikan Pod aplikasi sedang berjalan:
kubectl get pods -n default
Pod output akan terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE app1-6db459dcb9-zvfg2 1/1 Running 0 6m app1-6db459dcb9-hlvhj 1/1 Running 0 6m [..skip..]
Mengonfigurasi mesh layanan gRPC
Di bagian ini, Anda akan mengonfigurasi mesh layanan gRPC sederhana.
Dalam file
td-grpc-mesh.yaml
, simpan manifesmesh
berikut:kind: TDMesh apiVersion: net.gke.io/v1alpha1 metadata: name: td-grpc-mesh namespace: default spec: gatewayClassName: gke-td allowedRoutes: namespaces: from: All kinds: - group: net.gke.io kind: TDGRPCRoute
Terapkan manifes mesh ke
gke-1
:kubectl apply -f td-grpc-mesh.yaml
Contoh
TDMesh
hanya mengizinkan resourceTDGRPCRoute
untuk dilampirkan ke dalamnya. Manifes menentukan jenis rute yang diizinkan.Pastikan mesh
td-grpc-mesh
baru telah dibuat:kubectl describe tdmesh td-grpc-mesh -n default
Outputnya mirip dengan hal berikut ini:
... Status: Conditions: Last Transition Time: 2022-04-14T22:22:09Z Message: Reason: MeshReady Status: True Type: Ready Last Transition Time: 2022-04-14T22:21:41Z Message: Reason: Scheduled Status: True Type: Scheduled Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 79s mc-mesh-controller Processing mesh default/td-grpc-mesh Normal UPDATE 79s mc-mesh-controller Processing mesh default/td-grpc-mesh Normal SYNC 50s mc-mesh-controller SYNC on default/td-grpc-mesh was a success
Dalam file
helloworld-route.yaml
, simpan manifes berikut:kind: TDGRPCRoute apiVersion: net.gke.io/v1alpha1 metadata: name: helloworld-route namespace: default spec: parentRefs: - name: td-grpc-mesh namespace: default group: net.gke.io kind: TDMesh hostnames: - helloworld rules: - backendRefs: - name: helloworld port: 8080 namespace: default
Terapkan manifes
helloworld-route.yaml
kegke-1
:kubectl apply -f helloworld-route.yaml
Pastikan resource
helloworld-route
GRPCRoute
baru telah dibuat:kubectl get tdgrpcroute -n default
Memverifikasi konfigurasi
Setelah proses konfigurasi selesai, pastikan Anda dapat mencapai
Server gRPC helloworld
menggunakan klien gRPC tanpa proxy. Klien ini terhubung ke
Cloud Service Mesh, memperoleh informasi tentang layanan helloworld
, dan menggunakan
informasi ini untuk mengirim traffic ke backend layanan.
Pada contoh berikut, Anda menggunakan alat grpcurl
untuk memverifikasi bahwa
Cloud Service Mesh mengarahkan traffic dengan benar di mesh. Anda membuat klien
Pod, lalu buka shell dan jalankan perintah verifikasi dari shell.
Menyiapkan variabel lingkungan dan file bootstrap
Dalam file
grpc-client.yaml
, simpan manifes Pod berikut:apiVersion: v1 kind: Pod metadata: name: static-sleeper namespace: default annotations: sidecar.istio.io/inject: "false" spec: containers: - image: curlimages/curl:7.82.0 imagePullPolicy: IfNotPresent name: sleeper command: - sleep - 365d env: - name: GRPC_XDS_BOOTSTRAP value: "/tmp/grpc-xds/td-grpc-bootstrap.json" volumeMounts: - name: grpc-td-conf mountPath: /tmp/grpc-xds/ initContainers: - args: - --config-mesh-experimental - "gketd-td-grpc-mesh" - --output - "/tmp/bootstrap/td-grpc-bootstrap.json" image: gcr.io/trafficdirector-prod/td-grpc-bootstrap:0.16.0 imagePullPolicy: IfNotPresent name: grpc-td-init volumeMounts: - name: grpc-td-conf mountPath: /tmp/bootstrap/ volumes: - name: grpc-td-conf emptyDir: medium: Memory
Terapkan manifes Pod di
gke-1
:kubectl apply -f grpc-client.yaml
Setelah Pod siap, buka shell ke Pod klien:
kubectl exec -it static-sleeper -- /bin/sh
Anda dapat menggunakan alat grpcurl
sebagai klien gRPC tanpa proxy. Alat grpcurl
menggunakan variabel lingkungan dan informasi
{i>bootstrap<i} untuk terhubung ke
dan Cloud Service Mesh. Alat ini kemudian mempelajari layanan helloworld
, yang
yang dikonfigurasi dengan Cloud Service Mesh.
Untuk memverifikasi konfigurasi Anda menggunakan alat grpcurl
:
Download dan instal alat
grpcurl
:cd /home/curl_user curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.1/grpcurl_1.8.1_linux_x86_64.tar.gz | tar -xz
Jalankan alat
grpcurl
denganxds:///helloworld
sebagai URI layanan danhelloworld.Greeter/SayHello
sebagai nama layanan dan metode yang akan dipanggil. Tujuan parameter ke metodeSayHello
diteruskan menggunakan opsi-d
:./grpcurl --plaintext \ -d '{"name": "world"}' \ xds:///helloworld helloworld.Greeter/SayHello
Output-nya serupa dengan berikut ini, dengan
INSTANCE_HOST_NAME
sebagai nama host Pod:Greetings: Hello world, from INSTANCE_HOST_NAME
Output memverifikasi bahwa klien gRPC tanpa proxy berhasil terhubung
Cloud Service Mesh dan mempelajari backend untuk layanan helloworld
menggunakan resolver nama xds
. Klien mengirim permintaan ke salah satu layanan
backend tanpa perlu mengetahui alamat IP
atau melakukan resolusi DNS.