Configurazione Ingress


Panoramica

Questa pagina fornisce una panoramica completa di ciò che puoi configurare tramite Kubernetes Ingress su Google Cloud. Il documento confronta anche le funzionalità supportate per Ingress su Google Cloud e fornisce istruzioni per configurare Ingress utilizzando il controller predefinito, i parametri FrontendConfig e i parametri BackendConfig.

Questa pagina è dedicata agli specialisti di networking che progettano e realizzano l'architettura di rete per la loro organizzazione e installano, configurano e supportano le apparecchiature di rete. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Confronto delle funzioni

La tabella seguente fornisce un elenco delle funzionalità supportate per Ingress su Google Cloud. Viene indicata anche la disponibilità della funzionalità, disponibilità generale (GA) o beta.

Classe Ingress Ingress esterno Ingress interno Ingress multi-cluster
Controller Ingress Controller Ingress ospitato da Google
Google Cloud load balancer type Bilanciatore del carico HTTP(S) esterno Bilanciatore del carico HTTP(S) interno Bilanciatore del carico HTTP(S) esterno
Ambito cluster Singolo cluster Singolo cluster Cluster multipli
Ambito del bilanciatore del carico Globale Regionale Globale
Supporto dell'ambiente GKE GKE GKE
Supporto per il VPC condiviso GA GA GA
Annotazioni del servizio
Bilanciamento del carico nativo del container (NEG) GA GA GA
HTTPS dal bilanciatore del carico ai backend GA GA GA
HTTP/2 GA GA
Solo TLS
GA
Annotazioni Ingress
Indirizzi IP statici GA GA GA
Certificati basati sui secret Kubernetes GA GA GA
Certificati SSL con gestione indipendente GA GA GA
Certificati SSL gestiti da Google GA GA
FrontendConfig
Policy SSL GA GA con gateway GA
Reindirizzamento da HTTP a HTTPS GA
1.17.13-gke.2600+GA
GA
BackendConfig
Timeout del servizio di backend GA GA GA
Cloud CDN GA GA
Timeout per svuotamento della connessione GA GA GA
Configurazione personalizzata del controllo di integrità del bilanciatore del carico GA GA GA
Criterio di sicurezza di Google Cloud Armor GA
1.19.10-gke.700G
GA
Configurazione del logging degli accessi HTTP GA GA GA
Identity-Aware Proxy (IAP) GA GA GA
Affinità sessione GA GA GA
Intestazioni delle richieste definite dall'utente GA GA
Intestazioni delle risposte personalizzate GA
1.25-gke+G
GA
1.25-gke+G

BQuesta funzionalità è disponibile in versione beta a partire dalla versione specificata. Le funzionalità senza una versione elencata sono supportate per tutte le versioni GKE disponibili.

GQuesta funzionalità è supportata come GA a partire dalla versione specificata.

Configurazione di Ingress utilizzando il controller predefinito

Non puoi configurare manualmente le funzionalità di LoadBalancer utilizzando Google Cloud SDK o la console Google Cloud . Devi utilizzare le risorse Kubernetes BackendConfig o FrontendConfig.

Quando crei un Ingress utilizzando il controller predefinito, puoi scegliere il tipo di bilanciatore del carico (un bilanciatore del carico delle applicazioni esterno o un bilanciatore del carico delle applicazioni interno) utilizzando un' annotazione sull'oggetto Ingress. Puoi scegliere se GKE crea NEG a livello di zona o se utilizza gruppi di istanze utilizzando un'annotazione su ogni oggetto Service.

Le definizioni di risorse personalizzate (CRD) FrontendConfig e BackendConfig ti consentono di personalizzare ulteriormente il bilanciatore del carico. Queste CRD ti consentono di definire gerarchicamente funzionalità aggiuntive del bilanciatore del carico in modo più strutturato rispetto alle annotazioni. Per utilizzare Ingress (e questi CRD), devi aver abilitato il componente aggiuntivo per il bilanciamento del carico HTTP. I cluster GKE hanno il bilanciamento del carico HTTP abilitato per impostazione predefinita e non devi disabilitarlo.

