In questa pagina viene spiegato come configurare l'allocazione multicluster per Game Servers. L'allocazione multicluster consente di richiedere un elemento GameServer
in stato Ready
da un cluster all'interno di un'area di autenticazione e di recuperare un GameServer
in stato Ready
da qualsiasi cluster all'interno dell'area di autenticazione. L'allocazione multi-cluster richiede la configurazione e la configurazione manuali per consentire ai cluster di connettersi tra loro e anche all'endpoint di allocazione multicluster.
Per scoprire di più sulle allocazioni di GameServer
, consulta la
guida rapida Agones per creare un parco risorse di gioco
per una panoramica completa.
Prima di iniziare
Prima di iniziare, ti consigliamo di acquisire familiarità con i concetti principali nella panoramica dei server di gioco. Assicurati di aver eseguito anche le seguenti attività:
- Assicurati di aver attivato l'API Game Services. Abilita l'API Game Services
- Scegli una shell con gcloud CLI installata o utilizza un client API:
Vai alla console Google Cloud.
Nell'angolo in alto a destra della console, fai clic sul pulsante Attiva Cloud Shell:
- Crea un account di servizio.
- Scarica una chiave privata come file JSON.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
Cloud Shell
Per avviare Cloud Shell, esegui questi passaggi:
Una sessione di Cloud Shell si apre all'interno di un frame più in basso nella console.
Utilizza questa shell per eseguire i comandi gcloud
.
Shell locale
Installare l'interfaccia a riga di comando gcloud.
Verifica di aver impostato il progetto predefinito desiderato per Google Cloud CLI (in caso contrario dovrai specificare il flag --project
in modo esplicito per ogni comando in un secondo momento):
gcloud config list project
In caso contrario, puoi eseguire il seguente comando per impostare un progetto predefinito, sostituendo PROJECT_ID
con l'ID progetto desiderato :
gcloud config set project PROJECT_ID
Esegui il comando seguente per verificare la tua versione di Google Cloud CLI.
Game Servers richiede la versione 306.0.0
o successiva dellgcloud CLI.
gcloud version
Per aggiornare l'installazione, esegui il comando seguente:
gcloud components update
curl / PowerShell
Per utilizzare l'API REST con curl
o Windows PowerShell, segui questi passaggi:
Libreria client
I server di gioco Google Cloud possono essere controllati in modo programmatico utilizzando una libreria client. Per istruzioni sull'utilizzo della libreria e l'autenticazione, consulta la panoramica sulle librerie client.
Configurazione del servizio allocatore Agones
Assicurati che il servizio allocatore Agones sia configurato per l'installazione di Agones e che l'allocazione per il singolo cluster funzioni utilizzando la stessa guida.
Tieni presente che, per impostazione predefinita, nel servizio agones-allocator
non è installato un certificato di servizio valido e che il certificato deve essere sostituito.
Puoi prenotare un indirizzo IP di Google Cloud Platform a livello di regione e installare agones-allocator
utilizzando l'IP prenotato, che emette anche un certificato valido per il servizio. Per prenotare un IP, esegui il comando seguente:
gcloud compute addresses create allocator-service --region REGION
Per trovare l'IP prenotato, esegui questo comando:
gcloud compute addresses describe allocator-service --region REGION --format="value(address)"
Quindi, installa/esegui l'upgrade di Agones passando l'IP riservato come RESERVED_IP dal comando precedente:
helm upgrade RELEASE --install --set agones.allocator.http.loadBalancerIP=RESERVED_IP --set agones.allocator.service.loadBalancerIP=RESERVED_IP --namespace agones-system --create-namespace agones/agones
RESERVED_IP è l'indirizzo IP da utilizzare per il servizio agones-allocator
.
RELEASE è il nome della release Agones per l'installazione dei grafici con timone.
Installazione di Citadel in corso...
Game Servers utilizza il progetto Citadel come gestore di certificati per il certificato lato client dell'allocazione multicluster, usato da Agones per facilitare le connessioni sicure tra i cluster. Devi installarlo su ogni cluster Google Kubernetes Engine registrato con Game Servers.
Per ogni spazio dei nomi nel cluster, Citadel emette un secret
Kubernetes istio.default
utilizzato dai Game Servers come certificato lato client.
Puoi saltare questo passaggio se hai già installato Istio sul tuo cluster Google Kubernetes Engine. Tieni presente che al momento esistono problemi noti con la compatibilità di Agones con un'installazione completa di Istio.
Se sei un utente Terraform, puoi installare Citadel utilizzando Terraform. Puoi esaminare i file di configurazione di esempio per installare Citadel utilizzando Terraform su GitHub.
Questa guida presuppone che tu abbia installato strumenti a riga di comando per helm v3 e git.
Per installare Citadel:
Clona il repository Istio Istio:
git clone -b release-1.5 https://github.com/istio/istio.git
Crea un nuovo spazio dei nomi per Istio:
kubectl create ns istio-system
Copia ed esegui ciascuno dei seguenti comandi per generare file di installazione di Citadel YAML dai modelli Istio Helm:
helm template istio/install/kubernetes/helm/istio --name-template istio --namespace istio-system -s charts/security/templates/serviceaccount.yaml -s charts/security/templates/clusterrole.yaml -s charts/security/templates/clusterrolebinding.yaml -s charts/security/templates/deployment.yaml > citadel.yaml
Quindi, esegui il comando seguente per applicare al file di Google Kubernetes Engine il file YAML generato nel passaggio precedente:
kubectl apply -f citadel.yaml
Verifica che Citadel funzioni correttamente:
kubectl get pods --namespace=istio-system
Verifica che il deployment di Citadel sia in esecuzione in un singolo pod.
Requisiti di Networking per l'allocazione multicluster
Affinché l'allocazione multi-cluster funzioni nel tuo dominio, devi assicurarti che ogni cluster esegua un servizio allocatore in cui il servizio ha un indirizzo esterno pubblico.
Per verificare che sia configurata, verifica che sia allocato un bilanciatore del carico esterno per il servizio:
kubectl get service agones-allocator -n agones-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
agones-allocator LoadBalancer 10.86.3.77 RESERVED_IP 443:30219/TCP
Il campo RESERVED_IP non deve essere vuoto.
Convalida dell'allocazione multicluster
Per testare il processo di allocazione, procedi nel seguente modo:
Registra due cluster di Game Servers nel tuo regno e configurali per l'allocazione multicluster come mostrato sopra.
Crea una configurazione Game Servers gioco con una specifica del parco risorse in cui le repliche sono impostate su
5
e l'etichettagameName: udp-server
applicata.Aggiorna l'implementazione per il deployment di Game Servers per rendere attiva la configurazione.
Copia il seguente YAML in un LOCAL_FILE :
apiVersion: "allocation.agones.dev/v1" kind: GameServerAllocation spec: multiClusterSetting: enabled: true required: matchLabels: gameName: udp-server
Utilizza il comando seguente per applicare il file YAML a uno dei cluster di Game Servers nel tuo realm:
kubectl create -f LOCAL_FILE -o yaml
Verrà allocata 1 delle 10 repliche pronte tra i due cluster. Ripeti il comando altre 9 volte e assicurati che vengano allocate tutte e 10 repliche in entrambi i cluster.
Qualsiasi endpoint su qualsiasi cluster all'interno dell'area di autenticazione può essere utilizzato per allocare un GameServer
da qualsiasi cluster nell'area di autenticazione. Le allocazioni di GameServer
vengono
bilanciate del carico in tutti i cluster all'interno dell'area di autenticazione utilizzando uno schema round robin.
Risolvere i problemi
Se riscontri problemi con le procedure riportate in questa guida, ti consigliamo di consultare i seguenti documenti per la risoluzione dei problemi:
- Risoluzione dei problemi relativi al servizio agones-allocator
- Risoluzione dei problemi di allocazione multicluster di Agones
Nessun criterio di allocazione multicluster specificato
Quando tenti di allocare un server di gioco, viene visualizzato il seguente errore:
no multi-cluster allocation policy is specified
Verifica di aver installato correttamente la cittadella nel cluster assicurandoti che il secret istio.default
venga creato dalla cittadella nello spazio dei nomi del server di gioco:
kubectl get secret istio.default -n NAMESPACE
Certificato firmato da un'autorità sconosciuta
Quando tenti di allocare un server di gioco, viene visualizzato il seguente errore:
transport: authentication handshake failed: x509: certificate signed by unknown authority
Verifica di aver impostato correttamente il secret di allocator-tls-ca
Kubernetes per tutti i cluster. Anche l'installazione di Helm aggiorna il secret allocator-tls-ca
, ma se lo modifichi manualmente devi aggiornare anche il secret allocator-tls-ca
. Per verificare l'autorità di certificazione, esegui questi comandi:
kubectl get secret allocator-tls-ca -n agones-system -ojsonpath="{.data.tls-ca\.crt}" | base64 -d > ca.crt kubectl get secret allocator-tls -n agones-system -ojsonpath="{.data.tls\.crt}" | base64 -d > tls.crt openssl verify -verbose -CAfile ca.crt tls.crt
La verifica dovrebbe stampare tls.crt: OK
.
Causa principale risolta, problema rimanente
La riconciliazione delle modifiche apportate a un singolo cluster in tutti i cluster può richiedere fino a un'ora. Puoi attivare immediatamente la riconciliazione apportando una modifica alle risorse Game Servers, ad esempio aggiornando le etichette in una risorsa realm:
gcloud game servers realms update REALM_NAME --update-labels=usage=testing --location=REALM_LOCATION
Passaggi successivi
- Scopri come registrare un cluster.