Halaman ini menjelaskan cara Google Kubernetes Engine (GKE) menggunakan Ekstensi Layanan untuk menambahkan logika kustom ke dalam Cloud Load Balancing.
Halaman ini ditujukan bagi admin Identitas dan akun GKE serta Developer yang perlu mengonfigurasi logika pengelolaan traffic kustom menggunakan Ekstensi Layanan.
Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:
- Konsep dasar jaringan GKE
- GKE Gateway API
- Pengontrol Gateway GKE
- GatewayClass GKE
- Ringkasan Ekstensi Layanan
Ringkasan
GKE menggunakan Ekstensi Layanan untuk menambahkan logika kustom ke Cloud Load Balancing. Anda dapat menggunakan Ekstensi Layanan untuk tugas seperti pembagian traffic lanjutan, autentikasi kustom, atau logging permintaan.
Pengontrol Gateway GKE mendukung Ekstensi Layanan berikut:
GCPRoutingExtension: ekstensi ini menambahkan logika kustom ke Cloud Load Balancing untuk mengontrol perutean traffic.GCPTrafficExtension: ekstensi ini menyisipkan logika kustom ke Cloud Load Balancing untuk mengubah traffic. Logika ini diterapkan ke traffic setelah layanan dipilih. Load balancer dapat menambahkan atau mengubah header dan payload permintaan dan respons HTTP.GCPTrafficExtensiontidak memengaruhi pemilihan layanan atau kebijakan keamanan layanan.
Ekstensi dilampirkan ke Gateway dan
mereferensikan Service, GCPWasmPlugin, atau googleAPIServiceName.
Merujuk Layanan: dalam model ini, Anda men-deploy logika kustom sebagai aplikasi backend terpisah, yang diekspos sebagai Layanan Kubernetes. Load balancer melakukan panggilan ke layanan ini untuk memproses traffic. Pendekatan ini serbaguna dan memungkinkan Anda menerapkan logika perutean kustom atau melakukan manipulasi traffic, seperti modifikasi header atau pemeriksaan payload. Anda mereferensikan Layanan dengan
GCPRoutingExtensionatauGCPTrafficExtension.Merujuk resource
GCPWasmPlugin: untuk kasus penggunaan berperforma tinggi, Anda dapat menyisipkan logika kustom yang ditulis pengguna langsung ke jalur data load balancerGoogle Cloud menggunakan modul WebAssembly (Wasm). Anda menentukan resourceGCPWasmPluginyang mengarah ke image modul Wasm di Artifact Registry. Metode ini hanya digunakan denganGCPTrafficExtensiondan Load Balancer Aplikasi eksternal global.Merujuk Layanan Google API: Anda juga dapat merujuk layanan Google API secara langsung dengan menggunakan kolom
googleAPIServiceNamedalamGCPTrafficExtension.
Dalam diagram berikut, resource GCPRoutingExtension dilampirkan ke Gateway
dan mereferensikan beberapa Layanan. Ekstensi mengontrol perutean traffic ke Layanan.
Pada diagram berikut, resource GCPTrafficExtension dilampirkan ke Gateway
dan mereferensikan Layanan, GoogleAPIServiceName, atau GCPWasmPlugin.
Ekstensi mengubah header dan payload permintaan dan respons.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Aktifkan Compute Engine API, Network Services API, dan Model Armor API jika diperlukan.
Buka Aktifkan akses ke API dan ikuti petunjuknya.
Untuk mengetahui informasi mendetail tentang harga Google Cloud Ekstensi Layanan, lihat Harga.
Tinjau peran dan izin yang diperlukan di Kontrol akses Ekstensi Layanan.
Pahami kuota dan batas di kuota Ekstensi Layanan.
Jika Anda ingin menggunakan pencocok Common Expression Language (CEL), tinjau atribut dan operator yang didukung dalam referensi bahasa pencocok CEL.
Tinjau pembatasan dan batasan untuk Ekstensi Layanan.
Persyaratan GKE Gateway Controller
- Cluster Anda harus menggunakan GKE versi 1.33 atau yang lebih baru.
- Untuk menggunakan
GCPWasmPlugin, cluster Anda harus menggunakan GKE versi 1.33.3 atau yang lebih baru. - Cluster Anda harus mengaktifkan Gateway API.
- Anda harus memiliki resource Gatewayyang dikonfigurasi. Resource ini dapat berupa Gateway
Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi eksternal regional, atau Load Balancer Aplikasi internal regional. Jika Anda menggunakan resource
GCPWasmPlugin, Anda hanya boleh men-deploy Gateway Load Balancer Aplikasi eksternal global. - Anda harus memiliki resource HTTPRoute yang dikonfigurasi.
Batas dan pembatasan
Tabel berikut mencantumkan batasan yang terkait dengan konfigurasi Ekstensi Layanan Gateway di GKE:
| Kategori | Batas dan pembatasan |
|---|---|
| Load Balancer |
GCPRoutingExtension didukung untuk load balancer berikut:
GCPTrafficExtension didukung untuk load balancer berikut:
|
| Rantai dan spesifikasi ekstensi |
|
| Pengaturan waktu dan pencocokan |
|
| Header dan metadata |
|
| Acara |
|
GCPTrafficExtension |
|
GCPWasmPlugin |
|
googleAPIServiceName dan backendRef |
Saat Anda mereferensikan Layanan yang menggunakan backendRef dalam Ekstensi, Anda harus memenuhi
kondisi berikut:
|
Merujuk ke Layanan
Di Ekstensi Layanan, Anda dapat merujuk ke Layanan yang menghosting logika kustom yang ingin Anda jalankan oleh load balancer. Gateway tidak memiliki Ekstensi Layanan secara default.
Untuk mengonfigurasi Ekstensi Layanan GKE, ikuti langkah-langkah berikut:
Deploy Layanan panggilan balik backend: buat Layanan Kubernetes yang merepresentasikan layanan backend untuk eksekusi logika kustom. Load balancer memanggil layanan ini.
Mengonfigurasi Ekstensi Layanan: gunakan ekstensi yang sesuai berdasarkan jenis load balancer Anda.
GCPRoutingExtensionuntuk Gateway regional: gunakan ekstensi ini untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional guna menerapkan logika perutean kustom dalam region.GCPTrafficExtensionuntuk Gateway eksternal global, eksternal regional, dan internal: gunakan ekstensi ini untuk Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi eksternal regional, dan Load Balancer Aplikasi internal regional untuk melakukan manipulasi traffic, seperti modifikasi header atau pemeriksaan payload, di berbagai jenis load balancer.
Men-deploy layanan panggilan balik backend
Layanan panggilan menerapkan logika kustom untuk Ekstensi Layanan Gateway di GKE. Gateway memanggil aplikasi backend ini, berdasarkan konfigurasi GCPTrafficExtension atau GCPRoutingExtension, untuk mengubah atau merutekan traffic.
Anda men-deploy layanan info untuk menambahkan logika kustom ke Gateway. Layanan terpisah ini menangani pemrosesan kustom, seperti manipulasi header, transformasi payload, atau perutean traffic.
Untuk men-deploy layanan yang dapat berfungsi sebagai info untuk Gateway Anda, lakukan langkah-langkah berikut:
(Opsional) Buat secret untuk TLS: Perintah ini membuat secret Kubernetes berjenis TLS yang berisi sertifikat TLS dan kunci pribadi Anda.
Untuk membuat secret TLS untuk layanan info, ganti kode berikut:
SECRET_NAME: nama secret untuk layanan panggilan keluar Andapath-to-cert: jalur file ke sertifikat Andapath-to-key: jalur file ke kunci Anda
Untuk memverifikasi bahwa secret telah ditambahkan, jalankan perintah berikut:
kubectl get secrets SECRET_NAMEGanti
SECRET_NAMEdengan nama rahasia untuk layanan panggilan Anda.Outputnya akan mirip dengan berikut ini:
NAME TYPE DATA AGE SECRET_NAME kubernetes.io/tls 2 12sTentukan resource Deployment dan Service.
Anda harus menentukan hal berikut:
- Deployment: untuk mengelola pod aplikasi yang berisi logika kustom untuk Ekstensi Layanan Anda.
- Service: untuk mengekspos pod aplikasi yang dikelola oleh Deployment sebagai layanan jaringan.
Buat contoh manifes
extension-service-app.yamlyang memiliki Deployment dan definisi Service:apiVersion: apps/v1 kind: Deployment metadata: name: extension-service-app spec: selector: matchLabels: app: store replicas: 1 template: metadata: labels: app: store spec: containers: - name: serviceextensions image: us-docker.pkg.dev/service-extensions-samples/callouts/python-example-basic:main ports: - containerPort: 8080 - containerPort: 443 volumeMounts: - name: certs mountPath: "/etc/certs/" readOnly: true env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: TLS_SERVER_CERT value: "/etc/certs/path-to-cert" - name: TLS_SERVER_PRIVKEY value: "/etc/certs/path-to-key" resources: requests: cpu: 10m volumes: - name: certs secret: secretName: SECRET_NAME optional: false --- apiVersion: v1 kind: Service metadata: name: extension-service spec: ports: - port: 443 targetPort: 443 appProtocol: HTTP2 selector: app: storeTerapkan manifes
extension-service-app.yaml:kubectl apply -f extension-service-app.yaml
Verifikasi konfigurasi Anda:
Pastikan aplikasi telah di-deploy:
kubectl get pod --selector app=storeSetelah aplikasi mulai berjalan, outputnya akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE extension-service-app-85f466bc9b-b5mf4 1/1 Running 0 7sPastikan bahwa Service telah di-deploy:
kubectl get service extension-serviceOutputnya mirip dengan berikut ini, yang menampilkan Layanan untuk setiap Deployment toko:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE extension-service ClusterIP 34.118.225.9 <none> 443/TCP 2m40s
Mengonfigurasi Ekstensi Layanan
Anda dapat mengonfigurasi GCPRoutingExtension atau GCPTrafficExtension untuk menyesuaikan aliran traffic.
Mengonfigurasi GCPRoutingExtension untuk Gateway regional
Anda dapat mengalihkan traffic menggunakan GCPRoutingExtension. Untuk mengonfigurasi
GCPRoutingExtension, perbarui HTTPRoute untuk menentukan permintaan untuk host
service-extensions.com.
Perbarui HTTPRoute. Ubah HTTPRoute untuk menyertakan nama host atau jalur yang akan memicu ekstensi pemilihan rute.
Simpan manifes contoh berikut sebagai file
store-route.yaml:kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: store spec: parentRefs: - kind: Gateway name:GATEWAY_NAME hostnames: - "store.example.com" - "service-extensions.example.com" rules: - backendRefs: - name: store-v1 port: 8080 - matches: - headers: - name: env value: canary backendRefs: - name: store-v2 port: 8080 - matches: - path: value: /de backendRefs: - name: store-german port: 8080Ganti
GATEWAY_NAMEdengan nama Gateway Anda.Terapkan manifes
store-route.yaml:kubectl apply -f store-route.yaml
Tentukan
GCPRoutingExtension.Simpan konfigurasi
GCPRoutingExtensiondalam filegcp-routing-extension.yamlcontoh:kind: GCPRoutingExtension apiVersion: networking.gke.io/v1 metadata: name: my-gateway-extension namespace: default spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: GATEWAY_NAME extensionChains: - name: chain1 matchCondition: celExpressions: - celMatcher: request.path.contains("serviceextensions") extensions: - name: ext1 authority: "myext.com" timeout: 1s backendRef: group: "" kind: Service name: extension-service port: 443Ganti
GATEWAY_NAMEdengan nama Gateway Anda.Terapkan manifes contoh ke cluster Anda:
kubectl apply -f gcp-routing-extension.yaml
Verifikasi konfigurasi
GCPRoutingExtensiondan pengikatannya ke Gateway.Periksa deployment
GCPRoutingExtension:kubectl describe gcproutingextension my-gateway-extensionOutputnya mirip dengan hal berikut ini:
Name: my-gateway-extension Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPRoutingExtension Metadata: Creation Timestamp: 2025-03-02T17:12:30Z Generation: 1 Resource Version: 31283253 UID: ec8efaa0-d8e7-4e1b-9fd4-0ae0ef3c74d0 Spec: Extension Chains: Extensions: Authority: myext.com Backend Ref: Group: Kind: Service Name: extension-service Port: 443 Name: ext1 Timeout: 1s Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Events: <none>Output menampilkan detail
GCPRoutingExtension, yang diberi namamy-gateway-extension, dalam namespace default. Output menampilkan kolomSpec, yang berisi definisi perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPRoutingExtensionterikat ke Gateway. Proses ini mungkin memerlukan waktu beberapa menit:kubectl describe gateway GATEWAY_NAMEOutputnya mirip dengan hal berikut ini:
Name: GATEWAY_NAME Namespace: default Labels: none Annotations: networking.gke.io/addresses: /projects/1234567890/regions/us-central1/addresses/test-hgbk-default-internal-http-5ypwen3x2gcr networking.gke.io/backend-services: /projects/1234567890/regions/us-central1/backendServices/test-hgbk-default-extension-service-443-rduk21fwhoj0, /projects/1234567890/re... networking.gke.io/firewalls: /projects/1234567890/global/firewalls/test-hgbk-l7-default-us-central1 networking.gke.io/forwarding-rules: /projects/1234567890/regions/us-central1/forwardingRules/test-hgbk-default-internal-http-qn7dk9i9zm73 networking.gke.io/health-checks: /projects/1234567890/regions/us-central1/healthChecks/test-hgbk-default-extension-service-443-rduk21fwhoj0, /projects/1234567890/regio... networking.gke.io/last-reconcile-time: 2025-03-02T17:15:02Z networking.gke.io/lb-route-extensions: /projects/1234567890/locations/us-central1/lbRouteExtensions/test-hgbk-default-internal-http-lwh0op4qorb0 networking.gke.io/lb-traffic-extensions: networking.gke.io/ssl-certificates: networking.gke.io/target-http-proxies: /projects/1234567890/regions/us-central1/targetHttpProxies/test-hgbk-default-internal-http-2jzr7e3xclhj networking.gke.io/target-https-proxies: networking.gke.io/url-maps: /projects/1234567890/regions/us-central1/urlMaps/test-hgbk-default-internal-http-2jzr7e3xclhj API Version: gateway.networking.k8s.io/v1 Kind: Gateway Metadata: Creation Timestamp: 2025-03-02T16:37:50Z Finalizers: gateway.finalizer.networking.gke.io Generation: 1 Resource Version: 31284863 UID: fd512611-bad2-438e-abfd-5619474fbf31 ...Output menampilkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resourceGoogle Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-route-extensionsmengonfirmasi pengikatan gateway keGCPRoutingExtension.Periksa status ekstensi dengan mengonfirmasi bahwa
GCPRoutingExtensionmemiliki statusProgrammeddengan alasanProgrammingSucceeded. Perintah ini mungkin memerlukan waktu beberapa menit.kubectl describe gcproutingextension my-gateway-extensionOutputnya mirip dengan hal berikut ini:
Name: my-gateway-extension Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPRoutingExtension Metadata: Creation Timestamp: 2025-03-02T17:12:30Z Generation: 1 Resource Version: 31284378 UID: ec8efaa0-d8e7-4e1b-9fd4-0ae0ef3c74d0 Spec: Extension Chains: Extensions: Authority: myext.com Backend Ref: Group: Kind: Service Name: extension-service Port: 443 Name: ext1 Timeout: 1s Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Status: Ancestors: Ancestor Ref: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Namespace: default Conditions: Last Transition Time: 2025-03-02T17:14:15Z Message: Reason: Accepted Status: True Type: Accepted Last Transition Time: 2025-03-02T17:14:15Z Message: Reason: ProgrammingSucceeded Status: True Type: Programmed Controller Name: networking.gke.io/gateway Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m31s sc-gateway-controller default/my-gateway-extension Normal SYNC 51s (x2 over 98s) sc-gateway-controller Attachment of GCPRoutingExtension "default/my-gateway-extension" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "GATEWAY_NAME", SectionName: nil, Port: nil} was a success Normal SYNC 23s sc-gateway-controller Reconciliation of GCPRoutingExtension "default/my-gateway-extension" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "GATEWAY_NAME", SectionName: nil, Port: nil} was a successKolom
Status.Conditionsmenampilkan kondisiProgrammeddenganStatus: TruedanReason: ProgrammingSucceeded. Informasi ini mengonfirmasi bahwa ekstensi berhasil diterapkan.
Kirim traffic ke aplikasi Anda.
Setelah Gateway, Rute, dan aplikasi di-deploy di cluster, Anda dapat meneruskan traffic ke aplikasi.
Untuk mengakses aplikasi, Anda perlu menemukan alamat IP Gateway Anda.
Di terminal, gunakan perintah berikut:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"Ganti
GATEWAY_NAMEdengan nama Gateway Anda.Perintah ini menampilkan alamat IP Gateway. Dalam perintah lanjutan, ganti
GATEWAY_IP_ADDRESSdengan alamat IP dari output.Uji pembaruan jalur dengan membuka layanan toko versi
serviceextensionsdistore.example.com/serviceextensions:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -vOutputnya mirip dengan hal berikut ini:
{ "cluster_name": "gke1", "host_header": "service-extensions.com", "metadata": "store-v1", "pod_name": "store-v1-5d9554f847-cvxpd", "pod_name_emoji": "💇🏼♀️", "project_id": "gateway-demo", "timestamp": "2025-03-15T12:00:00", "zone": "us-central1-c" }
Konfigurasi GCPTrafficExtension
Anda dapat menggunakan GCPTrafficExtension untuk menggunakan kemampuan pengelolaan traffic lanjutan dalam lingkungan Google Cloud . Anda dapat mengonfigurasi ekstensi ini di seluruh Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi eksternal regional, dan Load Balancer Aplikasi internal regional. Anda dapat menggunakan GCPTrafficExtension untuk menerapkan logika permintaan dan respons HTTP kustom, pemilihan rute yang canggih, transformasi, dan kebijakan keamanan.
Perbarui HTTPRoute. Ubah HTTPRoute untuk menyertakan nama host atau jalur yang akan memicu ekstensi traffic.
Simpan manifes contoh berikut sebagai file
store-route.yaml:kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: store spec: parentRefs: - kind: Gateway name: GATEWAY_NAME hostnames: - "store.example.com" - "service-extensions.example.com" rules: - backendRefs: - name: store-v1 port: 8080 - matches: - headers: - name: env value: canary backendRefs: - name: store-v2 port: 8080 - matches: - path: value: /de backendRefs: - name: store-german port: 8080Ganti
GATEWAY_NAMEdengan nama Gateway Anda, sepertiinternal-http,external-http, atauglobal-external-http.Terapkan manifes
store-route.yamlke cluster Anda:kubectl apply -f store-route.yaml
Tentukan
GCPTrafficExtension.Simpan konfigurasi
GCPTrafficExtensionke filegcp-traffic-extension.yamlcontoh:kind: GCPTrafficExtension apiVersion: networking.gke.io/v1 metadata: name: my-traffic-extension namespace: default spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: GATEWAY_NAME extensionChains: - name: chain1 matchCondition: celExpressions: - celMatcher: request.path.contains("serviceextensions") extensions: - name: ext1 authority: "myext.com" timeout: 1s backendRef: group: "" kind: Service name: extension-service port: 443Ganti
GATEWAY_NAMEdengan nama Gateway Anda, sebagaiinternal-http,external-http, atauglobal-external-http.Terapkan manifes contoh ke cluster Anda:
kubectl apply -f gcp-traffic-extension.yaml
Verifikasi konfigurasi
GCPTrafficExtensiondan pengikatannya ke Gateway.Periksa deployment
GCPTrafficExtension:kubectl describe gcptrafficextension my-traffic-extensionOutputnya mirip dengan hal berikut ini:
Name: my-traffic-extension Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPTrafficExtension Metadata: Creation Timestamp: 2025-03-02T17:12:30Z Generation: 1 Resource Version: 31283253 UID: ec8efaa0-d8e7-4e1b-9fd4-0ae0ef3c74d0 Spec: Extension Chains: Extensions: Authority: myext.com Backend Ref: Group: Kind: Service Name: extension-service Port: 443 Name: ext1 Timeout: 1s Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Events: <none>Output menampilkan detail
GCPTrafficExtensionbernamamy-traffic-extensiondalam namespace default. File ini menampilkan kolomSpec, yang berisi definisi tentang perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPTrafficExtensionterikat ke Gateway. Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan:kubectl describe gateway GATEWAY_NAMEOutputnya mirip dengan hal berikut ini:
Name: GATEWAY_NAME Namespace: default Labels: <none> Annotations: networking.gke.io/addresses: /projects/1234567890/regions/us-central1/addresses/test-hgbk-default-internal-http-5ypwen3x2gcr networking.gke.io/backend-services: /projects/1234567890/regions/us-central1/backendServices/test-hgbk-default-extension-service-443-rduk21fwhoj0, /projects/1234567890/re... networking.gke.io/firewalls: /projects/1234567890/global/firewalls/test-hgbk-l7-default-us-central1 networking.gke.io/forwarding-rules: /projects/1234567890/regions/us-central1/forwardingRules/test-hgbk-default-internal-http-qn7dk9i9zm73 networking.gke.io/health-checks: /projects/1234567890/regions/us-central1/healthChecks/test-hgbk-default-extension-service-443-rduk21fwhoj0, /projects/1234567890/regio... networking.gke.io/last-reconcile-time: 2025-03-02T17:15:02Z networking.gke.io/lb-traffic-extensions: /projects/1234567890/locations/us-central1/lbTrafficExtensions/test-hgbk-default-internal-http-lwh0op4qorb0 networking.gke.io/ssl-certificates: networking.gke.io/target-http-proxies: /projects/1234567890/regions/us-central1/targetHttpProxies/test-hgbk-default-internal-http-2jzr7e3xclhj networking.gke.io/target-https-proxies: networking.gke.io/url-maps: /projects/1234567890/regions/us-central1/urlMaps/test-hgbk-default-internal-http-2jzr7e3xclhj API Version: gateway.networking.k8s.io/v1 Kind: Gateway Metadata: Creation Timestamp: 2025-03-02T16:37:50Z Finalizers: gateway.finalizer.networking.gke.io Generation: 1 Resource Version: 31284863 UID: fd512611-bad2-438e-abfd-5619474fbf31 ...Output menampilkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resource Google Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-traffic-extensionsmengonfirmasi pengikatan.Periksa status ekstensi:
Pastikan bahwa
GCPTrafficExtensionmemiliki statusProgrammeddengan alasanProgrammingSucceeded. Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.Untuk memeriksa status ekstensi
GCPTrafficExtension, jalankan perintah berikut:kubectl describe gcptrafficextension my-traffic-extensionOutput resource
GCPTrafficExtensionmirip dengan berikut ini:Name: my-traffic-extension Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPTrafficExtension Metadata: Creation Timestamp: 2025-03-02T17:12:30Z Generation: 1 Resource Version: 31284378 UID: ec8efaa0-d8e7-4e1b-9fd4-0ae0ef3c74d0 Spec: Extension Chains: Extensions: Authority: myext.com Backend Ref: Group: Kind: Service Name: extension-service Port: 443 Name: ext1 Timeout: 1s Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Status: Ancestors: Ancestor Ref: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Namespace: default Conditions: Last Transition Time: 2025-03-02T17:14:15Z Message: Reason: Accepted Status: True Type: Accepted Last Transition Time: 2025-03-02T17:14:15Z Message: Reason: ProgrammingSucceeded Status: True Type: Programmed Controller Name: networking.gke.io/gateway Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m31s sc-gateway-controller default/my-traffic-extension Normal SYNC 51s (x2 over 98s) sc-gateway-controller Attachment of GCPTrafficExtension "default/my-gateway-extension" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "GATEWAY_NAME", SectionName: nil, Port: nil} was a success Normal SYNC 23s sc-gateway-controller Reconciliation of GCPTrafficExtension "default/my-traffic-extension" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "GATEWAY_NAME", SectionName: nil, Port: nil} was a successKolom
Status.Conditionsmenampilkan kondisiProgrammeddenganStatus: TruedanReason: ProgrammingSucceeded. Informasi ini mengonfirmasi bahwa ekstensi berhasil diterapkan.
Kirim traffic ke aplikasi Anda.
Setelah Gateway, Rute, dan aplikasi di-deploy di cluster, Anda dapat meneruskan traffic ke aplikasi.
Untuk mengakses aplikasi, Anda perlu menemukan alamat IP Gateway Anda.
Di terminal, gunakan perintah berikut:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"Ganti
GATEWAY_NAMEdengan nama Gateway Anda.Perintah ini menampilkan alamat IP Gateway. Dalam perintah lanjutan, ganti
GATEWAY_IP_ADDRESSdengan alamat IP dari output.Uji pembaruan jalur dengan membuka layanan toko versi
serviceextensionsdistore.example.com/serviceextensions:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -vOutputnya mirip dengan hal berikut ini:
{ * Request completely sent off < HTTP/1.1 200 OK < server: Werkzeug/2.3.7 Python/3.11.3 < date: Sun, 02 Mar 2025 16:58:10 GMT < content-type: application/json < access-control-allow-origin: * < hello: service-extensions < via: 1.1 google < transfer-encoding: chunked }
Merujuk ke resource GCPWasmPlugin
Anda dapat menyuntikkan logika kustom langsung ke jalur data load balancer menggunakan
GCPWasmPlugin dengan GCPTrafficExtension. Metode ini memungkinkan Anda men-deploy kemampuan pengelolaan traffic kustom yang dikemas sebagai modul Wasm.
Untuk mengonfigurasi Ekstensi Layanan GKE, ikuti langkah-langkah berikut:
Deploy
GCPWasmPlugin: buat dan deploy definisi resource kustom (CRD)GCPWasmPluginyang berisi kode kustom untuk modul Wasm Anda. Anda hanya dapat menggunakanGCPWasmPlugindenganGCPTrafficExtensionuntuk GatewayClassgke-l7-global-external-managed.Konfigurasi Ekstensi Layanan: gunakan
GCPTrafficExtensionuntuk Load Balancer Aplikasi eksternal global.
Men-deploy GCPWasmPlugin
GCPWasmPlugin memungkinkan Anda menyuntikkan logika kustom yang ditulis pengguna langsung ke jalur data load balancer Google Cloud . Resource GCPWasmPlugin
menunjuk ke image modul Wasm di Artifact Registry, yang kemudian dieksekusi oleh
load balancer.
Sebelum melanjutkan langkah-langkah berikut, pastikan Anda telah mengupload modul Wasm ke repositori Artifact Registry. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan kode plugin.
Untuk men-deploy resource GCPWasmPlugin, selesaikan langkah-langkah berikut:
Simpan manifes berikut sebagai
wasm-plugin.yaml:kind: GCPWasmPlugin apiVersion: networking.gke.io/v1 metadata: name: gcp-wasm-plugin spec: versions: - name: wasm-plugin-version description: "Test wasm plugin version" image: "us-docker.pkg.dev/service-extensions-samples/plugins/local-reply:main" weight: 1000000 logConfig: enabled: true # Configures the sampling rate of activity logs. # The value of the field must be in range [0, 1e6]. sampleRate: 1000000 # Specifies the lowest level of logs that are exported to Cloud Logging. minLogLevel: INFOPerhatikan hal berikut:
spec.versions.name: nama versi harus unik dalam resourceGCPWasmPlugin. Anda dapat mencantumkan hingga 10 versi, dan hanya satu versi yang harus memiliki bobot selain nol.spec.versions.image: mereferensikan image yang berisi kode plugin yang disimpan di Artifact Registry.spec.versions.weight: menentukan bobot versi plugin. Bobot harus berupa angka antara 0 dan 1.000.000, inklusif.spec.logConfig: menentukan apakah akan mengaktifkan Cloud Logging untuk plugin ini. Jika nilai tidak ditentukan, Cloud Logging akan dinonaktifkan secara default.spec.logConfig.sampleRate: mengonfigurasi frekuensi pengambilan sampel log aktivitas. Tarif harus berupa angka antara 0 dan 1.000.000, inklusif. Jika tidak ditentukan saat Cloud Logging diaktifkan, nilai defaultnya adalah1,000,000(100% permintaan dicatat).spec.logConfig.minLogLevel: menentukan tingkat log terendah yang diekspor ke Cloud Logging. Jika nilai tidak ditentukan saat Cloud Logging diaktifkan, kolom akan disetel keINFOsecara default.
Terapkan manifes
wasm-plugin.yaml:kubectl apply -f wasm-plugin.yamlVerifikasi bahwa plugin telah di-deploy:
kubectl describe gcpwasmplugins.networking.gke.io gcp-wasm-pluginOutputnya mirip dengan hal berikut ini:
Name: gcp-wasm-plugin Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPWasmPlugin Metadata: Creation Timestamp: 2025-08-08T19:54:18Z Generation: 1 Resource Version: 44578 UID: 549a12c7-91d1-43ad-a406-d6157a799b79 Spec: Log Config: Enabled: true Min Log Level: INFO Sample Rate: 1000000 Versions: Description: Test wasm plugin version Image: us-docker.pkg.dev/service-extensions-samples/plugins/local-reply:main Name: wasm-plugin-version Weight: 1000000 Events: <none>
Mengonfigurasi Ekstensi Layanan
Untuk menambahkan logika kustom ke Load Balancer Aplikasi eksternal global, Anda dapat mengonfigurasi
GCPTrafficExtension untuk menggunakan GCPWasmPlugin. Anda dapat menggunakan
GCPTrafficExtension untuk menggunakan kemampuan pengelolaan traffic lanjutan dalam
lingkungan Google Cloud Anda. Anda dapat mengonfigurasi ekstensi ini di seluruh
Load Balancer Aplikasi eksternal global.
Untuk mengonfigurasi GCPTrafficExtension agar menggunakan GCPWasmPlugin, selesaikan
langkah-langkah berikut:
Tentukan
GCPTrafficExtension.Simpan konfigurasi
GCPTrafficExtensionsebagaigcp-traffic-extension-with-plugin.yaml:kind: GCPTrafficExtension apiVersion: networking.gke.io/v1 metadata: name: gcp-traffic-extension-with-plugin namespace: default spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: GATEWAY_NAME extensionChains: - name: chain1 matchCondition: celExpressions: - celMatcher: request.path.contains("serviceextensions") extensions: - name: ext1 supportedEvents: - RequestHeaders - ResponseHeaders backendRef: group: "networking.gke.io" kind: GCPWasmPlugin name: gcp-wasm-pluginGanti
GATEWAY_NAMEdengan nama Gateway Anda, sepertiglobal-external-http.Terapkan manifes contoh ke cluster Anda:
kubectl apply -f gcp-traffic-extension-with-plugin.yaml
Verifikasi konfigurasi
GCPTrafficExtensiondan pengikatannya ke Gateway.Periksa deployment
GCPTrafficExtension:kubectl describe gcptrafficextensions.networking.gke.io gcp-traffic-extension-with-pluginOutputnya mirip dengan hal berikut ini:
Name: gcp-traffic-extension-with-plugin Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPTrafficExtension Metadata: Creation Timestamp: 2025-03-02T17:12:30Z Generation: 1 Resource Version: 31283253 UID: ec8efaa0-d8e7-4e1b-9fd4-0ae0ef3c74d0 Spec: Extension Chains: Extensions: Backend Ref: Group: networking.gke.io Kind: GCPWasmPlugin Name: gcp-wasm-plugin Name: ext1 Supported Events: RequestHeaders ResponseHeaders Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: GATEWAY_NAME Events: <none>Output menampilkan detail
GCPTrafficExtensionbernamagcp-traffic-extension-with-plugindalam namespace default. File ini menampilkan kolomSpec, yang berisi definisi tentang perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPTrafficExtensionterikat ke Gateway. Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan:kubectl describe gateway GATEWAY_NAMEOutputnya mirip dengan hal berikut ini:
Name: GATEWAY_NAME Namespace: default Labels: <none> Annotations: networking.gke.io/addresses: /projects/922988411345/global/addresses/test-k18j-default-external-http-2jfqxrkgd0fm networking.gke.io/backend-services: /projects/922988411345/global/backendServices/test-k18j-default-gw-serve404-80-8zjp3d8cqfsu, /projects/922988411345/global/backendServices... networking.gke.io/certmap: store-example-com-map networking.gke.io/firewalls: /projects/922988411345/global/firewalls/test-k18j-l7-default-global networking.gke.io/forwarding-rules: /projects/922988411345/global/forwardingRules/test-k18j-default-external-http-wt1tl0cwi6zr networking.gke.io/health-checks: /projects/922988411345/global/healthChecks/test-k18j-default-gw-serve404-80-8zjp3d8cqfsu, /projects/922988411345/global/healthChecks/test-... networking.gke.io/last-reconcile-time: 2025-08-08T20:27:35Z networking.gke.io/lb-route-extensions: networking.gke.io/lb-traffic-extensions: projects/922988411345/locations/global/lbTrafficExtensions/test-k18j-default-external-http-0tdum40yts35 networking.gke.io/ssl-certificates: networking.gke.io/target-http-proxies: networking.gke.io/target-https-proxies: /projects/922988411345/global/targetHttpsProxies/test-k18j-default-external-http-jy9mc97xb5yh networking.gke.io/url-maps: /projects/922988411345/global/urlMaps/test-k18j-default-external-http-jy9mc97xb5yh networking.gke.io/wasm-plugin-versions: projects/922988411345/locations/global/wasmPlugins/test-k18j-default-gcp-wasm-plugin-itle20jj9nyk/versions/test-k18j-wasm-plugin-version-i... networking.gke.io/wasm-plugins: projects/922988411345/locations/global/wasmPlugins/test-k18j-default-gcp-wasm-plugin-itle20jj9nyk API Version: gateway.networking.k8s.io/v1 Kind: Gateway Metadata: Creation Timestamp: 2025-03-02T16:37:50Z Finalizers: gateway.finalizer.networking.gke.io Generation: 1 Resource Version: 31284863 UID: fd512611-bad2-438e-abfd-5619474fbf31 Spec: Gateway Class Name: gke-l7-global-external-managed Listeners: Allowed Routes: Namespaces: From: Same Name: https Port: 443 Protocol: HTTPS ...Output menampilkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resource Google Cloudyang mendasarinya. Anotasi
networking.gke.io/lb-traffic-extensions,networking.gke.io/wasm-plugin-versions, dannetworking.gke.io/wasm-pluginsmengonfirmasi pengikatan.Periksa status ekstensi:
Pastikan bahwa
GCPTrafficExtensionmemiliki statusProgrammeddengan alasanProgrammingSucceeded. Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.kubectl describe gcptrafficextensions.networking.gke.io gcp-traffic-extension-with-pluginOutputnya mirip dengan hal berikut ini:
Name: gcp-traffic-extension-with-plugin Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPTrafficExtension Metadata: Creation Timestamp: 2025-08-08T20:08:09Z Generation: 1 Resource Version: 56528 UID: 1389f790-9663-45ca-ac4e-a2c082f43359 Spec: Extension Chains: Extensions: Backend Ref: Group: networking.gke.io Kind: GCPWasmPlugin Name: gcp-wasm-plugin Name: ext1 Supported Events: RequestHeaders ResponseHeaders Match Condition: Cel Expressions: Cel Matcher: request.path.contains("serviceextensions") Name: chain1 Target Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: external-http Status: Ancestors: Ancestor Ref: Group: gateway.networking.k8s.io Kind: Gateway Name: external-http Namespace: default Conditions: Last Transition Time: 2025-08-08T20:16:13Z Message: Observed Generation: 1 Reason: Accepted Status: True Type: Accepted Last Transition Time: 2025-08-08T20:16:13Z Message: Observed Generation: 1 Reason: ResolvedRefs Status: True Type: ResolvedRefs Last Transition Time: 2025-08-08T20:16:13Z Message: Observed Generation: 1 Reason: ProgrammingSucceeded Status: True Type: Programmed Controller Name: networking.gke.io/gateway Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 19m sc-gateway-controller default/gcp-traffic-extension-with-plugin Normal SYNC 3m25s (x4 over 11m) sc-gateway-controller Attachment of GCPTrafficExtension "default/gcp-traffic-extension-with-plugin" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} was a success Normal SYNC 3m25s (x4 over 11m) sc-gateway-controller All the object references were able to be resolved for GCPTrafficExtension "default/gcp-traffic-extension-with-plugin" bound to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} Normal SYNC 3m25s (x4 over 11m) sc-gateway-controller Programming of GCPTrafficExtension "default/gcp-traffic-extension-with-plugin" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} was a successPeriksa status plugin.
Pastikan resource
GCPWasmPluginmemiliki statusProgrammeddengan alasanProgrammingSucceeded. Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.kubectl describe gcpwasmplugins.networking.gke.io gcp-wasm-pluginOutputnya mirip dengan hal berikut ini:
Name: gcp-wasm-plugin Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPWasmPlugin Metadata: Creation Timestamp: 2025-08-08T19:54:18Z Generation: 1 Resource Version: 44578 UID: 549a12c7-91d1-43ad-a406-d6157a799b79 Spec: Log Config: Enabled: true Min Log Level: INFO Sample Rate: 1000000 Versions: Description: Test wasm plugin version Image: us-docker.pkg.dev/service-extensions-samples/plugins/local-reply:main Name: wasm-plugin-version Weight: 1000000 Status: Ancestors: Ancestor Ref: Group: gateway.networking.k8s.io Kind: Gateway Name: external-http Namespace: default Conditions: Last Transition Time: 2025-08-08T19:59:06Z Message: Observed Generation: 1 Reason: Accepted Status: True Type: Accepted Last Transition Time: 2025-08-08T19:59:06Z Message: Observed Generation: 1 Reason: ResolvedRefs Status: True Type: ResolvedRefs Last Transition Time: 2025-08-08T19:59:06Z Message: Observed Generation: 1 Reason: ProgrammingSucceeded Status: True Type: Programmed Controller Name: networking.gke.io/gateway Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 31m sc-gateway-controller default/gcp-wasm-plugin Normal SYNC 2m1s (x7 over 26m) sc-gateway-controller Attachment of WasmPlugin "default/gcp-wasm-plugin" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} was a success Normal SYNC 2m1s (x7 over 26m) sc-gateway-controller All the object references were able to be resolved for WasmPlugin "default/gcp-wasm-plugin" bound to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} Normal SYNC 2m1s (x7 over 26m) sc-gateway-controller Programming of WasmPlugin "default/gcp-wasm-plugin" to AncestorRef {Group: "gateway.networking.k8s.io", Kind: "Gateway", Namespace: "default", Name: "external-http", SectionName: nil, Port: nil} was a success
Kirim traffic ke aplikasi Anda.
Setelah Gateway, Rute, dan aplikasi di-deploy di cluster, Anda dapat meneruskan traffic ke aplikasi.
Untuk mengakses aplikasi, Anda perlu menemukan alamat IP Gateway Anda.
Di terminal, gunakan perintah berikut:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"Ganti
GATEWAY_NAMEdengan nama Gateway Anda.Perintah ini menampilkan alamat IP Gateway. Dalam perintah lanjutan, ganti
GATEWAY_IP_ADDRESSdengan alamat IP dari output.Uji pembaruan jalur dengan membuka layanan toko versi
serviceextensionsdistore.example.com/serviceextensions:curl https://store.example.com/serviceextensions --resolve store.example.com:443:GATEWAY_IP_ADDRESS --cacert cacert.pem -vOutput menampilkan
Hello World.
Mengelola resource GCPWasmPlugin
Anda dapat mengupdate CRD GCPWasmPlugin dan memantau plugin.
Perbarui GCPWasmPlugin
Untuk memperbarui resource GCPWasmPlugin, ikuti langkah-langkah berikut:
Lakukan perubahan di manifes
GCPWasmPluginAnda dan ikuti langkah-langkah yang dijelaskan dalam Men-deployGCPWasmPlugin.Misalnya, untuk memiliki dua versi plugin, dengan satu versi melayani traffic dan yang lainnya tidak, perbarui file
wasm-plugin.yamlAnda menjadi berikut:kind: GCPWasmPlugin apiVersion: networking.gke.io/v1 metadata: name: gcp-wasm-plugin spec: versions: - name: wasm-plugin-version-v1 description: "Serving Wasm Plugin version" image: "us-docker.pkg.dev/service-extensions-samples/plugins/local-reply:main" weight: 1000000 - name: wasm-plugin-version-v2 description: "Non serving Wasm Plugin version" image: "us-docker.pkg.dev/service-extensions-samples/plugins/local-reply:main" weight: 0 logConfig: enabled: true sampleRate: 1000000 minLogLevel: INFODalam contoh ini, hal berikut berlaku:
wasm-plugin-version-v1memilikiweight1000000, yang berarti ia melayani semua traffic.wasm-plugin-version-v2memilikiweight0, yang berarti model tersebut tidak menayangkan traffic apa pun.
Untuk memastikan Gateway diupdate, jalankan perintah berikut. Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan:
kubectl describe gateway GATEWAY_NAMEGanti
GATEWAY_NAMEdengan nama Gateway Anda.
Memantau GCPWasmPlugin
Untuk melihat metrik GCPWasmPlugin di konsol Google Cloud , lihat
Memantau dari perspektif plugin.
Saat Anda mencapai langkah dalam panduan yang mengharuskan Anda memilih nilai dari daftar
Filter versi plugin, cari format
prefix−WASM_PLUGIN_VERSION_NAME_FROM_FILE−suffix, dengan
WASM_PLUGIN_VERSION_NAME_FROM_FILE adalah nama versi spesifik yang Anda tentukan dalam
file konfigurasi GCPWasmPlugin.
Memecahkan masalah ekstensi traffic di Gateway
Bagian ini memberikan tips pemecahan masalah untuk mengonfigurasi ekstensi traffic di Gateway.
Gateway tidak ditemukan
Error berikut menunjukkan bahwa resource Gateway yang ditentukan di kolom
targetRefs dari resource GCPTrafficExtension atau GCPRoutingExtension
tidak ada:
error: failed to create resource: GCPTrafficExtension.networking.gke.io "my-traffic-extension" is invalid: spec.gatewayRef: gateway "my-gateway" not found in namespace "default"
Untuk mengatasi masalah ini, pastikan resource Gateway yang ditentukan di kolom
targetRefs dari resource GCPTrafficExtension atau GCPRoutingExtension
ada di namespace yang ditentukan.
Layanan atau port layanan tidak ditemukan
Error berikut menunjukkan bahwa Layanan atau port Layanan yang ditentukan di kolom
backendRef pada resource GCPTrafficExtension atau GCPRoutingExtension
tidak ada:
error: failed to create resource: GCPTrafficExtension.networking.gke.io "my-traffic-extension" is invalid: spec.service: service "callout-service" not found in namespace "default"
Untuk mengatasi masalah ini, pastikan Service dan port Service yang ditentukan di kolom
backendRef resource GCPTrafficExtension atau GCPRoutingExtension
ada di namespace yang ditentukan.
Tidak ada endpoint jaringan di NEG
Error berikut menunjukkan bahwa tidak ada endpoint jaringan di NEG yang terkait dengan Service yang ditentukan di kolom backendRef dari resource GCPTrafficExtension atau GCPRoutingExtension:
error: failed to create resource: GCPTrafficExtension.networking.gke.io "my-traffic-extension" is invalid: spec.service: no network endpoints found for service "callout-service"
Untuk mengatasi masalah ini, pastikan bahwa Service yang ditentukan di kolom backendRef
pada resource GCPTrafficExtension atau GCPRoutingExtension memiliki endpoint
jaringan.
Tidak ada balasan atau balasan dengan error saat mengirim permintaan
Jika Anda tidak menerima balasan, atau jika Anda menerima balasan dengan error saat Anda mengirim permintaan, hal ini mungkin menunjukkan bahwa Layanan info tidak berfungsi dengan benar.
Untuk mengatasi masalah ini, periksa log Layanan panggilan untuk menemukan error.
Kode error 404 di payload JSON
Error berikut menunjukkan bahwa Service anotasi tidak ditemukan atau tidak merespons permintaan:
{
"error": {
"code": 404,
"message": "Requested entity was not found.",
"status": "NOT_FOUND"
}
}
Untuk mengatasi masalah ini, pastikan Layanan info promo berjalan, memproses di port yang benar, dan dikonfigurasi dengan benar di resource GCPTrafficExtension atau GCPRoutingExtension.
Kode error 500 di payload JSON
Error berikut menunjukkan bahwa Layanan balon teks mengalami error server internal:
{
"error": {
"code": 500,
"message": "Internal server error.",
"status": "INTERNAL"
}
}
Untuk mengatasi masalah ini, periksa log Layanan panggilan untuk mengidentifikasi penyebab error server internal.
GCPWasmPlugin tidak ada
Error berikut menunjukkan bahwa resource GCPWasmPlugin tidak ada di project Anda:
Status:
Ancestors:
Ancestor Ref:
Group: gateway.networking.k8s.io
Kind: Gateway
Name: external-http
Namespace: default
Conditions:
Last Transition Time: 2025-03-06T16:27:57Z
Message:
Reason: Accepted
Status: True
Type: Accepted
Last Transition Time: 2025-03-06T16:27:57Z
Message: error cause: invalid-wasm-plugin: GCPWasmPlugin default/my-wasm-plugin in GCPTrafficExtension default/my-gateway-plugin-extension does not exist
Reason: GCPWasmPluginNotFound
Status: False
Type: ResolvedRefs
Controller Name: networking.gke.io/gateway
Untuk mengatasi masalah ini, buat
GCPWasmPlugin yang sesuai di project Google Cloud atau
arahkan ekstensi ke
GCPWasmPlugin yang ada.
Langkah berikutnya
- Pelajari GKE Inference Gateway.
- Pelajari cara Menyajikan LLM dengan GKE Inference Gateway.
- Pelajari cara Melihat metrik kemampuan observasi.