Multicluster-Zuordnung konfigurieren

Auf dieser Seite wird erläutert, wie Sie die Multicluster-Zuweisung für Game Servers konfigurieren. Bei der Multicluster-Zuweisung können Sie ein GameServer im Status Ready von einem Cluster innerhalb eines Bereichs anfordern und ein GameServer im Status Ready aus einem beliebigen Cluster innerhalb dieses Bereichs. Die Multicluster-Zuweisung erfordert eine manuelle Konfiguration und Einrichtung, damit die Cluster eine Verbindung zueinander und am Multicluster-Zuweisungsendpunkt herstellen können.

Weitere Informationen zur GameServer-Zuweisung finden Sie in der Kurzanleitung zum Erstellen einer Game Server Fleet von Agones.

Hinweis

Bevor Sie beginnen, sollten Sie sich mit den wichtigsten Konzepten in der Übersicht über Game Servers vertraut machen. Führen Sie außerdem die folgenden Aufgaben aus:

  • Prüfen Sie, ob die Game Services API aktiviert ist.
  • Spieledienst-API aktivieren
  • Wählen Sie eine Shell mit installierter gcloud CLI aus oder verwenden Sie einen API-Client:
  • Cloud Shell

    So starten Sie Cloud Shell:

    1. Rufen Sie die Google Cloud Console auf.

      Google Cloud Console

    2. Klicken Sie in der oberen rechten Ecke der Console auf die Schaltfläche Cloud Shell aktivieren:

    In einem Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet. Mit dieser Shell führen Sie gcloud-Befehle aus.

    Lokale Shell

    Installieren Sie die gcloud CLI.

    Prüfen Sie, ob Sie das gewünschte Standardprojekt für die Google Cloud CLI festgelegt haben. Andernfalls müssen Sie das Flag --project später für jeden Befehl explizit angeben:

    gcloud config list project
    

    Wenn Sie den folgenden Befehl nicht ausführen können, um ein Standardprojekt festzulegen, ersetzen Sie PROJECT_ID durch Ihre gewünschte Projekt-ID:

    gcloud config set project PROJECT_ID
    

    Führen Sie den folgenden Befehl aus, um Ihre Version der Google Cloud CLI zu verifizieren. Für Game Servers ist Version 306.0.0 oder höher der gcloud CLI erforderlich.

    gcloud version
    

    Aktualisieren Sie Ihre Installation mit dem folgenden Befehl:

    gcloud components update
    

    curl / PowerShell

    So verwenden Sie die REST API mit curl oder Windows PowerShell:

    1. Erstellen Sie ein Dienstkonto:
    2. Laden Sie einen privaten Schlüssel als JSON-Datei herunter.
    3. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihre Anmeldedaten enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable neu festlegen.

    Clientbibliothek

    Google Cloud Game Servers können mithilfe einer Clientbibliothek programmatisch gesteuert werden. Wie Sie die Bibliothek und die Authentifizierung verwenden, erfahren Sie in der Übersicht zu Clientbibliotheken.

Agones-Zuweisungsdienst konfigurieren

Achten Sie darauf, dass der Agones-Zuweisungsdienst für Ihre Agones-Installation eingerichtet ist und dass die Single-Cluster-Zuweisung mit demselben Leitfaden funktioniert. Beachten Sie, dass für den agones-allocator-Dienst standardmäßig kein gültiges Dienstzertifikat festgelegt ist und das Zertifikat ausgetauscht werden muss. Sie können eine regionale Google Cloud Platform-IP-Adresse reservieren und agones-allocator mit der reservierten IP-Adresse installieren, wodurch auch ein gültiges Zertifikat für den Dienst ausgestellt wird. Führen Sie den folgenden Befehl aus, um eine IP-Adresse zu reservieren:

gcloud compute addresses create allocator-service --region REGION

Führen Sie den folgenden Befehl aus, um die reservierte IP zu ermitteln:

gcloud compute addresses describe allocator-service --region REGION --format="value(address)"

Installieren und aktualisieren Sie Agones. Übergeben Sie dazu die reservierte IP-Adresse als RESERVED_IP vom vorherigen Befehl:

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 ist die IP-Adresse, die für den Dienst agones-allocator verwendet werden soll.

RELEASE ist der Name Ihrer Agones-Version für die Installation von Helm-Diagrammen.

Citadel installieren

Game Servers verwendet das Citadel-Projekt als Zertifikatverwalter für das clientseitige Zertifikat der Multicluster-Zuweisung, das von Agones verwendet wird, um sichere Verbindungen zwischen Clustern zu ermöglichen. Sie müssen dies auf jedem Google Kubernetes Engine-Cluster installieren, der bei Game Servers registriert ist.

Für jeden Namespace im Cluster gibt Citadel eine istio.default-Kubernetes-secret aus, die von Game Servers als clientseitiges Zertifikat verwendet wird.

Sie können diesen Schritt überspringen, wenn Sie Istio bereits auf Ihrem Google Kubernetes Engine-Cluster installiert haben. Beachten Sie, dass es derzeit bekannte Probleme hinsichtlich der Kompatibilität von Agones mit einer vollständigen Istio-Installation gibt.

Wenn Sie Terraform nutzen, können Sie Citadel mithilfe von Terraform installieren. Sie können den Beispielkonfigurationsdateien zum Installieren von Citadel mit Terraform auf GitHub folgen.