I FrontendConfig vengono referenziati in un oggetto Ingress e possono essere utilizzati solo con Ingress esterni. I BackendConfig sono a cui fa riferimento un oggetto Service. È possibile fare riferimento agli stessi CRD da più oggetti Service o Ingress per garantire la coerenza della configurazione. Le CRD FrontendConfig e BackendConfig condividono lo stesso ciclo di vita delle risorse Ingress e Service corrispondenti e vengono spesso implementate insieme.

Il seguente diagramma illustra come:

  • Un'annotazione su un oggetto Ingress o MultiClusterIngress fa riferimento a un CRD FrontendConfig. Il CRD FrontendConfig fa riferimento a un criterio SSL Google Cloud.

  • Un'annotazione su un oggetto Service o MultiClusterService fa riferimento a una CRD BackendConfig. La CRD BackendConfig specifica le impostazioni personalizzate per il controllo di integrità del servizio di backend corrispondente.

Panoramica di BackendConfig e FrontendConfig
Figura: panoramica di BackendConfig e FrontendConfig

Associazione di FrontendConfig al tuo Ingress

FrontendConfig può essere utilizzato solo con ingressi esterni.

Puoi associare un FrontendConfig a un Ingress o a un MultiClusterIngress.

In entrata

Utilizza l'annotazione networking.gke.io/v1beta1.FrontendConfig:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    networking.gke.io/v1beta1.FrontendConfig: "FRONTENDCONFIG_NAME"
...

Sostituisci FRONTENDCONFIG_NAME con il nome del tuo FrontendConfig.

MultiClusterIngress

Utilizza l'annotazione networking.gke.io/frontend-config:

apiVersion: networking.gke.io/v1
kind: MultiClusterIngress
metadata:
  annotations:
    networking.gke.io/frontend-config: "FRONTENDCONFIG_NAME"
...

Sostituisci FRONTENDCONFIG_NAME con il nome del tuo FrontendConfig.

Associazione di BackendConfig al tuo Ingress

Puoi utilizzare l'annotazione cloud.google.com/backend-config o beta.cloud.google.com/backend-config per specificare il nome di un BackendConfig.

Stesso BackendConfig per tutte le porte di servizio

Per utilizzare lo stesso BackendConfig per tutte le porte, utilizza la chiave default nell'annotazione. Il controller Ingress utilizza lo stesso BackendConfig ogni volta che crea un servizio di backend del bilanciatore del carico per fare riferimento a una delle porte del servizio.

Puoi utilizzare la chiave default sia per le risorse Ingress che per quelle MultiClusterIngress.

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/backend-config: '{"default": "my-backendconfig"}'
...

BackendConfig univoco per porta di servizio

Per Ingress e MultiClusterIngress, puoi specificare un BackendConfig personalizzato per una o più porte utilizzando una chiave che corrisponde al nome o al numero della porta. Il controller Ingress utilizza il BackendConfig specifico quando crea un servizio di backend del bilanciatore del carico per una porta di servizio a cui viene fatto riferimento.

GKE 1.16-gke.3 e versioni successive

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/backend-config: '{"ports": {
    "SERVICE_REFERENCE_A":"BACKENDCONFIG_REFERENCE_A",
    "SERVICE_REFERENCE_B":"BACKENDCONFIG_REFERENCE_B"
    }}'
spec:
  ports:
  - name: PORT_NAME_1
    port: PORT_NUMBER_1
    protocol: TCP
    targetPort: 50000
  - name: PORT_NAME_2
    port: PORT_NUMBER_2
    protocol: TCP
    targetPort: 8080
...

Tutte le versioni supportate

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/backend-config: '{"ports": {
      PORT_NAME_1:"BACKENDCONFIG_REFERENCE_A",
      PORT_NAME_2:"BACKENDCONFIG_REFERENCE_B"
    }}'
