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:
Ringkasan
GKE menggunakan Ekstensi Layanan untuk menambahkan logika kustom ke Cloud Load Balancing. Ekstensi dilampirkan ke Gateway
dan
mereferensikan Service
atau GoogleAPIServiceName
. GoogleAPIServiceName
didukung
hanya untuk GCPTrafficExtensions
.
Anda dapat mengubah header dan payload HTTP untuk permintaan dan respons, atau mengontrol perutean traffic, tanpa memengaruhi pemilihan layanan backend atau kebijakan keamanan. Anda dapat menggunakan Ekstensi Layanan untuk tugas seperti pemisahan traffic lanjutan, autentikasi kustom, atau pencatatan permintaan.
Pengontrol Gateway GKE mendukung Ekstensi Layanan berikut:
GCPRoutingExtension
: ekstensi ini menambahkan logika kustom ke dalam Cloud Load Balancing untuk mengontrol perutean 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. Dengan demikian, layanan ekstensi dapat mengubah header dan payload permintaan dan respons.GCPTrafficExtension
tidak memengaruhi pemilihan layanan backend atau kebijakan keamanan layanan backend.Gambar: Cara kerja GCPTrafficExtension dengan Gateway
Trusted Cloud by S3NS Kompatibilitas Ekstensi Layanan dengan GatewayClass
Tabel berikut menjelaskan kompatibilitas ekstensi layanan dengan GatewayClass yang berbeda: Trusted Cloud
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 Aktifkan akses ke API dan ikuti petunjuknya.
Untuk mengetahui informasi mendetail tentang harga Trusted 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.
- 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 (Class Gateway gke-l7-regional-external-managed dan 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 Anda mereferensikan Layanan yang menggunakan backendRef dalam Ekstensi, Anda harus memenuhi
kondisi berikut:
|
Mengonfigurasi Ekstensi Layanan GKE
Anda dapat menyesuaikan perutean 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 mengetahui informasi selengkapnya tentang men-deploy Gateway, lihat Men-deploy Gateway.
Men-deploy Layanan panggilan balik backend: buat Layanan Kubernetes yang merepresentasikan layanan backend untuk eksekusi logika kustom. Load balancer memanggil layanan ini.
Konfigurasi Ekstensi Layanan: konfigurasi 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 guna menerapkan logika perutean 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 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 backend yang dapat berfungsi sebagai balon teks 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_NAME
Ganti
SECRET_NAME
dengan nama rahasia untuk layanan panggilan Anda.Outputnya akan mirip dengan berikut ini:
NAME TYPE DATA AGE SECRET_NAME kubernetes.io/tls 2 12s
Tentukan 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.yaml
yang 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: 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, outputnya akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE extension-service-app-85f466bc9b-b5mf4 1/1 Running 0 7s
Pastikan bahwa Service 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 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 perutean.
Simpan contoh manifes 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 sampel ke cluster Anda:
kubectl apply -f gcp-routing-extension.yaml
Verifikasi konfigurasi
GCPRoutingExtension
dan pengikatannya 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 diberi namamy-gateway-extension
, dalam namespace default. Output menampilkan kolomSpec
, yang berisi definisi perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPRoutingExtension
terikat ke Gateway. Proses 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 menampilkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resourceTrusted Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-route-extensions
mengonfirmasi pengikatan 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, 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_NAME
dengan nama Gateway Anda.Perintah ini menampilkan 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" }
Konfigurasi GCPTrafficExtension
Anda dapat menggunakan GCPTrafficExtension
untuk menggunakan kemampuan pengelolaan traffic lanjutan dalam lingkungan Trusted 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 contoh manifes 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, sebagaiinternal-http
,external-http
, atauglobal-external-http
.Terapkan manifes sampel ke cluster Anda:
kubectl apply -f gcp-traffic-extension.yaml
Verifikasi konfigurasi
GCPTrafficExtension
dan pengikatannya 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. File ini menampilkan kolomSpec
, yang berisi definisi tentang perilaku ekstensi.Verifikasi binding Gateway:
Pastikan
GCPTrafficExtension
terikat ke Gateway. Perintah ini mungkin memerlukan waktu beberapa menit untuk selesai: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 menampilkan anotasi, yang digunakan GKE untuk menyimpan link antara Gateway dan resource Trusted Cloud yang mendasarinya. Anotasi
networking.gke.io/lb-traffic-extensions
mengonfirmasi pengikatan.Periksa status ekstensi:
Konfirmasi bahwa
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, 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_NAME
dengan nama Gateway Anda.Perintah ini menampilkan 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 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 Layanan yang ditentukan di kolom backendRef
pada 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 balon 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 promosi berjalan, mendengarkan di port yang benar, dan dikonfigurasi dengan benar di resource GCPTrafficExtension
atau GCPRoutingExtension
.
Kode error 500 di payload JSON
Error berikut menunjukkan bahwa Layanan callout 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.
Langkah berikutnya
- Pelajari GKE Inference Gateway.
- Pelajari cara Menyajikan LLM dengan GKE Inference Gateway.
- Pelajari cara Melihat metrik kemampuan observasi.