Questa pagina mostra come attivare e utilizzare i servizi multicluster (MCS). Per scoprire di più su come funziona MCS e sui suoi vantaggi, consulta Multi-cluster Services.
La funzionalità MCS (Multi-Cluster Service) di Google Kubernetes Engine (GKE) estende la portata del servizio Kubernetes oltre il limite del cluster e consente di scoprire e richiamare i servizi in più cluster GKE. Puoi esportare un sottoinsieme di servizi esistenti o nuovi.
Quando esporti un servizio con MCS, questo servizio è disponibile in tutti i cluster del tuo parco risorse.
Questa pagina spiega come configurare MCS con un singolo progetto. Per la configurazione del VPC condiviso multi-progetto, segui le istruzioni riportate in Configurazione dei servizi multi-cluster con VPC condiviso.
Google Cloud risorse gestite da MCS
MCS gestisce i seguenti componenti di Google Cloud:
Cloud DNS: MCS configura le zone e i record Cloud DNS per ogni servizio esportato nei tuoi cluster della flotta. In questo modo puoi connetterti ai servizi in esecuzione in altri cluster. Queste zone e questi record vengono creati, letti, aggiornati ed eliminati in base ai servizi che scegli di esportare nei cluster.
Regole firewall: MCS configura regole firewall che consentono ai pod di comunicare tra loro nei cluster all'interno del parco progetti. Le regole del firewall vengono create, lette, aggiornate ed eliminate in base ai cluster che aggiungi al tuo parco risorse. Queste regole sono simili a quelle che GKE crea per consentire la comunicazione tra i pod all'interno di un cluster GKE.
Cloud Service Mesh: MCS utilizza Cloud Service Mesh come control plane per tenere traccia degli endpoint e del loro stato nei cluster.
Requisiti
MCS presenta i seguenti requisiti:
MCS supporta solo l'esportazione di servizi da cluster GKE nativi di VPC su Google Cloud. Per saperne di più, consulta la sezione Creazione di un cluster nativo di VPC. Non puoi utilizzare cluster GKE Standard non VPC nativi.
La connettività tra i cluster dipende dai cluster in esecuzione all'interno della stessa rete VPC o in reti VPC in peering o condivise. Se i cluster si trovano in reti separate e non connesse, le chiamate a servizi esterni verranno bloccate. Ti consigliamo di attivare MCS nei progetti in cui i cluster si trovano nella stessa rete VPC.
Per configurare MCS su un parco progetti cross-project con un VPC condiviso, segui le istruzioni riportate in Configurazione dei servizi multi-cluster con VPC condiviso.
Anche se un parco risorse può estendersi su più progetti e reti VPC, un singolo servizio multicluster deve essere esportato da un singolo progetto e da una singola rete VPC. Google Cloud
MCS non è supportato con le policy di rete.
I cluster devono avere il componente aggiuntivo
HttpLoadBalancing
abilitato. Assicurati che il componente aggiuntivoHttpLoadBalancing
sia abilitato. Il componente aggiuntivoHttpLoadBalancing
è attivato per impostazione predefinita e non deve essere disattivato.
Prezzi
Multi-cluster Services è incluso nella commissione di gestione dei cluster GKE e non ha costi aggiuntivi per l'utilizzo. Devi abilitare l'API Traffic Director, ma MCS non comporta costi per gli endpoint Cloud Service Mesh. La licenza GKE Enterprise non è obbligatoria per utilizzare MCS.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
Installa Google Cloud SDK.
Attiva l'API Google Kubernetes Engine:
Connetti le reti VPC con il peering di rete VPC, Cloud Interconnect o Cloud VPN.
Abilita le API MCS, fleet (hub), Resource Manager, Cloud Service Mesh e Cloud DNS:
gcloud services enable \ multiclusterservicediscovery.googleapis.com \ gkehub.googleapis.com \ cloudresourcemanager.googleapis.com \ trafficdirector.googleapis.com \ dns.googleapis.com \ --project=PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto del progetto in cui prevedi di registrare i cluster in un parco risorse.
Attivazione di MCS nel progetto
MCS richiede che i cluster GKE partecipanti siano registrati nello stesso parco risorse. Una volta abilitata la funzionalità MCS per un parco risorse, qualsiasi cluster può esportare servizi tra i cluster del parco risorse.
Anche se MCS richiede la registrazione a un parco risorse, non è necessario abilitare la piattaforma GKE Enterprise.
GKE Enterprise
Se l'API GKE Enterprise è abilitata nel progetto host del parco risorse come prerequisito per l'utilizzo di altri componenti GKE Enterprise, tutti i cluster registrati nel parco risorse del progetto vengono addebitati in base ai prezzi di GKE Enterprise. Questo modello di prezzi ti consente di utilizzare tutte le funzionalità di GKE Enterprise sui cluster registrati con un unico addebito per vCPU. Puoi verificare se l'API GKE Enterprise è abilitata utilizzando il seguente comando:
gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
Se l'output è simile al seguente, la piattaforma GKE Enterprise completa è abilitata e tutti i cluster registrati nel parco risorse genereranno addebiti per GKE Enterprise:
anthos.googleapis.com Anthos API
Se non era previsto, contatta l'amministratore del progetto.
Un output vuoto indica che GKE Enterprise non è abilitato.
Abilitazione di MCS sul cluster GKE
Attiva la funzionalità MCS per la flotta del tuo progetto:
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto del progetto in cui prevedi di registrare i cluster in un parco risorse. Questo è il tuo progetto host del parco risorse.L'attivazione dei servizi multi-cluster nel progetto host del parco risorse crea o garantisce l'esistenza delaccount di serviziot
service-PROJECT_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.Registra i cluster GKE nel parco risorse. Ti consigliamo vivamente di registrare il cluster con la federazione delle identità per i carichi di lavoro per GKE abilitata. Se non abiliti la federazione delle identità dei carichi di lavoro per GKE, devi registrare il cluster con un service account per l'autenticazione e completare i passaggi aggiuntivi descritti in Autenticazione dei service account. Google Cloud
Per registrare il cluster con la federazione delle identità per i carichi di lavoro per GKE, esegui questo comando:
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-cluster CLUSTER_LOCATION/CLUSTER_NAME \ --enable-workload-identity \ --project PROJECT_ID
Sostituisci quanto segue:
MEMBERSHIP_NAME
: il nome dell'appartenenza che scegli per rappresentare in modo univoco il cluster nel parco risorse. In genere, il nome di appartenenza al parco risorse di un cluster è il nome del cluster, ma potrebbe essere necessario specificare un nuovo nome se nel parco risorse esiste già un altro cluster con il nome originale.CLUSTER_LOCATION
: la zona o la regione in cui si trova il cluster.CLUSTER_NAME
: il nome del cluster.
Concedi le autorizzazioni Identity and Access Management (IAM) richieste per MCS Importer:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-mcs/sa/gke-mcs-importer" \ --role "roles/compute.networkViewer"
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto host del parco.PROJECT_NUMBER
: il numero di progetto del progetto host del parco risorse.
Assicurati che ogni cluster nel parco risorse abbia uno spazio dei nomi in cui condividere i servizi. Se necessario, crea uno spazio dei nomi utilizzando il seguente comando:
kubectl create ns NAMESPACE
Sostituisci
NAMESPACE
con un nome per lo spazio dei nomi.Per verificare che MCS sia abilitato, esegui questo comando:
gcloud container fleet multi-cluster-services describe \ --project PROJECT_ID
L'output è simile al seguente:
createTime: '2021-08-10T13:05:23.512044937Z' membershipStates: projects/PROJECT_ID/locations/global/memberships/MCS_NAME: state: code: OK description: Firewall successfully updated updateTime: '2021-08-10T13:14:45.173444870Z' name: projects/PROJECT_NAME/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {}
Se il valore di
state
non èACTIVE
, consulta la sezione Risoluzione dei problemi.
Autenticazione dei service account
Se hai registrato i cluster GKE in un parco risorse utilizzando un service account, devi eseguire passaggi aggiuntivi per autenticare il account di servizio.
MCS esegue il deployment di un componente chiamato gke-mcs-importer
. Questo componente riceve
aggiornamenti degli endpoint da Cloud Service Mesh, quindi, per abilitare MCS, devi concedere
al tuo service account l'autorizzazione a leggere le informazioni
da Cloud Service Mesh.
Quando utilizzi un account di servizio, puoi utilizzare il account di servizio predefinito di Compute Engine o il tuo account di servizio del nodo:
Se utilizzi un service account predefinito di Compute Engine, procedi nel seguente modo:
Attiva i seguenti ambiti:
https://www.googleapis.com/auth/compute.readonly
https://www.googleapis.com/auth/cloud-platform
Per scoprire di più sull'attivazione degli ambiti, consulta Modifica del account di servizio e degli ambiti di accesso per un'istanza.
Concedi il ruolo
roles/compute.networkViewer
sul progetto all'account di servizio. Per scoprire di più sulla concessione dei ruoli, consulta Concedere un singolo ruolo.
Se utilizzi il tuo account di servizio del nodo, concedi il ruolo
roles/compute.networkViewer
al tuo account di servizio nel progetto. Per scoprire di più sulla concessione dei ruoli, consulta Concedere un singolo ruolo.
Utilizzo di MCS
Le sezioni seguenti mostrano come utilizzare MCS. MCS utilizza l'API Kubernetes multi-cluster services.
Registrazione di un servizio per l'esportazione
Per registrare un servizio per l'esportazione in altri cluster all'interno del tuo parco risorse, completa i seguenti passaggi:
Crea un oggetto
ServiceExport
denominatoexport.yaml
:# export.yaml kind: ServiceExport apiVersion: net.gke.io/v1 metadata: namespace: NAMESPACE name: SERVICE_EXPORT_NAME
Sostituisci quanto segue:
NAMESPACE
: lo spazio dei nomi dell'oggettoServiceExport
. Questo spazio dei nomi deve corrispondere a quello del servizio che stai esportando.SERVICE_EXPORT_NAME
: il nome di un servizio nel tuo cluster che vuoi esportare in altri cluster all'interno del tuo parco progetti.
Crea la risorsa
ServiceExport
eseguendo questo comando:kubectl apply -f export.yaml
La sincronizzazione dell'esportazione iniziale del servizio con i cluster registrati nel parco risorse richiede circa cinque minuti. Dopo l'esportazione di un servizio, le sincronizzazioni successive degli endpoint vengono eseguite immediatamente.
Puoi esportare lo stesso servizio da più cluster per creare un unico endpoint di servizio multicluster a disponibilità elevata con distribuzione del traffico tra i cluster. Prima di esportare servizi con lo stesso nome e spazio dei nomi,
assicurati di volerli raggruppare in questo modo. Sconsigliamo l'esportazione di servizi negli spazi dei nomi default
e kube-system
a causa dell'alta probabilità di conflitti di nomi non intenzionali e del raggruppamento non intenzionale risultante. Se esporti più di cinque servizi con lo stesso nome e
spazio dei nomi, la distribuzione del traffico sui servizi importati potrebbe essere limitata a cinque
servizi esportati.
Utilizzo di servizi cross-cluster
MCS supporta solo ClusterSetIP e i servizi headless. Sono disponibili solo i record "A" DNS.
Dopo aver creato un oggetto ServiceExport
, il seguente nome di dominio viene risolto nel servizio esportato da qualsiasi pod in qualsiasi cluster del parco risorse:
SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
L'output include i seguenti valori:
SERVICE_EXPORT_NAME
eNAMESPACE
: i valori che definisci nell'oggettoServiceExport
.
Per i servizi ClusterSetIP, il dominio viene risolto in ClusterSetIP
. Puoi trovare questo valore individuando l'oggetto ServiceImport
in un cluster nello spazio dei nomi in cui è stato creato l'oggetto ServiceExport
. L'oggetto ServiceImport
viene creato automaticamente.
Ad esempio:
kind: ServiceImport
apiVersion: net.gke.io/v1
metadata:
namespace: EXPORTED-SERVICE-NAMESPACE
name: SERVICE-EXPORT-TARGET
status:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
ips: CLUSTER_SET_IP
MCS crea un oggetto Endpoints
nell'ambito dell'importazione di un Service
in un cluster. Esaminando questo oggetto puoi monitorare l'avanzamento di un'importazione di servizi. Per trovare il nome dell'oggetto Endpoints
, cerca il valore dell'annotazione net.gke.io/derived-service
in un oggetto ServiceImport
corrispondente al servizio importato. Ad esempio:
kind: ServiceImport
apiVersion: net.gke.io/v1
annotations: net.gke.io/derived-service: DERIVED_SERVICE_NAME
metadata:
namespace: EXPORTED-SERVICE-NAMESPACE
name: SERVICE-EXPORT-TARGET
Successivamente, cerca l'oggetto Endpoints
per verificare se MCS ha già propagato gli
endpoint al cluster di importazione. L'oggetto Endpoints
viene creato nello stesso spazio dei nomi dell'oggetto ServiceImport
, con il nome memorizzato nell'annotazione net.gke.io/derived-service
. Ad esempio:
kubectl get endpoints DERIVED_SERVICE_NAME -n NAMESPACE
Sostituisci quanto segue:
DERIVED_SERVICE_NAME
: il valore dell'annotazionenet.gke.io/derived-service
sull'oggettoServiceImport
.NAMESPACE
: lo spazio dei nomi dell'oggettoServiceExport
.
Puoi scoprire di più sullo stato di integrità degli endpoint utilizzando la dashboard Cloud Service Mesh nella console Google Cloud .
Per i servizi headless, il dominio viene risolto nell'elenco degli indirizzi IP degli endpoint nei cluster di esportazione. Ogni pod di backend con un nome host è anche indirizzabile in modo indipendente con un nome di dominio del seguente formato:
HOSTNAME.MEMBERSHIP_NAME.LOCATION.SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
L'output include i seguenti valori:
SERVICE_EXPORT_NAME
eNAMESPACE
: i valori che definisci nell'oggettoServiceExport
.MEMBERSHIP_NAME
: l'identificatore univoco nel parco risorse per il cluster in cui si trova il pod.LOCATION
: la posizione dell'abbonamento. Gli abbonamenti sonoglobal
o la loro posizione è una delle regioni o zone in cui si trova il pod, ad esempious-central1
.HOSTNAME
: il nome host del pod.
Puoi anche indirizzare un pod di backend con un nome host esportato da un cluster registrato con un'appartenenza globale, utilizzando un nome di dominio nel seguente formato:
HOSTNAME.MEMBERSHIP_NAME.SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
Disattivazione di MCS
Per disattivare MCS, completa i seguenti passaggi:
Per ogni cluster nel parco risorse, elimina ogni oggetto ServiceExport che hai creato:
kubectl delete serviceexport SERVICE_EXPORT_NAME \ -n NAMESPACE
Sostituisci quanto segue:
SERVICE_EXPORT_NAME
: il nome dell'oggetto ServiceExport.NAMESPACE
: lo spazio dei nomi dell'oggettoServiceExport
.
Verifica che
ServiceExport
scompaia dall'elenco entro 30 minuti.Annulla la registrazione dei cluster dal parco risorse se non devono essere registrati per un altro scopo.
Disattiva la funzionalità
multiclusterservicediscovery
:gcloud container fleet multi-cluster-services disable \ --project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto del progetto in cui hai registrato i cluster.Disattiva l'API per MCS:
gcloud services disable multiclusterservicediscovery.googleapis.com \ --project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto del progetto in cui hai registrato i cluster.
Limitazioni
Numero di cluster, pod e porte di servizio
I seguenti limiti non vengono applicati e, in alcuni casi, puoi superarli a seconda del carico nei cluster o nel progetto e della velocità di churn degli endpoint. Potresti riscontrare problemi di prestazioni quando questi limiti vengono superati.
In Kubernetes, un servizio è identificato in modo univoco dal nome e dallo spazio dei nomi a cui appartiene. Questa coppia di nome e spazio dei nomi è chiamata nome con spazio dei nomi.
Esportazione di cluster: un singolo servizio, identificato da un nome con spazio dei nomi, può essere esportato in sicurezza da un massimo di 5 cluster contemporaneamente. Oltre questo limite, è possibile che solo un sottoinsieme di endpoint possa essere importato nei cluster di consumo. Puoi esportare servizi diversi da sottoinsiemi diversi di cluster.
Il numero di pod dietro un singolo servizio: è sicuro se mantieni un numero inferiore a 250 pod dietro un singolo servizio. Con workload relativamente statici e un numero ridotto di servizi multicluster, potrebbe essere possibile superare notevolmente questo numero e raggiungere migliaia di endpoint per servizio. Come per i servizi a cluster singolo, tutti gli endpoint vengono monitorati da
kube-proxy
su ogni nodo. Se superi questo limite, soprattutto quando esporti da più cluster contemporaneamente, potrebbero essere necessari nodi più grandi.Numero di servizi multicluster esportati contemporaneamente: ti consigliamo di non esportare contemporaneamente più di 250 porte di servizio univoche.
Una porta di servizio univoca è identificata da un nome con spazio dei nomi e un numero di porta, ovvero una tupla (nome, spazio dei nomi, numero di porta). Ciò significa che:
I servizi con lo stesso nome con spazio dei nomi e la stessa porta, esportati da più cluster, vengono conteggiati come una singola porta di servizio univoca.
Due servizi con lo stesso nome e la stessa porta, ma spazi dei nomi diversi, ad esempio (name, ns1, port-80) e (name, ns2, port-80) sono due porte di servizio diverse, che vengono conteggiate ai fini del limite di 250 porte di servizio uniche.
Un servizio esportato che espone due porte, 80 e 443, viene conteggiato come due delle 250 porte di servizio uniche, indipendentemente dal numero di cluster nel parco risorse che esportano contemporaneamente questo servizio.
Ogni servizio multicluster viene conteggiato ai fini della quota di servizi di backend, e ogni zona di ogni cluster di esportazione crea un gruppo di endpoint di rete (NEG). L'aumento di queste quote non modifica il limite indicato per il conteggio totale delle porte di servizio uniche.
Tipi di servizi
MCS supporta solo ClusterSetIP e i servizi headless. I servizi NodePort e LoadBalancer non sono supportati e potrebbero comportare un comportamento imprevisto.
Utilizzo di IPmasq Agent con MCS
MCS funziona come previsto quando utilizzi un intervallo di indirizzi IP pod predefinito o non mascherato.
Se utilizzi un intervallo IP pod personalizzato o un ConfigMap dell'agente IPmasq personalizzato, il traffico MCS può essere mascherato. Ciò impedisce il funzionamento di MCS perché le regole firewall consentono solo il traffico dagli IP dei pod.
Per evitare questo problema, devi utilizzare l'intervallo IP pod predefinito o specificare
tutti gli intervalli IP pod nel campo nonMasqueradeCIDRs
del
ConfigMap dell'agente IPmasq.
Se utilizzi Autopilot o devi utilizzare un intervallo IP pod non predefinito e non puoi specificare tutti gli intervalli IP pod in ConfigMap, devi utilizzare il criterio NAT in uscita per configurare l'accesso mascherato degli IP.
Riutilizzo dei numeri di porta all'interno di un servizio MCS
Non puoi riutilizzare lo stesso numero di porta all'interno di un servizio MCS anche se i protocolli sono diversi.
Ciò vale sia all'interno di un servizio Kubernetes sia in tutti i servizi Kubernetes per un servizio MCS.
MCS con cluster in più progetti
Non puoi esportare un servizio se è già in fase di esportazione da altri cluster in un progetto diverso nel parco risorse con lo stesso nome e spazio dei nomi. Puoi accedere al servizio in altri cluster del parco risorse in altri progetti, ma questi cluster non possono esportare lo stesso servizio nello stesso spazio dei nomi.
Risoluzione dei problemi
Le sezioni seguenti forniscono suggerimenti per la risoluzione dei problemi relativi a MCS.
Visualizzare lo stato della funzionalità MCS
La visualizzazione dello stato della risorsa Funzionalità può aiutarti a verificare se MCS è stato configurato correttamente. Puoi visualizzare lo stato con il seguente comando:
gcloud container fleet multi-cluster-services describe
L'output è simile al seguente:
createTime: '2021-08-10T13:05:23.512044937Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/MCS_NAME:
state:
code: OK
description: Firewall successfully updated
updateTime: '2021-08-10T13:14:45.173444870Z'
name: projects/PROJECT_NAME/locations/global/features/multiclusterservicediscovery
resourceState:
state: ACTIVE
spec: {}
Include, tra le altre informazioni, lo stato generale della funzionalità in
resourceState
e lo stato dei singoli abbonamenti in membershipStates
.
Se hai attivato la funzionalità MCS in base alle istruzioni
Attivazione di MCS sul cluster GKE, ma il valore di
resourceState.state
non è ACTIVE
, contatta l'assistenza.
Lo stato di ogni abbonamento è costituito dal percorso e dal campo state
. Quest'ultimo
contiene code
e description
, utili per la risoluzione dei problemi.
Codici negli stati dell'abbonamento
Un codice, rappresentato dal campo state.code
, indica lo stato generale
del membro in relazione a MCS. Esistono quattro valori possibili:
OK
: l'abbonamento è stato aggiunto correttamente a MCS ed è pronto per l'uso.WARNING
: MCS sta eseguendo la riconciliazione della configurazione dell'abbonamento. Il campo Descrizione può fornire maggiori informazioni sulla causa di questo codice.FAILED
: questo abbonamento non è stato aggiunto a MCS. Gli altri abbonamenti della flotta con un codiceOK
non sono interessati da questo abbonamentoFAILED
. Il campo Descrizione può fornire maggiori informazioni sulla causa di questo codice.ERROR
: In questo abbonamento mancano risorse. Gli altri abbonamenti della flotta con un codiceOK
non sono interessati da questo abbonamentoERROR
. Il campo Descrizione può fornire maggiori informazioni sulla causa di questo codice.
Descrizioni negli stati dell'abbonamento
Per visualizzare informazioni sullo stato dell'abbonamento in MCS, controlla il campo
state.description
. Questo campo fornisce informazioni sulla configurazione del progetto e dell'hub, nonché sullo stato di integrità del parco risorse e delle iscrizioni. Per visualizzare
informazioni sui singoli servizi e sulla loro configurazione, consulta il
campo Status.Conditions
nell'oggetto ServiceExport
. Vedi la
sezione Esaminare ServiceExport
.
Il campo state.description
contiene le seguenti informazioni:
Firewall successfully created
: questo messaggio indica che la regola firewall del membro è stata creata e/o aggiornata correttamente. Il codice dell'abbonamento èOK
.Firewall creation pending
: questo messaggio indica che la regola firewall del membro è in attesa di creazione o aggiornamento. Il codice dell'abbonamento èWARNING
. Questa iscrizione potrebbe riscontrare problemi di aggiornamento e connessione a nuovi servizi e iscrizioni multicluster aggiunti mentre la regola firewall è in attesa.GKE Cluster missing
: questo messaggio indica che il cluster GKE registrato non è disponibile e/o è stato eliminato. Il codice dell'abbonamento èERROR
. Questa appartenenza deve essere annullata manualmente dal parco risorse dopo l'eliminazione di un cluster GKE.Project that member lives in is missing required permissions and/or has not enabled all required APIs - additional setup steps are required
: questo messaggio indica che si sono verificati errori interni StatusForbidden (403) e il codice dell'abbonamento èFAILED
. Questo errore si verifica nei seguenti scenari:Non hai abilitato le API necessarie nel progetto del membro.
Se il cluster membro si trova in un progetto separato dal parco progetti, consulta la configurazione tra progetti per assicurarti di aver completato tutti i passaggi necessari. Se hai completato tutti i passaggi, assicurati che le seguenti API siano abilitate nel progetto di registrazione con i seguenti comandi:
gcloud services enable multiclusterservicediscovery.googleapis.com --project PROJECT_ID gcloud services enable dns.googleapis.com --project PROJECT_ID gcloud services enable trafficdirector.googleapis.com --project PROJECT_ID gcloud services enable cloudresourcemanager.googleapis.com --project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto del progetto in cui hai registrato i cluster.Il account di servizio
mcsd
ogkehub
richiede più autorizzazioni nel progetto del membro.I service account
mcsd
egkehub
dovrebbero essere stati creati automaticamente nel progetto host del parco risorse con tutte le autorizzazioni richieste. Per verificare l'esistenza dei service account, esegui questi comandi:gcloud projects get-iam-policy PROJECT_ID | grep gcp-sa-mcsd gcloud projects get-iam-policy PROJECT_ID | grep gcp-sa-gkehub
Sostituisci
PROJECT_ID
con l'ID progetto del progetto host del parco veicoli.
Questi comandi dovrebbero mostrare il nome completo dei service account
mcsd
egkehub
.Multiple VPCs detected in the hub - VPC must be peered with other VPCs for successful connectivity
: questo messaggio viene visualizzato quando i cluster ospitati in VPC diversi sono registrati nello stesso parco risorse. Lo stato dell'abbonamento èOK
. La rete VPC di un cluster è definita dalla rete di NetworkConfig. I servizi multi-cluster richiedono una rete flat e questi VPC devono essere in peering attivo affinché i servizi multi-cluster si connettano correttamente tra loro. Per saperne di più, vedi Eseguire il peering di due reti.Member does not exist in the same project as hub - additional setup steps are required, errors may occur if not completed.
: questo messaggio ti ricorda che i cluster tra progetti richiedono ulteriori passaggi di configurazione. Lo stato dell'iscrizione èOK
. Le appartenenze tra progetti sono definite come un cluster membro che non si trova nello stesso progetto del parco risorse. Per maggiori informazioni, consulta la configurazione tra progetti.Non-GKE clusters are currently not supported
: questo messaggio ti ricorda che MCS supporta solo i cluster GKE. I cluster non GKE non possono essere aggiunti a MCS. Lo stato dell'iscrizione èFAILED
.
Esame di ServiceExport
Per visualizzare lo stato di un singolo servizio e i potenziali errori, controlla
il campo Status.Conditions
nella risorsa ServiceExport
per quel
servizio:
kubectl describe serviceexports PROJECT_ID -n NAMESPACE
L'output è simile al seguente:
Name: SERVICE_NAME
Namespace: NAMESPACE
Labels: <none>
Annotations: <none>
API Version: net.gke.io/v1
Kind: ServiceExport
Metadata:
Creation Timestamp: 2024-09-06T15:57:40Z
Finalizers:
serviceexport.net.gke.io
Generation: 2
Resource Version: 856599
UID: 8ac44d88-4c08-4b3d-8524-976efc455e4e
Status:
Conditions:
Last Transition Time: 2024-09-06T16:01:53Z
Status: True
Type: Initialized
Last Transition Time: 2024-09-06T16:02:48Z
Status: True
Type: Exported
Events: <none>
Quando il controller MCS rileva una risorsa ServiceExport
, aggiunge
le seguenti condizioni al campo Status.Conditions
:
Initialized
: True se il controller MCS ha rilevato e tentato di riconciliare il servizio rappresentato daServiceExport
.Exported
: True se il servizio rappresentato daServiceExport
è stato convalidato correttamente.
Ogni condizione contiene i campi obbligatori Type
, Status
e
LastTransitionTime
. Man mano che il controller MCS riconcilia e convalida il servizio, il
campo Status
per la condizione corrispondente cambia da False
a True
.
Errori
Se si verifica un errore durante la convalida, il controller imposta il campo Status
della condizione Exported
su False
e aggiunge un campo Reason
e un campo Message
con ulteriori informazioni sull'errore. Il campo Reason
può avere uno dei seguenti valori:
NoMatchingService
: non è stato trovato alcun servizio corrispondente al nome e allo spazio dei nomi diServiceExport
nel cluster specificato.
Verifica che il servizio Kubernetes che intendi esportare esista nello stesso cluster. Controlla se il nome e lo spazio dei nomi di entrambe le risorse (Service
eServiceExport
) corrispondono esattamente.Conflict
: esiste già un servizio esportato con lo stesso nome e lo stesso spazio dei nomi che non corrisponde a quello esportato da questoServiceExport
oppure è esportato da un'altra rete o da un altro progetto, il che non è consentito. Vedi Limitazioni.
Esamina il campoMessage
per i dettagli e consulta la sezione Limitazioni, se necessario. Assicurati che il nome e lo spazio dei nomi diService
eServiceExport
corrispondano tra loro e che tutte le risorse siano create nella stessa rete e/o nello stesso progetto.ReadinessProbeError
: È presente unreadinessProbe
configurato su un container in un pod che supporta il servizio.Kubernetes ReadinessProbes
vengono tradotti inGoogle cloud HealthChecks
e devono rispettare le stesse limitazioni.Ecco come i campi del controllo di idoneità si allineano ai parametri del controllo di integrità:
PeriodSeconds
corrisponde aCheckInterval
TimeoutSeconds
corrisponde aTimeout
SuccessThreshold
corrisponde aHealthyThreshold
FailureThreshold
corrisponde aUnhealthyThreshold
Per allineare
ReadinessProbes
ai vincoli diHealthCheck
, MCS implementa quanto segue:PeriodSeconds
eTimeoutSeconds
sono limitati a 300 secondi; i valori che superano questo limite attivano un errore.SuccessThreshold
eFailureThreshold
sono limitati a 10 secondi; i valori che superano questo limite attivano un errore.- Viene segnalato un errore e la creazione della risorsa (potenzialmente di tutte le risorse) non riesce se
TimeoutSeconds
è maggiore diPeriodSeconds
.
La logica di queste limitazioni è quella di evitare problemi di scalabilità, sovrapposizione di probe successivi, lentezza del controllo di integrità/prontezza e così via. Modifica i parametri di
readinessProbe
in base alle convalide riportate sopra. È importante correggere questi errori per ogni servizio della flotta. Per ulteriori spiegazioni, consulta la sezione Problemi noti.ServiceError
: si è verificato un errore durante il recupero del servizio corrispondente.
Questo errore è in genere correlato a un problema dell'infrastruttura Google Cloud. Se il problema persiste, contatta l'assistenza Google Cloud.PodsError
: si è verificato un errore durante il recupero del pod o dei pod di backend
Questo errore è in genere correlato a un problema dell'infrastruttura Google Cloud. Se il problema persiste, contatta l'assistenza Google Cloud.EndpointsError
: si è verificato un errore durante l'aggregazione degli endpoint per un servizio headless
Questo errore è in genere correlato a un problema dell'infrastruttura Google Cloud. Se il problema persiste, contatta l'assistenza Google Cloud.
Il campo Message
fornisce un contesto aggiuntivo per l'errore.
Problemi comuni di autorizzazione
Le API necessarie non sono abilitate nel progetto.
Assicurati di aver attivato le API richieste come indicato nella sezione Prima di iniziare.
Per un parco progetti, segui la sezione Abilita le API richieste appropriata in Configurazione dei servizi multi-cluster con VPC condiviso.
L'account di servizio
mcsd
ogkehub
non dispone di autorizzazioni sufficientiPer una configurazione a progetto singolo, tutte le autorizzazioni necessarie vengono concesse automaticamente agli account di servizio creati automaticamente da GKE Hub e MCS.
Per un parco progetti tra progetti, devi creare ulteriori binding IAM. Segui la sezione Crea binding IAM appropriata in Configurazione dei servizi multi-cluster con VPC condiviso.
Problemi noti
Servizi MCS con più porte
Esiste un problema noto con i servizi multi-cluster con più porte (TCP/UDP) su GKE Dataplane V2 in cui alcuni endpoint non sono programmati nel dataplane. Questo problema riguarda le versioni di GKE precedenti alla 1.26.3-gke.400.
Come soluzione alternativa, quando utilizzi GKE Dataplane V2, utilizza più MCS con una singola porta anziché un MCS con più porte.
Numero di porta riutilizzato all'interno di un servizio MCS
Non puoi riutilizzare lo stesso numero di porta all'interno di un servizio MCS anche se i protocolli sono diversi.
Ciò vale sia all'interno di un servizio Kubernetes sia in tutti i servizi Kubernetes per un servizio MCS.
MCS con VPC condiviso
Con l'attuale implementazione di MCS, se esegui il deployment di più di un parco risorse nello stesso VPC condiviso, i metadati vengono condivisi tra i parchi risorse. Quando un servizio viene creato in una flotta, i metadati del servizio vengono esportati o importati in tutte le altre flotte che fanno parte dello stesso VPC condiviso e sono visibili all'utente.
Il controllo di integrità utilizza la porta predefinita anziché containerPort
Quando esegui il deployment di un servizio con un campo targetPort
che fa riferimento a una porta denominata in un deployment, MCS configura la porta predefinita per il controllo di integrità anziché il campo containerPort
specificato.
Per evitare questo problema, utilizza valori numerici nei campi Servizio
ports.targetPort
e Deployment
readinessProbe.httpGet.port
anziché valori denominati.
Un probe di preparazione non valido per un singolo servizio interrompe altri servizi
Esiste un potenziale errore di configurazione readinessProbe
noto descritto in
Esaminare ServiceExports
. Con l'attuale
implementazione di MCS, questo errore, se introdotto per un singolo servizio esportato,
può impedire la sincronizzazione di alcuni o di tutti gli altri servizi della flotta.
È importante mantenere in buono stato le configurazioni di ogni servizio. Se un servizio MCS
non viene aggiornato, assicurati che nessuno dei ServiceExport in
uno qualsiasi dei cluster in uno qualsiasi degli spazi dei nomi riporti ReadinessProbeError come
motivo per cui la condizione di stato Exported
è False. Consulta
Esame ServiceExports
per scoprire come controllare
le condizioni.
Passaggi successivi
- Scopri di più sui servizi.
- Scopri come esporre le app con i servizi.
- Implementa un esempio di servizi multi-cluster di base.