Questa pagina descrive come Google Kubernetes Engine (GKE) utilizza le estensioni di servizio per aggiungere logica personalizzata al bilanciamento del carico Cloud.
Questa pagina è rivolta agli amministratori di account e di identità GKE e agli sviluppatori che devono configurare la logica di gestione del traffico personalizzata utilizzando le Estensioni di servizio.
Prima di leggere questa pagina, assicurati di conoscere quanto segue:
- Concetti di base sul networking di GKE
- API GKE Gateway
- Controllori GKE Gateway
- GatewayClasses di GKE
Panoramica
GKE utilizza le estensioni di servizio per aggiungere logica personalizzata
in Cloud Load Balancing. Un'estensione si attacca a un Gateway
e fa riferimento a un Service
o a un GoogleAPIServiceName
. GoogleAPIServiceName
è supportato solo per GCPTrafficExtensions
.
Puoi modificare gli intestazioni e i payload HTTP per le richieste e le risposte oppure controllare il routing del traffico senza influire sulla selezione dei servizi di backend o sui criteri di sicurezza. Puoi utilizzare le estensioni di servizio per attività come la suddivisione avanzata del traffico, l'autenticazione personalizzata o la registrazione delle richieste.
Il controller GKE Gateway supporta le seguenti estensioni di servizio:
GCPRoutingExtension
: questa estensione aggiunge logica personalizzata al bilanciamento del carico Cloud per controllare il routing del traffico. È supportato per il bilanciatore del carico delle applicazioni esterno regionale e il bilanciatore del carico delle applicazioni interno regionale.Figura: come funziona "GCPRoutingExtension" con i gateway GCPTrafficExtension
: questa estensione inserisce logica personalizzata nel bilanciamento del carico di Cloud. Consente a un servizio di estensioni di modificare le intestazioni e i payload di richieste e risposte.GCPTrafficExtension
non influisce sulla selezione dei servizi di backend o sui criteri di sicurezza dei servizi di backend.Figura: come funziona "GCPTrafficExtension" con i gateway
Google Cloud Compatibilità di Service Extension con GatewayClasses
La tabella seguente descrive la compatibilità delle Google Cloud estensioni di servizio con diversi GatewayClass:
GatewayClass | GCPRoutingExtension |
GCPTrafficExtension |
---|---|---|
gke-l7-rilb |
Supportato | Supportato |
gke-l7-regional-external-managed
|
Supportato | Supportato |
gke-l7-global-external-managed |
Non supportata | Supportato |
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato l'interfaccia a riga di comando gcloud, ottieni la versione più recente eseguendo
gcloud components update
.
Se necessario, abilita l'API Compute Engine, l'API Network Services e l'API Model Armor.
Vai ad Abilita l'accesso alle API e segui le istruzioni.
Per informazioni dettagliate sui prezzi delle Google Cloud Estensioni di servizio, consulta Prezzi.
Esamina i ruoli e le autorizzazioni richiesti in Controllo dell'accesso alle Estensioni di servizio.
Acquisisci familiarità con le quote e i limiti in Quote di Estensioni di servizio.
Se intendi utilizzare i corrispondenti Common Expression Language (CEL), consulta gli attributi e gli operatori supportati nel riferimento al linguaggio dei corrispondenti CEL.
Esamina le limitazioni e le restrizioni per Service Extensions.
Requisiti di GKE Gateway Controller
- Il cluster deve utilizzare GKE 1.28 o versioni successive.
- Nel cluster deve essere abilitata l'API Gateway.
- Devi avere una risorsa gateway configurata.
- Devi disporre di una risorsa HTTPRoute configurata.
Restrizioni e limitazioni
La tabella seguente elenca le limitazioni associate alla configurazione delle estensioni di servizio gateway in GKE:
Categoria | Restrizioni e limitazioni |
---|---|
Bilanciatore del carico | GCPRoutingExtension è supportato solo per i bilanciatori del carico delle applicazioni esterni regionali e per i bilanciatori del carico delle applicazioni interni regionali (classi di gateway gke-l7-regional-external-managed e gke-l7-rilb ) e non è supportato dalla classe di gateway gke-l7-global-external-managed . |
Catena e specifica dell'estensione |
|
Tempistiche e corrispondenza |
|
Intestazione e metadati |
|
Evento |
|
GCPTrafficExtension |
|
googleAPIServiceName e backendRef |
Quando fai riferimento a un servizio che utilizza backendRef in un'estensione, devi soddisfare le seguenti condizioni:
|
Configurare le estensioni di servizio GKE
Puoi personalizzare il routing del traffico, modificare i payload di richiesta o risposta e integrarti con servizi esterni configurando le Estensioni di servizio GKE. I gateway non hanno Estensioni di servizio per impostazione predefinita.
Per configurare le estensioni di servizio GKE:
Esegui il deployment di un gateway: per configurare un'estensione del servizio GKE, devi prima eseguire il deployment di un gateway che indirizzi il traffico esterno al tuo cluster. Può essere un bilanciatore del carico delle applicazioni esterno globale, un bilanciatore del carico delle applicazioni esterno regionale o un gateway bilanciatore del carico delle applicazioni interno regionale.
Per ulteriori informazioni sul deployment dei gateway, consulta Eseguire il deployment dei gateway.
Esegui il deployment di un servizio di callout di backend: crea un servizio Kubernetes che rappresenti il servizio di backend per l'esecuzione della logica personalizzata. Il bilanciatore del carico richiama questo servizio.
Configura le estensioni di servizio: configura le estensioni di servizio appropriate in base al tipo e ai requisiti del bilanciatore del carico.
GCPRoutingExtension
per i gateway regionali: utilizza questa estensione per i bilanciatori del carico delle applicazioni esterni e interni regionali per implementare una logica di routing personalizzata all'interno della regione.GCPTrafficExtension
per gateway esterni globali, esterni regionali e interni: utilizza questa estensione per i bilanciatori del carico delle applicazioni esterni globali, esterni regionali e interni regionali per eseguire la manipolazione del traffico, ad esempio la modifica dell'intestazione o l'ispezione del payload, su vari tipi di bilanciatori del carico.
Esegui il deployment di un servizio di callout di backend
Un servizio di callout implementa la logica personalizzata per le estensioni di servizio Gateway in GKE. Il gateway richiama queste applicazioni di backend, in base alle configurazioni GCPTrafficExtension
o GCPRoutingExtension
, per modificare o instradare il traffico.
Esegui il deployment di un servizio callout per aggiungere logica personalizzata al tuo gateway. Questo servizio indipendente gestisce l'elaborazione personalizzata, ad esempio la manipolazione dell'intestazione, le trasformazioni del payload o il routing del traffico.
Per eseguire il deployment di un servizio di backend che possa fungere da callout per il tuo gateway, segui questi passaggi:
(Facoltativo) Crea un secret per TLS: questo comando crea un secret Kubernetes di tipo TLS contenente il certificato TLS e la chiave privata.
Per creare il secret TLS per il servizio callout, sostituisci quanto segue:
SECRET_NAME
: il nome del secret per il servizio di calloutpath-to-cert
: i percorsi dei file del certificatopath-to-key
: i percorsi file della chiave
Per verificare che il segreto sia stato aggiunto, esegui questo comando:
kubectl get secrets SECRET_NAME
Sostituisci
SECRET_NAME
con il nome della chiave segreta per il servizio di callout.L'output dovrebbe essere simile al seguente:
NAME TYPE DATA AGE SECRET_NAME kubernetes.io/tls 2 12s
Definisci le risorse di Deployment e Service.
Devi definire quanto segue:
- Deployment: per gestire i pod di applicazioni che contengono la logica personalizzata per le estensioni di servizio.
- Servizio: per esporre i pod dell'applicazione gestiti dal deployment come servizio di rete.
Crea un manifest di esempio
extension-service-app.yaml
con le definizioni di deployment e servizio: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
Applica il manifest
extension-service-app.yaml
:kubectl apply -f extension-service-app.yaml
Verifica la configurazione:
Verifica che l'applicazione sia stata dispiata:
kubectl get pod --selector app=store
Una volta avviata l'applicazione, l'output è simile al seguente:
NAME READY STATUS RESTARTS AGE extension-service-app-85f466bc9b-b5mf4 1/1 Running 0 7s
Verifica che il servizio sia stato disegnato:
kubectl get service extension-service
L'output è simile al seguente, che mostra un servizio per ogni deployment del negozio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE extension-service ClusterIP 34.118.225.9 <none> 443/TCP 2m40s
Configura le estensioni di servizio
Puoi configurare un GCPRoutingExtension
o un GCPTrafficExtension
per personalizzare il flusso di traffico.
Configurare GCPRoutingExtension
per i gateway regionali
Puoi reindirizzare il traffico utilizzando un GCPRoutingExtension
. Per configurare un
GCPRoutingExtension
, aggiorna HTTPRoute per specificare le richieste per l'service-extensions.com
host.
Aggiorna HTTPRoute. Modifica HTTPRoute in modo da includere i nomi host o i percorsi che attiveranno l'estensione di routing.
Salva il seguente manifest di esempio come 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
Sostituisci
GATEWAY_NAME
con il nome del gateway.Applica il manifest
store-route.yaml
:kubectl apply -f store-route.yaml
Definisci il
GCPRoutingExtension
.Salva la configurazione
GCPRoutingExtension
nel file di esempiogcp-routing-extension.yaml
: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
Sostituisci
GATEWAY_NAME
con il nome del gateway.Applica il manifest di esempio al cluster:
kubectl apply -f gcp-routing-extension.yaml
Verifica la configurazione di
GCPRoutingExtension
e la relativa associazione al gateway.Controlla il deployment di
GCPRoutingExtension
:kubectl describe gcproutingextension my-gateway-extension
L'output è simile al seguente:
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>
L'output mostra i dettagli del
GCPRoutingExtension
, denominatomy-gateway-extension
, nello spazio dei nomi predefinito. L'output mostra il campoSpec
, che contiene la definizione del comportamento dell'estensione.Verifica l'associazione del gateway:
Verifica che
GCPRoutingExtension
sia associato al gateway. L'operazione potrebbe richiedere alcuni minuti:kubectl describe gateway GATEWAY_NAME
L'output è simile al seguente:
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 ...
L'output mostra le annotazioni, che GKE utilizza per memorizzare i collegamenti tra il gateway e le risorseGoogle Cloud sottostanti. L'annotazione
networking.gke.io/lb-route-extensions
conferma il binding del gateway aGCPRoutingExtension
.Controlla lo stato dell'estensione verificando che
GCPRoutingExtension
abbia uno statoReconciled
con il motivoReconciliationSucceeded
. L'esecuzione di questo comando potrebbe richiedere alcuni minuti.kubectl describe gcproutingextension my-gateway-extension
L'output è simile al seguente:
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
Il campo
Status.Conditions
mostra una condizioneReconciled
conStatus: True
eReason: ReconciliationSucceeded
.Vero e Motivo:
ReconciliationSucceeded
. Queste informazioni confermano che l'estensione è stata applicata correttamente.
Invia traffico alla tua applicazione.
Dopo aver eseguito il deployment di gateway, route e applicazione nel cluster, puoi trasmettere il traffico all'applicazione.
Per accedere all'applicazione, devi trovare l'indirizzo IP del gateway.
Nel terminale, utilizza il seguente comando:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
Sostituisci
GATEWAY_NAME
con il nome del gateway.Questo comando restituisce l'indirizzo IP del gateway. Nei comandi successivi, sostituisci
GATEWAY_IP_ADDRESS
con l'indirizzo IP dell'output.Testa l'aggiornamento del percorso passando alla versione
serviceextensions
del servizio dello store all'indirizzostore.example.com/serviceextensions
:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -v
L'output è simile al seguente:
{ "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" }
Configura GCPTrafficExtension
Puoi utilizzare un GCPTrafficExtension
per usufruire delle funzionalità avanzate di gestione del traffico all'interno del tuo Google Cloud ambiente. Puoi configurare questa estensione su bilanciatori del carico delle applicazioni esterni globali, bilanciatori del carico delle applicazioni esterni regionali e bilanciatori del carico delle applicazioni interni regionali. Puoi utilizzare GCPTrafficExtension
per implementare logica personalizzata per richieste e risposte, routing sofisticato, trasformazioni e criteri di sicurezza.
Aggiorna HTTPRoute. Modifica HTTPRoute in modo da includere nomi host o percorsi che attiveranno l'estensione del traffico.
Salva il seguente manifest di esempio come 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
Sostituisci
GATEWAY_NAME
con il nome del tuo gateway, ad esempiointernal-http
,external-http
oglobal-external-http
.Applica il manifest
store-route.yaml
al cluster:kubectl apply -f store-route.yaml
Definisci il
GCPTrafficExtension
.Salva la configurazione
GCPTrafficExtension
nel filegcp-traffic-extension.yaml
di esempio: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
Sostituisci
GATEWAY_NAME
con il nome del gateway, comeinternal-http
,external-http
oglobal-external-http
.Applica il manifest di esempio al cluster:
kubectl apply -f gcp-traffic-extension.yaml
Verifica la configurazione di
GCPTrafficExtension
e la relativa associazione al gateway.Controlla il deployment di
GCPTrafficExtension
:kubectl describe gcptrafficextension my-traffic-extension
L'output è simile al seguente:
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>
L'output mostra i dettagli dell'
GCPTrafficExtension
my-traffic-extension
nello spazio dei nomi predefinito. Mostra il campoSpec
, che contiene la definizione del comportamento dell'estensione.Verifica l'associazione del gateway:
Verifica che
GCPTrafficExtension
sia associato al gateway. Il completamento di questo comando potrebbe richiedere alcuni minuti:kubectl describe gateway GATEWAY_NAME
L'output è simile al seguente:
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 ...
L'output mostra le annotazioni, che GKE utilizza per memorizzare i link tra il gateway e le risorse Google Cloud sottostanti. L'annotazione
networking.gke.io/lb-traffic-extensions
conferma il binding.Controlla lo stato dell'estensione:
Verifica che
GCPTrafficExtension
abbia uno statoReconciled
con il motivoReconciliationSucceeded
. Il completamento di questo comando potrebbe richiedere alcuni minuti.kubectl describe gcptrafficextension my-traffic-extension
L'output è simile al seguente:
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
Il campo
Status.Conditions
mostra una condizioneReconciled
conStatus: True
eReason: ReconciliationSucceeded
. Queste informazioni confermano che l'estensione è stata applicata correttamente.
Invia traffico alla tua applicazione.
Dopo aver eseguito il deployment di gateway, route e applicazione nel cluster, puoi trasmettere il traffico all'applicazione.
Per accedere all'applicazione, devi trovare l'indirizzo IP del gateway.
Nel terminale, utilizza il seguente comando:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
Sostituisci
GATEWAY_NAME
con il nome del gateway.Questo comando restituisce l'indirizzo IP del gateway. Nei comandi successivi, sostituisci
GATEWAY_IP_ADDRESS
con l'indirizzo IP dell'output.Testa l'aggiornamento del percorso passando alla versione
serviceextensions
del servizio dello store all'indirizzostore.example.com/serviceextensions
:curl http://store.example.com/serviceextensions --resolve store.example.com:80:GATEWAY_IP_ADDRESS -v
L'output è simile al seguente:
{ * 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 }
Risolvere i problemi relativi alle estensioni di traffico nei gateway
Questa sezione fornisce suggerimenti per la risoluzione dei problemi relativi alla configurazione delle estensioni di traffico su Gateway.
Gateway non trovato
Il seguente errore indica che la risorsa Gateway specificata nel
campo targetRefs
della risorsa GCPTrafficExtension
o GCPRoutingExtension
non esiste:
error: failed to create resource: GCPTrafficExtension.networking.gke.io "my-traffic-extension" is invalid: spec.gatewayRef: gateway "my-gateway" not found in namespace "default"
Per risolvere il problema, assicurati che la risorsa Gateway specificata nel
campo targetRefs
della risorsa GCPTrafficExtension
o GCPRoutingExtension
esista nello spazio dei nomi specificato.
Servizio o porta del servizio non trovati
Il seguente errore indica che il servizio o la porta del servizio specificati nel
backendRef
campo della risorsa GCPTrafficExtension
o GCPRoutingExtension
non esiste:
error: failed to create resource: GCPTrafficExtension.networking.gke.io "my-traffic-extension" is invalid: spec.service: service "callout-service" not found in namespace "default"
Per risolvere il problema, assicurati che il servizio e la porta del servizio specificati nel
campo backendRef
della risorsa GCPTrafficExtension
o GCPRoutingExtension
esistano nello spazio dei nomi specificato.
Nessun endpoint di rete nel NEG
Il seguente errore indica che non sono presenti endpoint di rete nel gruppo NEG associati al servizio specificato nel campo backendRef
della risorsa GCPTrafficExtension
o 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"
Per risolvere il problema, assicurati che il servizio specificato nel campo backendRef
della risorsa GCPTrafficExtension
o GCPRoutingExtension
abbia endpoint di rete.
Nessuna risposta o risposta con un errore durante l'invio della richiesta
Se non ricevi una risposta o se ricevi una risposta con un errore quando invii una richiesta, è possibile che il servizio di callout non funzioni correttamente.
Per risolvere il problema, controlla la presenza di errori nei log del servizio di callout.
Codice di errore 404 nel payload JSON
Il seguente errore indica che il servizio di callout non è stato trovato o non risponde alla richiesta:
{
"error": {
"code": 404,
"message": "Requested entity was not found.",
"status": "NOT_FOUND"
}
}
Per risolvere il problema, assicurati che il servizio di callout sia in esecuzione, che ascolti sulla porta corretta e che sia configurato correttamente nella risorsa GCPTrafficExtension
o GCPRoutingExtension
.
Codice di errore 500 nel payload JSON
Il seguente errore indica che il servizio di callout sta riscontrando un errore interno del server:
{
"error": {
"code": 500,
"message": "Internal server error.",
"status": "INTERNAL"
}
}
Per risolvere il problema, controlla i log del servizio di callout per identificare la causa dell'errore interno del server.
Passaggi successivi
- Scopri di più su GKE Inference Gateway.
- Scopri come pubblicare un modello LLM con GKE Inference Gateway.
- Scopri come visualizzare le metriche di osservabilità.