In dieser Anleitung wird davon ausgegangen, dass Sie Befehlszeilentools für die Version 3 von Helm und Git installiert haben.

So installieren Sie Citadel:

  1. Klonen Sie das Istio GitHub-Repository:

    git clone -b release-1.5 https://github.com/istio/istio.git
    
  2. Erstellen Sie einen neuen Namespace für Istio:

    kubectl create ns istio-system
    

  3. Führen Sie die folgenden Befehle aus, um Citadel-YAML-Installationsdateien aus Istio-Helm-Vorlagen zu generieren:

    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. Führen Sie als Nächstes den folgenden Befehl aus, um die im vorherigen Schritt generierte YAML-Datei auf den Google Kubernetes Engine-Cluster anzuwenden:

    kubectl apply -f citadel.yaml
    
  5. Prüfen Sie, ob Citadel korrekt funktioniert:

    kubectl get pods --namespace=istio-system
    

    Prüfen Sie, ob die Citadel-Bereitstellung in einem einzigen Pod ausgeführt wird.

Netzwerkanforderungen für die Multicluster-Zuweisung

Damit die Multicluster-Zuweisung in Ihrem Bereich funktioniert, müssen Sie dafür sorgen, dass jeder Cluster einen Zuweisungsdienst ausführt, bei dem der Dienst eine öffentliche externe Adresse hat.

Um sicherzustellen, dass dies konfiguriert wurde, prüfen Sie, ob dem Dienst ein externer Load-Balancer zugewiesen wurde:

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

RESERVED_IP darf nicht leer sein.

Multicluster-Zuweisung validieren

Führen Sie folgende Schritte aus, um den Zuweisungsprozess zu testen:

  1. Registrieren Sie zwei Game Servers-Cluster in Ihrem Bereich und konfigurieren Sie sie für die Multicluster-Zuweisung, wie oben gezeigt.

  2. Eine Game Servers-Bereitstellung erstellen.

  3. Erstellen Sie eine Game Servers-Konfiguration mit einer Fleet-Spezifikation, bei der Replikate auf 5 gesetzt sind und das Label gameName: udp-server angewendet wird.

  4. Aktualisieren Sie das Rollout für die Game Servers-Bereitstellung, um die Konfiguration live zu machen.

  5. Kopieren Sie das folgende YAML-Manifest in einen LOCAL_FILE:

    apiVersion: "allocation.agones.dev/v1"
    kind: GameServerAllocation
    spec:
      multiClusterSetting:
        enabled: true
      required:
        matchLabels:
          gameName: udp-server
    

Verwenden Sie den folgenden Befehl, um die YAML-Datei auf einen der Game Servers-Cluster in Ihrem Bereich anzuwenden:

kubectl create -f LOCAL_FILE -o yaml

Dadurch wird eines der zehn einsatzbereiten Replikate in den beiden Clustern zugewiesen. Wiederholen Sie den Befehl neun weitere Mal und achten Sie darauf, dass alle zehn Replikate in beiden Clustern zugewiesen sind.

Jeder Endpunkt in einem beliebigen Cluster innerhalb des Bereiches kann verwendet werden, um ein GameServer in jedem Cluster im Bereich zuzuordnen. Für die GameServer-Zuweisungen wird Load-Balancing für alle Cluster innerhalb des Bereichs mithilfe eines Round-Robin-Schemas durchgeführt.

Fehlerbehebung

Wenn Sie Probleme mit den Verfahren in diesem Leitfaden haben, empfehlen wir Ihnen die folgenden Dokumente zur Fehlerbehebung:

Keine Richtlinie für Multicluster-Zuweisung angegeben

Sie versuchen, einen Spieleserver zuzuweisen und sehen die folgende Fehlermeldung:

no multi-cluster allocation policy is specified

Prüfen Sie, ob Sie Citadel ordnungsgemäß auf dem Cluster installiert haben. Achten Sie dabei darauf, dass das Secret istio.default von Citadel im Gameserver-Namespace erstellt wird:

kubectl get secret istio.default -n NAMESPACE

Das Zertifikat wurde von einer unbekannten Behörde signiert

Sie versuchen, einen Spieleserver zuzuweisen und sehen die folgende Fehlermeldung:

transport: authentication handshake failed: x509: certificate signed by unknown authority

Prüfen Sie, ob Sie das Kubernetes-Secret allocator-tls-ca für alle Cluster richtig festgelegt haben. Bei der Installation von Helm wird das allocator-tls-ca-Secret ebenfalls aktualisiert. Wenn Sie das TLS-Secret jedoch manuell ändern, müssen Sie auch das allocator-tls-ca-Secret aktualisieren. Führen Sie die folgenden Befehle aus, um die Zertifizierungsstelle zu überprüfen:

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

Bei der Bestätigung sollte tls.crt: OK ausgegeben werden.

Ursache behoben, Problem weiterhin vorhanden

Es kann bis zu einer Stunde dauern, bis Änderungen, die an einem einzelnen Cluster vorgenommen wurden, abgeglichen werden. Sie können den Abgleich sofort auslösen, indem Sie eine Änderung an Ihren Game Servers-Ressourcen vornehmen, indem Sie zum Beispiel Labels für eine echte Ressource aktualisieren:

gcloud game servers realms update REALM_NAME --update-labels=usage=testing --location=REALM_LOCATION

Nächste Schritte