Halaman ini menjelaskan cara Google Kubernetes Engine (GKE) menggunakan Ekstensi Layanan untuk menambahkan logika kustom ke Cloud Load Balancing.
Halaman ini ditujukan untuk 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:
Ringkasan
GKE menggunakan Ekstensi Layanan untuk menambahkan logika kustom ke Cloud Load Balancing. Ekstensi dilampirkan ke Gateway
dan
mereferensikan Service
atau GoogleAPIServiceName
. GoogleAPIServiceName
hanya
didukung untuk GCPTrafficExtensions
.
Anda dapat mengubah header dan payload HTTP untuk permintaan dan respons, atau mengontrol pemilihan layanan backend atau kebijakan keamanan. Anda dapat menggunakan Ekstensi Layanan untuk tugas seperti pemisahan 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 pemilihan rute traffic. Fitur ini didukung untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional.Gambar: Cara kerja `GCPRoutingExtension` dengan Gateway GCPTrafficExtension
: ekstensi ini menyisipkan logika kustom ke Cloud Load Balancing. Hal ini memungkinkan layanan ekstensi mengubah header dan payload permintaan dan respons.GCPTrafficExtension
tidak memengaruhi pemilihan layanan backend atau kebijakan keamanan layanan backend.Gambar: Cara kerja `GCPTrafficExtension` dengan Gateway
Google Cloud Kompatibilitas Ekstensi Layanan dengan GatewayClass
Tabel berikut menjelaskan kompatibilitas ekstensi layanan Google Cloud dengan GatewayClass yang berbeda:
GatewayClass | GCPRoutingExtension |
GCPTrafficExtension |
---|---|---|
gke-l7-rilb |
Didukung | Didukung |
gke-l7-regional-external-managed
|
Didukung | Didukung |
gke-l7-global-external-managed |
Tidak didukung | Didukung |
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan 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
gcloud components update
.
Aktifkan Compute Engine API, Network Services API, dan Model Armor API jika diperlukan.
Buka Mengaktifkan 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.
Pelajari kuota dan batas di Kuota Ekstensi Layanan.
Jika Anda ingin menggunakan pencocok Common Expression Language (CEL), tinjau atribut dan operator yang didukung di referensi bahasa pencocok CEL.
Tinjau batasan dan keterbatasan untuk Ekstensi Layanan.
Persyaratan GKE Gateway Controller
- Cluster Anda harus menggunakan GKE versi 1.28 atau yang lebih baru.
- Cluster Anda harus mengaktifkan Gateway API.
- Anda harus memiliki resource Gateway yang dikonfigurasi.
- 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 hanya didukung untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional (gke-l7-regional-external-managed dan Class Gateway gke-l7-rilb ) dan tidak didukung oleh Class Gateway gke-l7-global-external-managed . |
Rantai dan spesifikasi ekstensi |
|
Pengaturan waktu dan pencocokan |
|
Header dan metadata |
|
Acara |
|
GCPTrafficExtension |
|
googleAPIServiceName dan backendRef |
Saat mereferensikan Layanan yang menggunakan backendRef di Ekstensi, Anda harus memenuhi kondisi
berikut:
|
Mengonfigurasi Ekstensi Layanan GKE
Anda dapat menyesuaikan pemilihan rute traffic, mengubah payload permintaan atau respons, dan berintegrasi dengan layanan eksternal dengan mengonfigurasi Ekstensi Layanan GKE. Gateway tidak memiliki Ekstensi Layanan secara default.
Untuk mengonfigurasi Ekstensi Layanan GKE:
Men-deploy Gateway: untuk mengonfigurasi ekstensi Layanan GKE, Anda harus men-deploy Gateway terlebih dahulu, yang mengarahkan traffic eksternal ke cluster Anda. Ini dapat berupa Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi eksternal regional, atau Gateway Load Balancer Aplikasi internal regional.
Untuk informasi selengkapnya tentang men-deploy Gateway, lihat Men-deploy Gateway.
Men-deploy Layanan info backend: membuat Layanan Kubernetes yang mewakili layanan backend untuk eksekusi logika kustom. Load balancer memanggil layanan ini.
Mengonfigurasi Ekstensi Layanan: konfigurasikan Ekstensi Layanan yang sesuai berdasarkan jenis dan persyaratan load balancer Anda.
GCPRoutingExtension
untuk Gateway regional: gunakan ekstensi ini untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional untuk menerapkan logika pemilihan rute kustom dalam region.GCPTrafficExtension
untuk 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 perubahan header atau pemeriksaan payload, di berbagai jenis load balancer.
Men-deploy layanan info backend
Layanan info 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 pemilihan rute traffic.
Untuk men-deploy layanan backend yang dapat berfungsi sebagai info untuk Gateway Anda, lakukan langkah-langkah berikut:
(Opsional) Buat secret untuk TLS: Perintah ini membuat secret Kubernetes jenis TLS yang berisi sertifikat TLS dan kunci pribadi Anda.
Untuk membuat secret TLS bagi layanan info Anda, ganti kode berikut:
SECRET_NAME
: nama secret untuk layanan callout 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_NAME
Ganti
SECRET_NAME
dengan nama secret untuk layanan callout Anda.Outputnya akan mirip dengan berikut ini:
NAME TYPE DATA AGE SECRET_NAME kubernetes.io/tls 2 12s
Tentukan resource Deployment dan Layanan.
Anda harus menentukan hal berikut:
- Deployment: untuk mengelola pod aplikasi yang berisi logika kustom untuk Ekstensi Layanan Anda.
- Layanan: untuk mengekspos pod aplikasi yang dikelola oleh Deployment sebagai layanan jaringan.
Buat contoh manifes
extension-service-app.yaml
yang memiliki definisi Deployment dan Layanan: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: store
Terapkan 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=store
Setelah aplikasi mulai berjalan, output-nya akan mirip dengan berikut:
NAME READY STATUS RESTARTS AGE extension-service-app-85f466bc9b-b5mf4 1/1 Running 0 7s
Pastikan bahwa Layanan telah di-deploy:
kubectl get service extension-service
Outputnya 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 alur 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 Anda 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: 8080
Ganti
GATEWAY_NAME
dengan nama Gateway Anda.Terapkan manifes
store-route.yaml
:kubectl apply -f store-route.yaml
Tentukan
GCPRoutingExtension
.Simpan konfigurasi
GCPRoutingExtension
dalam filegcp-routing-extension.yaml
contoh: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: 443
Ganti
GATEWAY_NAME
dengan nama Gateway Anda.Terapkan manifes contoh ke cluster Anda:
kubectl apply -f gcp-routing-extension.yaml
Verifikasi konfigurasi
GCPRoutingExtension
dan binding-nya ke Gateway.Periksa deployment
GCPRoutingExtension
:kubectl describe gcproutingextension my-gateway-extension
Outputnya 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 bernamamy-gateway-extension
, dalam namespace default. Output menampilkan kolomSpec
, yang berisi definisi perilaku ekstensi yang seharusnya.Verifikasi binding Gateway:
Pastikan
GCPRoutingExtension
terikat ke Gateway. Tindakan ini mungkin memerlukan waktu beberapa menit:kubectl describe gateway GATEWAY_NAME
Outputnya 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 menunjukkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resource Google Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-route-extensions
mengonfirmasi binding gateway keGCPRoutingExtension
.Periksa status ekstensi dengan mengonfirmasi bahwa
GCPRoutingExtension
memiliki statusReconciled
dengan alasanReconciliationSucceeded
. Perintah ini mungkin memerlukan waktu beberapa menit.kubectl describe gcproutingextension my-gateway-extension
Outputnya 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: ReconciliationSucceeded Status: True Type: Reconciled 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 success
Kolom
Status.Conditions
menampilkan kondisiReconciled
denganStatus: True
danReason: ReconciliationSucceeded
.Benar dan Alasan:
ReconciliationSucceeded
. Informasi ini mengonfirmasi bahwa ekstensi berhasil diterapkan.
Kirim traffic ke aplikasi Anda.
Setelah Gateway, Route, dan aplikasi di-deploy di cluster, Anda dapat meneruskan traffic ke aplikasi.
Untuk mengakses aplikasi, Anda perlu menemukan alamat IP Gateway.
Di terminal, gunakan perintah berikut:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
Ganti
GATEWAY_NAME
dengan nama Gateway Anda.Perintah ini menghasilkan alamat IP Gateway. Dalam perintah lanjutan, ganti
GATEWAY_IP_ADDRESS
dengan alamat IP dari output.Uji pembaruan jalur dengan membuka layanan toko versi
serviceextensions
distore.example.com/serviceextensions
:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -v
Outputnya 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" }
Mengonfigurasi 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 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: 8080
Ganti
GATEWAY_NAME
dengan nama Gateway Anda, sepertiinternal-http
,external-http
, atauglobal-external-http
.Terapkan manifes
store-route.yaml
ke cluster Anda:kubectl apply -f store-route.yaml
Tentukan
GCPTrafficExtension
.Simpan konfigurasi
GCPTrafficExtension
ke filegcp-traffic-extension.yaml
contoh: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: 443
Ganti
GATEWAY_NAME
dengan nama Gateway Anda, sepertiinternal-http
,external-http
, atauglobal-external-http
.Terapkan manifes contoh ke cluster Anda:
kubectl apply -f gcp-traffic-extension.yaml
Verifikasi konfigurasi
GCPTrafficExtension
dan binding-nya ke Gateway.Periksa deployment
GCPTrafficExtension
:kubectl describe gcptrafficextension my-traffic-extension
Outputnya 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
GCPTrafficExtension
bernamamy-traffic-extension
dalam namespace default. Class ini menampilkan kolomSpec
, yang berisi definisi perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPTrafficExtension
terikat ke Gateway. Pemrosesan perintah ini mungkin memerlukan waktu beberapa menit:kubectl describe gateway GATEWAY_NAME
Outputnya 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 menunjukkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resource Google Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-traffic-extensions
mengonfirmasi binding.Periksa status ekstensi:
Pastikan
GCPTrafficExtension
memiliki statusReconciled
dengan alasanReconciliationSucceeded
. Pemrosesan perintah ini mungkin memerlukan waktu beberapa menit.kubectl describe gcptrafficextension my-traffic-extension
Outputnya 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: 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: ReconciliationSucceeded Status: True Type: Reconciled 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 success
Kolom
Status.Conditions
menampilkan kondisiReconciled
denganStatus: True
danReason: ReconciliationSucceeded
. Informasi ini mengonfirmasi bahwa ekstensi berhasil diterapkan.
Kirim traffic ke aplikasi Anda.
Setelah Gateway, Route, dan aplikasi di-deploy di cluster, Anda dapat meneruskan traffic ke aplikasi.
Untuk mengakses aplikasi, Anda perlu menemukan alamat IP Gateway.
Di terminal, gunakan perintah berikut:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
Ganti
GATEWAY_NAME
dengan nama Gateway Anda.Perintah ini menghasilkan alamat IP Gateway. Dalam perintah lanjutan, ganti
GATEWAY_IP_ADDRESS
dengan alamat IP dari output.Uji pembaruan jalur dengan membuka layanan toko versi
serviceextensions
distore.example.com/serviceextensions
:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -v
Outputnya 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 }
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 port Layanan atau Layanan yang ditentukan di
kolom backendRef
dari 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 port Layanan dan Layanan 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
dikaitkan dengan Layanan 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 Layanan yang ditentukan di kolom backendRef
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 mengirim permintaan, hal ini mungkin menunjukkan bahwa Layanan info tidak berfungsi dengan benar.
Untuk mengatasi masalah ini, periksa log Layanan info untuk menemukan error.
Kode error 404 dalam payload JSON
Error berikut menunjukkan bahwa Layanan info 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 berjalan, bahwa layanan tersebut
mendengarkan di port yang benar, dan bahwa layanan dikonfigurasi dengan benar di
resource GCPTrafficExtension
atau GCPRoutingExtension
.
Kode error 500 dalam payload JSON
Error berikut menunjukkan bahwa Layanan info mengalami error server internal:
{
"error": {
"code": 500,
"message": "Internal server error.",
"status": "INTERNAL"
}
}
Untuk mengatasi masalah ini, periksa log Layanan info untuk mengidentifikasi penyebab error server internal.
Langkah berikutnya
- Pelajari GKE Inference Gateway.
- Pelajari cara Menayangkan LLM dengan GKE Inference Gateway.
- Pelajari cara Melihat metrik kemampuan observasi.