Configurazione dell'allocazione su più cluster

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:
  • Cloud Shell

    Per avviare Cloud Shell, esegui questi passaggi:

    1. Vai alla console Google Cloud.

      Console Google Cloud

    2. Nell'angolo in alto a destra della console, fai clic sul pulsante Attiva Cloud Shell:

    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:

    1. Crea un account di servizio.
    2. Scarica una chiave privata come file JSON.
    3. Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso del file JSON che contiene le tue credenziali. Questa variabile si applica solo alla sessione di shell attuale. Pertanto, se apri una nuova sessione, imposta di nuovo la variabile.

    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:

  1. Clona il repository Istio Istio:

    git clone -b release-1.5 https://github.com/istio/istio.git
    
  2. Crea un nuovo spazio dei nomi per Istio:

    kubectl create ns istio-system
    

  3. 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
    

  4. 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
    
  5. 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:

  1. Registra due cluster di Game Servers nel tuo regno e configurali per l'allocazione multicluster come mostrato sopra.

  2. Creazione di un deployment di Game Servers.

  3. Crea una configurazione Game Servers gioco con una specifica del parco risorse in cui le repliche sono impostate su 5 e l'etichetta gameName: udp-server applicata.

  4. Aggiorna l'implementazione per il deployment di Game Servers per rendere attiva la configurazione.

  5. 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:

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