Un servizio Kubernetes è un'astrazione che consente di esporre un insieme di pod come singola entità. I servizi sono componenti fondamentali per esporre e gestire le applicazioni containerizzate in un cluster Kubernetes. I servizi in questo blueprint sono progettati in modo standardizzato in considerazione di spazi dei nomi, identità, esposizione dei servizi e comunicazione service-to-service.
Spazi dei nomi
Ogni spazio dei nomi ha il proprio insieme di risorse, come pod, servizi e deployment. I namespace ti consentono di organizzare le applicazioni e di isolarle tra loro. Il blueprint utilizza gli spazi dei nomi per raggruppare i servizi in base alla loro finalità. Ad esempio, puoi creare uno spazio dei nomi per tutti i servizi frontend e uno per i servizi di backend. Questo raggruppamento semplifica la gestione e il controllo dell'accesso ai servizi.
Esposizione del servizio
Un servizio è esposto a internet tramite il controller GKE Gateway. Il controller di gateway GKE crea un bilanciatore del carico utilizzando Cloud Load Balancing in una configurazione multi-cluster e multi-regione. Cloud Load Balancing utilizza l'infrastruttura di rete di Google per fornire al servizio un indirizzo IP anycast che consente l'accesso a bassa latenza al servizio. L'accesso dei client al servizio avviene tramite connessioni HTTPS e le richieste HTTP dei client vengono reindirizzate a HTTPS. Il bilanciatore del carico utilizza Certificate Manager per gestire i certificati pubblici. I servizi sono ulteriormente protetti da Cloud Armor e Cloud CDN. Il seguente diagramma mostra come i servizi sono esposti a internet.
Cloud Service Mesh
Il blueprint utilizza Cloud Service Mesh per l'autenticazione e l'autorizzazione reciproche di tutte le comunicazioni tra i servizi. Per questo deployment, Cloud Service Mesh utilizza Certificate Authority Service per emettere certificati TLS per autenticare i peer e contribuire ad assicurare che solo i client autorizzati possano accedere a un servizio. L'utilizzo di TLS reciproca (mTLS) per l'autenticazione contribuisce inoltre a garantire che tutte le comunicazioni TCP tra i servizi siano criptate in transito. Per il traffico in entrata del servizio nel mesh di servizi, il blueprint utilizza il controller GKE Gateway.
Servizi distribuiti
Un servizio distribuito è un'astrazione di un servizio Kubernetes che viene eseguito nello stesso spazio dei nomi su più cluster. Un servizio distribuito rimane disponibile anche se uno o più cluster GKE non sono disponibili, a condizione che gli eventuali cluster in buono stato rimanenti siano in grado di gestire il carico. Per creare un servizio distribuito su più cluster, Cloud Service Mesh fornisce connettività di livello 4 e 7 tra i servizi di un'applicazione su tutti i cluster dell'ambiente. Questa connettività consente ai servizi Kubernetes su più cluster di comportarsi come un unico servizio logico. Il traffico tra i cluster viene indirizzato a un'altra regione solo se il traffico intraregionale non può verificarsi a causa di un errore regionale.
Identità di servizio
I servizi in esecuzione su GKE hanno identità associate. Il blueprint configura Workload Identity Federation for GKE in modo che un account di servizio Kubernetes agiti come Google Cloud account di servizio. Ogni istanza di un servizio distribuito nello stesso ambiente ha un'identità comune che semplifica la gestione delle autorizzazioni. Quando accedi alle API Google Cloud, i servizi che vengono eseguiti come account di servizio Kubernetes si autenticano automaticamente come Google Cloud account di servizio. Ogni servizio dispone solo delle autorizzazioni minime necessarie per il suo funzionamento.
Passaggi successivi
- Leggi informazioni su logging e monitoraggio (documento successivo di questa serie).