spec:
  ports:
  - name: PORT_NAME_1
    port: PORT_NUMBER_1
    protocol: TCP
    targetPort: 50000
  - name: PORT_NAME_2
    port: PORT_NUMBER_2
    protocol: TCP
    targetPort: 8080
...

Sostituisci quanto segue:

  • BACKENDCONFIG_REFERENCE_A: il nome di un BackendConfig esistente.
  • BACKENDCONFIG_REFERENCE_B: il nome di un BackendConfig esistente.
  • SERVICE_REFERENCE_A: utilizza il valore di PORT_NUMBER_1 o PORT_NAME_1. Questo perché l'annotazione BackendConfig di un servizio può fare riferimento al nome della porta (spec.ports[].name) o al numero della porta (spec.ports[].port).
  • SERVICE_REFERENCE_B: utilizza il valore di PORT_NUMBER_2 o PORT_NAME_2. Questo perché l'annotazione BackendConfig di un servizio può fare riferimento al nome della porta (spec.ports[].name) o al numero della porta (spec.ports[].port).

Quando fai riferimento alla porta del servizio in base al numero, devi utilizzare il valore port anziché il valore targetPort. Il numero di porta utilizzato qui serve solo per il binding di BackendConfig; non controlla la porta a cui il bilanciatore del carico invia il traffico o i probe del controllo di integrità:

  • Quando utilizzi il bilanciamento del carico nativo del container, il bilanciatore del carico invia il traffico a un endpoint in un gruppo di endpoint di rete (corrispondente a un indirizzo IP del pod) sulla porta targetPort del servizio di riferimento (che deve corrispondere a un containerPort per un pod di servizio). In caso contrario, il bilanciatore del carico invia il traffico all'indirizzo IP di un nodo sulla porta del servizio a cui viene fatto riferimento nodePort.

  • Quando utilizzi un BackendConfig per fornire un controllo di integrità del bilanciatore del carico personalizzato, il numero di porta che utilizzi per il controllo di integrità del bilanciatore del carico può differire dal numero spec.ports[].port del servizio. Per informazioni dettagliate sui numeri di porta per i controlli di integrità, vedi Configurazione controllo di integrità integrità.

Configurazione delle funzionalità Ingress tramite i parametri FrontendConfig

La sezione seguente mostra come impostare FrontendConfig per attivare funzionalità Ingress specifiche.

Policy SSL

I criteri SSL ti consentono di specificare un insieme di versioni TLS e cifrari che il bilanciatore del carico utilizza per terminare il traffico HTTPS dai client. Devi prima creare un criterio SSL al di fuori di GKE. Una volta creato, puoi farvi riferimento in un FrontendConfig CRD.

Il campo sslPolicy in FrontendConfig fa riferimento al nome di una policy SSL nello stesso progetto Google Cloud del cluster GKE. Collega il criterio SSL al proxy HTTPS di destinazione, che è stato creato per il bilanciatore del carico HTTP(S) esterno da Ingress. La stessa risorsa FrontendConfig e la stessa policy SSL possono essere referenziate da più risorse Ingress. Se viene modificato un criterio SSL a cui viene fatto riferimento, la modifica viene propagata ai Google Front End (GFE) che alimentano il bilanciatore del carico HTTP(S) esterno creato da Ingress.

Il seguente manifest FrontendConfig abilita una policy SSL denominata gke-ingress-ssl-policy:

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: my-frontend-config
spec:
  sslPolicy: gke-ingress-ssl-policy

Reindirizzamenti da HTTP a HTTPS

