Linee guida per l'esecuzione di gateway self-hosted in Kubernetes nell'ambiente di produzione
SI APPLICA A: Sviluppatore | Premium
Per eseguire il gateway self-hosted nell'ambiente di produzione, è necessario tenere presenti vari aspetti. Ad esempio, deve essere distribuito in modo a disponibilità elevata, usare i backup di configurazione per gestire le disconnessioni temporanee e molto altro ancora.
Questo articolo fornisce indicazioni su come eseguire un gateway self-hosted in Kubernetes per i carichi di lavoro di produzione per garantire che venga eseguito in modo uniforme e affidabile.
Token di accesso
Senza un token di accesso valido, un gateway self-hosted non può accedere e scaricare i dati di configurazione dall'endpoint del servizio Gestione API associato. Il token di accesso può essere valido per un massimo di 30 giorni. Deve essere rigenerato e il cluster configurato con un nuovo token, manualmente o tramite automazione prima della scadenza.
Quando si automatizza l'aggiornamento dei token, usare questa operazione API di gestione per generare un nuovo token. Per informazioni sulla gestione dei segreti Kubernetes, vedere il sito Web di Kubernetes.
Suggerimento
È anche possibile distribuire il gateway self-hosted in Kubernetes e abilitare l'autenticazione nell'istanza di Gestione API usando Microsoft Entra ID.
Scalabilità automatica
Anche se vengono fornite indicazioni sul numero minimo di repliche per il gateway self-hosted, è consigliabile usare la scalabilità automatica per il gateway self-hosted per soddisfare la domanda del traffico in modo più proattivo.
Esistono due modi per ridimensionare automaticamente il gateway self-hosted orizzontalmente:
- Scalabilità automatica in base all'utilizzo delle risorse (CPU e memoria)
- Scalabilità automatica in base al numero di richieste al secondo
Ciò è possibile tramite la funzionalità Kubernetes nativa o tramite la scalabilità automatica basata su eventi di Kubernetes (KEDA). KEDA è un progetto di incubazione CNF che cerca di semplificare la scalabilità automatica delle applicazioni.
Nota
KEDA è una tecnologia open source che non è supportata dal supporto tecnico di Azure e deve essere gestita dai clienti.
Scalabilità automatica basata sulle risorse
Kubernetes consente di ridimensionare automaticamente il gateway self-hosted in base all'utilizzo delle risorse usando un'utilità di scalabilità automatica orizzontale dei pod. Consente di definire soglie di CPU e memoria e il numero di repliche da aumentare o ridurre.
Un'alternativa consiste nell'usare la scalabilità automatica basata su eventi di Kubernetes (KEDA) che consente di ridimensionare i carichi di lavoro in base a un'ampia gamma di scaler, tra cui CPU e memoria.
Suggerimento
Se si usa già KEDA per ridimensionare altri carichi di lavoro, è consigliabile usare KEDA come ridimensionamento automatico delle app unificato. In caso contrario, è consigliabile basarsi sulla funzionalità kubernetes nativa tramite Horizontal Pod Autoscaler.
Scalabilità automatica basata sul traffico
Kubernetes non fornisce un meccanismo predefinito per la scalabilità automatica basata sul traffico.
La scalabilità automatica basata su eventi di Kubernetes offre alcuni modi per semplificare la scalabilità automatica basata sul traffico:
- È possibile ridimensionare in base alle metriche da un ingresso Kubernetes se sono disponibili in Prometheus o Monitoraggio di Azure usando un scaler risolto
- È possibile installare il componente aggiuntivo HTTP, disponibile in versione beta, e ridimensionare in base al numero di richieste al secondo.
Backup della configurazione
Configurare un volume di archiviazione locale per il contenitore gateway self-hosted, in modo che possa salvare in modo permanente una copia di backup della configurazione scaricata più recente. Se la connettività è inattiva, il volume di archiviazione può usare la copia di backup al riavvio. Il percorso di montaggio del volume deve essere /apim/config
e deve essere di proprietà dell'ID gruppo 1001
. Vedere un esempio in GitHub.
Per informazioni sull'archiviazione in Kubernetes, vedere il sito Web Kubernetes.
Per modificare la proprietà di un percorso montato, vedere l'impostazione securityContext.fsGroup
nel sito Web Kubernetes.
Nota
Per informazioni sul comportamento del gateway self-hosted in presenza di un'interruzione temporanea della connettività di Azure, vedere Panoramica del gateway self-hosted.
Tag dell'immagine del contenitore
Il file YAML fornito nel portale di Azure usa il tag più recente. Questo tag fa sempre riferimento alla versione più recente dell'immagine del contenitore del gateway self-hosted.
È consigliabile usare un tag di versione specifico nell'ambiente di produzione per evitare l'aggiornamento involontario a una versione più recente.
È possibile scaricare un elenco completo dei tag disponibili.
Suggerimento
Quando si esegue l'installazione con Helm, l'assegnazione di tag alle immagini è ottimizzata per l'utente. La versione dell'applicazione del grafico Helm aggiunge il gateway a una determinata versione e non si basa su latest
.
Altre informazioni su come installare un gateway self-hosted di Gestione API in Kubernetes con Helm.
Risorse del contenitore
Per impostazione predefinita, il file YAML fornito nel portale di Azure non specifica le richieste di risorse del contenitore.
È impossibile prevedere e consigliare in modo affidabile la quantità di risorse di CPU e memoria per contenitore e il numero di repliche necessarie per supportare un carico di lavoro specifico. Molti fattori sono in gioco, ad esempio:
- Hardware specifico su cui è in esecuzione il cluster.
- Presenza e tipo di virtualizzazione.
- Numero e frequenza delle connessioni client simultanee.
- Percentuale di richieste.
- Tipologia e numero di criteri configurati.
- Dimensioni del payload e se i payload vengono memorizzati nel buffer o trasmessi.
- Latenza del servizio back-end.
È consigliabile impostare le richieste di risorse su due core e 2 GiB come punto di partenza. Eseguire un test di carico e aumentare/ridurre o ridurre le prestazioni in base ai risultati.
Nomi di dominio personalizzati e certificati SSL
Se si usano nomi di dominio personalizzati per gli endpoint di Gestione API, in particolare se si usa un nome di dominio personalizzato per l'endpoint di gestione, potrebbe essere necessario aggiornare il valore di config.service.endpoint
nel <file gateway-name>.yaml per sostituire il nome di dominio predefinito con il nome di dominio personalizzato. Assicurarsi che l'endpoint di gestione sia accessibile dal pod del gateway self-hosted nel cluster Kubernetes.
In questo scenario, se il certificato SSL usato dall'endpoint di gestione non è firmato da un certificato CA noto, è necessario assicurarsi che il certificato della CA sia considerato attendibile dal pod del gateway self-hosted.
Nota
Con il gateway self-hosted v2, Gestione API fornisce un nuovo endpoint di configurazione: <apim-service-name>.configuration.azure-api.net
. Per questo endpoint i nomi host personalizzati sono supportati e possono essere usati al posto del nome host predefinito.
Criteri DNS
La risoluzione dei nomi DNS svolge un ruolo fondamentale nella capacità di un gateway self-hosted di connettersi alle dipendenze in Azure e inviare chiamate API ai servizi back-end.
Il file YAML fornito nel portale di Azure applica i criteri clusterFirst predefiniti. Questo criterio fa sì che le richieste di risoluzione dei nomi non vengano risolte dal DNS del cluster per l'inoltro al server DNS upstream ereditato dal nodo.
Per informazioni sulla risoluzione dei nomi in Kubernetes, vedere il sito Web Kubernetes. Valutare la possibilità di personalizzare i criteri DNS o la configurazione DNS in base alle esigenze della configurazione.
Criterio traffico esterno
Il file YAML fornito nel portale di Azure imposta il campo externalTrafficPolicy
dell'oggetto Service su Local
. In questo modo viene mantenuto l'indirizzo IP del chiamante (accessibile nel contesto della richiesta) e viene disabilitato il bilanciamento del carico tra nodi, eliminando gli hop di rete causati da esso. Tenere presente che questa impostazione potrebbe causare la distribuzione asimmetrica del traffico nelle distribuzioni con un numero diverso di pod gateway per nodo.
Disponibilità elevata
Il gateway self-hosted è un componente fondamentale nell'infrastruttura e deve essere a disponibilità elevata. Tuttavia, può verificarsi un errore.
Valutare la possibilità di proteggere il gateway self-hosted da interruzioni.
Suggerimento
Quando si esegue l'installazione con Helm, abilitare facilmente la pianificazione a disponibilità elevata abilitando l'opzione di configurazione highAvailability.enabled
.
Altre informazioni su come installare un gateway self-hosted di Gestione API in Kubernetes con Helm.
Protezione da un errore del nodo
Per evitare di subire dei danni a causa di errori del data center o dei nodi, è consigliabile usare un cluster Kubernetes che usa le zone di disponibilità per ottenere una disponibilità elevata a livello di nodo.
Le zone di disponibilità consentono di pianificare il pod del gateway self-hosted nei nodi distribuiti tra le zone usando:
- Vincoli di distribuzione della topologia pod (scelta consigliata - Kubernetes v1.19+)
- Anti-affinità pod
Nota
Se si usa il servizio Azure Kubernetes, vedere come usare le zone di disponibilità in questo articolo.
Protezione dalle interruzioni dei pod
I pod possono riscontrare interruzioni a causa di vari motivi, ad esempio l'eliminazione manuale dei pod, la manutenzione dei nodi e così via.
Prendere in considerazione l'uso dei budget di interruzione dei pod per applicare un numero minimo di pod che siano disponibili in qualsiasi momento.
Proxy HTTP(S)
Il gateway self-hosted fornisce il supporto per il proxy HTTP(S) usando le variabili di ambiente tradizionali HTTP_PROXY
, HTTPS_PROXY
e NO_PROXY
.
Dopo la configurazione, il gateway self-hosted userà automaticamente il proxy per tutte le richieste HTTP(S) in uscita ai servizi back-end.
A partire dalla versione 2.1.5 o successiva, il gateway self-hosted offre osservabilità correlata al proxy delle richieste:
- Controllo API mostrerà passaggi aggiuntivi quando viene usato il proxy HTTP(S) e le relative interazioni.
- Vengono forniti log dettagliati per fornire un'indicazione del comportamento del proxy di richiesta.
Nota
A causa di un problema noto con proxy HTTP che usano l'autenticazione di base, l'uso della convalida dell'elenco di revoche di certificati (CRL) non è supportato. Per altre informazioni, vedere Le impostazioni del gateway self-hosted fanno riferimento a come configurarlo in modo appropriato.
Avviso
Assicurarsi che i requisiti dell'infrastruttura siano stati soddisfatti e che il gateway self-hosted possa comunque connettersi a tali gateway o che alcune funzionalità non funzionino correttamente.
Log e metriche locali
Il gateway self-hosted invia dati di telemetria a Monitoraggio di Azure e Azure Application Insights in base alle impostazioni di configurazione nel servizio Gestione API associato. Quando la connettività ad Azure viene temporaneamente persa, il flusso di dati di telemetria in Azure viene interrotto e i dati vengono persi per la durata dell'interruzione.
È consigliabile usare Informazioni dettagliate contenitore di Monitoraggio di Azure per monitorare i contenitori o configurare il monitoraggio locale per garantire la possibilità di osservare il traffico API e prevenire la perdita di dati di telemetria durante le interruzioni della connettività di Azure.
Spazio dei nomi
Gli spazi dei nomi Kubernetes consentono di dividere un singolo cluster tra più team, progetti o applicazioni. Gli spazi dei nomi forniscono un ambito per le risorse e i nomi. Possono essere associati a una quota di risorse e ai criteri di controllo di accesso.
Il portale di Azure fornisce comandi per creare risorse del gateway self-hosted nello spazio dei nomi predefinito. Questo spazio dei nomi viene creato automaticamente, esiste in ogni cluster e non può essere eliminato. Prendere in considerazione la creazione e la distribuzione di un gateway self-hosted in uno spazio dei nomi separato nell'ambiente di produzione.
Numero di repliche
Il numero minimo di repliche adatte per la produzione è tre, preferibilmente combinato con la pianificazione a disponibilità elevata delle istanze.
Per impostazione predefinita, un gateway self-hosted viene distribuito con una strategia di distribuzione RollingUpdate. Esaminare i valori predefiniti e prendere in considerazione l'impostazione esplicita dei campi maxUnavailable e maxSurge, soprattutto quando si usa un numero di repliche elevato.
Prestazioni
È consigliabile ridurre i log dei contenitori agli avvisi (warn
) per migliorare le prestazioni. Per altre informazioni, vedere le informazioni di riferimento sulla configurazione del gateway self-hosted.
Limitazione delle richieste
La limitazione delle richieste in un gateway self-hosted può essere abilitata usando i criteri di limite di frequenza di Gestione API o limite di frequenza per chiave. Configurare i conteggi dei limiti di frequenza per la sincronizzazione tra le istanze del gateway tra i nodi del cluster esponendo le porte seguenti nella distribuzione Kubernetes per l'individuazione delle istanze:
- Porta 4290 (UDP), per la sincronizzazione della limitazione della frequenza
- Porta 4291 (UDP), per l'invio di heartbeat ad altre istanze
Nota
Il numero di limiti di frequenza in un gateway self-hosted possono essere configurati per la sincronizzazione locale (tra le istanze del gateway nei nodi del cluster), ad esempio tramite la distribuzione del grafico Helm per Kubernetes o usando i modelli di distribuzione del portale di Azure. Tuttavia, i conteggi dei limiti di frequenza non vengono sincronizzati con altre risorse del gateway configurate nell'istanza di Gestione API, incluso il gateway gestito nel cloud.
Sicurezza
Il gateway self-hosted è in grado di essere eseguito come non radice in Kubernetes consentendo ai clienti di eseguire il gateway in modo sicuro.
Ecco un esempio del contesto di protezione per il contenitore del gateway self-hosted:
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1001 # This is a built-in user, but you can use any user ie 1000 as well
runAsGroup: 2000 # This is just an example
privileged: false
capabilities:
drop:
- all
Avviso
L'esecuzione del gateway self-hosted con file system di sola lettura (readOnlyRootFilesystem: true
) non è supportata.
Avviso
Quando si usano certificati CA locali, il gateway self-hosted deve essere eseguito con l'ID utente (UID) 1001
per gestire i certificati della CA. In caso contrario, il gateway non verrà avviato.
Passaggi successivi
- Per ulteriori informazioni sul gateway self-hosted, vedere Panoramica del gateway self-hosted.
- Informazioni su come distribuire il gateway self-hosted di Gestione API nei cluster Kubernetes abilitati per Azure Arc.