Un bilanciatore del carico HTTP esterno può reindirizzare le richieste HTTP non criptate a un bilanciatore del carico HTTPS che utilizza lo stesso indirizzo IP. Quando crei un Ingress con i reindirizzamenti da HTTP a HTTPS abilitati, entrambi i bilanciatori del carico vengono creati automaticamente. Le richieste all'indirizzo IP esterno dell'ingresso sulla porta 80 vengono reindirizzate automaticamente allo stesso indirizzo IP esterno sulla porta 443. Questa funzionalità si basa sui reindirizzamenti da HTTP a HTTPS forniti da Cloud Load Balancing.

Per supportare il reindirizzamento da HTTP a HTTPS, un Ingress deve essere configurato per gestire il traffico HTTP e HTTPS. Se HTTP o HTTPS sono disattivati, il reindirizzamento non funzionerà.

I reindirizzamenti da HTTP a HTTPS vengono configurati utilizzando il campo redirectToHttps in una risorsa personalizzata FrontendConfig. I reindirizzamenti sono abilitati per l'intera risorsa Ingress, quindi tutti i servizi a cui fa riferimento Ingress avranno i reindirizzamenti HTTPS abilitati.

Il seguente file manifest FrontendConfig consente i reindirizzamenti da HTTP a HTTPS. Imposta il campo spec.redirectToHttps.enabled su true per attivare i reindirizzamenti HTTPS. Il campo spec.responseCodeName è facoltativo. Se viene omesso, viene utilizzato un reindirizzamento 301 Moved Permanently.

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: my-frontend-config
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: RESPONSE_CODE

Sostituisci RESPONSE_CODE con una delle seguenti opzioni:

  • MOVED_PERMANENTLY_DEFAULT per restituire un codice di risposta di reindirizzamento 301 (valore predefinito se responseCodeName non è specificato).
  • FOUND per restituire un codice di risposta reindirizzamento 302.
  • SEE_OTHER per restituire un codice di risposta reindirizzamento 303.
  • TEMPORARY_REDIRECT per restituire un codice di risposta reindirizzamento 307.
  • PERMANENT_REDIRECT per restituire un codice di risposta reindirizzamento 308.

Quando i reindirizzamenti sono abilitati, il controller Ingress crea un bilanciatore del carico come mostrato nel seguente diagramma:

Un bilanciatore del carico HTTP esterno solo di reindirizzamento costituito da una regola di forwarding, un proxy HTTP di destinazione e una mappa URL con un reindirizzamento a un bilanciatore del carico HTTPS completo con servizi di backend

Per verificare che il reindirizzamento funzioni, utilizza un comando curl:

curl http://IP_ADDRESS

Sostituisci IP_ADDRESS con l'indirizzo IP del tuo Ingress.

La risposta mostra il codice di risposta reindirizzamento che hai configurato. Ad esempio, il seguente esempio riguarda un FrontendConfig configurato con un reindirizzamento 301: MovedPermanently:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://35.244.160.59/">here</A>.</BODY></HTML>

Configurazione delle funzionalità Ingress tramite i parametri BackendConfig

Le sezioni seguenti mostrano come impostare BackendConfig per attivare funzionalità Ingress specifiche. Le modifiche a una risorsa BackendConfig vengono riconciliate costantemente, quindi non è necessario eliminare e ricreare l'ingresso per visualizzare le modifiche a BackendConfig.

Per informazioni sulle limitazioni di BackendConfig, consulta la sezione Limitazioni.

Timeout del servizio di backend

Puoi utilizzare un BackendConfig per impostare un periodo di timeout del servizio di backend in secondi. Se non specifichi un valore, il valore predefinito è 30 secondi.

Il seguente manifest BackendConfig specifica un timeout di 40 secondi:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: my-backendconfig
spec:
  timeoutSec: 40

Cloud CDN

Puoi abilitare Cloud CDN utilizzando un BackendConfig.

Il seguente manifest BackendConfig mostra tutti i campi disponibili quando viene attivato Cloud CDN:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: my-backendconfig
spec:
  cdn:
    enabled: CDN_ENABLED
    cachePolicy:
      includeHost: INCLUDE_HOST
      includeProtocol: INCLUDE_PROTOCOL
      includeQueryString: INCLUDE_QUERY_STRING
      queryStringBlacklist: QUERY_STRING_DENYLIST
      queryStringWhitelist: QUERY_STRING_ALLOWLIST
    cacheMode: CACHE_MODE
    clientTtl: CLIENT_TTL
    defaultTtl: DEFAULT_TTL
    maxTtl: MAX_TTL
    negativeCaching: NEGATIVE_CACHING
    negativeCachingPolicy:
      code: NEGATIVE_CACHING_CODE
      ttl: NEGATIVE_CACHING_TTL
    requestCoalescing: REQ_COALESCING
    serveWhileStale: SERVE_WHILE_STALE
    signedUrlCacheMaxAgeSec: SIGNED_MAX_AGE
    signedUrlKeys:
      keyName: KEY_NAME
      keyValue: KEY_VALUE
      secretName: SECRET_NAME

Sostituisci quanto segue:

  • CDN_ENABLED: se impostato su true, Cloud CDN è abilitato per questo backend Ingress.
  • INCLUDE_HOST: se impostato su true, le richieste a host diversi vengono memorizzate nella cache separatamente.
  • INCLUDE_PROTOCOL: se impostato su true, le richieste HTTP e HTTPS vengono memorizzate separatamente nella cache.
  • INCLUDE_QUERY_STRING: se impostato su true, i parametri della stringa di query vengono inclusi nella chiave cache in base a queryStringBlacklist o queryStringWhitelist. Se non è impostato nessuno dei due, viene inclusa l'intera stringa di query. Se impostato su false, l'intera stringa di query viene esclusa dalla chiave cache.
  • QUERY_STRING_DENYLIST: specifica un array di stringhe con i nomi dei parametri della stringa di query da escludere dalle chiavi cache. Tutti gli altri parametri sono inclusi. Puoi specificare queryStringBlacklist o queryStringWhitelist, ma non entrambi.
  • QUERY_STRING_ALLOWLIST: specifica un array di stringhe con i nomi dei parametri delle stringhe di query da includere nelle chiavi cache. Tutti gli altri parametri sono esclusi. Puoi specificare queryStringBlacklist o queryStringWhitelist, ma non entrambi.

I seguenti campi sono supportati solo in GKE 1.23.3-gke.900 e versioni successive utilizzando GKE Ingress. Non sono supportati utilizzando Ingress multi-cluster:

Espandi la sezione seguente per visualizzare un esempio che esegue il deployment di Cloud CDN tramite Ingress e poi verifica che i contenuti dell'applicazione vengano memorizzati nella cache.

Timeout per svuotamento della connessione

Puoi configurare il timeout di svuotamento delle connessioni utilizzando un BackendConfig. Il timeout per lo svuotamento della connessione è il tempo, in secondi, di attesa per lo svuotamento delle connessioni. Per la durata specificata del timeout, le richieste esistenti al backend rimosso hanno il tempo di essere completate. Il bilanciatore del carico non invia nuove richieste al backend rimosso. Una volta raggiunto il timeout, tutte le connessioni rimanenti al backend vengono chiuse. La durata del timeout può essere compresa tra 0 e 3600 secondi. Il valore predefinito è 0, il che disattiva anche lo svuotamento della connessione.

Il seguente manifest BackendConfig specifica un timeout di svuotamento della connessione di 60 secondi:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: my-backendconfig
spec:
  connectionDraining:
    drainingTimeoutSec: 60

Configurazione del controllo di integrità personalizzato

Esistono diversi modi in cui GKE configura i controlli di integrità del bilanciatore del caricoGoogle Cloud durante il deployment tramite Ingress. Per scoprire di più su come GKE Ingress esegue il deployment dei controlli di integrità, consulta la sezione Controlli di integrità di Ingress.

Un BackendConfig consente di controllare con precisione le impostazioni del controllo di integrità del bilanciatore del carico.