이 페이지에서는 Game Servers에 대해 멀티 클러스터 할당을 구성하는 방법을 설명합니다. 멀티 클러스터 할당을 사용하면 한 렐름 내의 한 클러스터에서 Ready
상태의 GameServer
를 요청하고, 해당 렐름 내의 모든 클러스터에서 Ready
상태의 GameServer
를 다시 가져올 수 있습니다. 멀티 클러스터 할당을 위해서는 클러스터가 서로 연결되도록 설정하고 멀티 클러스터 할당 엔드포인트에도 연결되도록 설정하는 수동 구성 및 설정이 필요합니다.
GameServer
할당에 관한 상세 내용은 Agones Game Servers 플릿 만들기 빠른 시작에서 전체 개요를 확인하세요.
시작하기 전에
시작하기 전에 Game Servers 개요의 주요 개념을 숙지하는 것이 좋습니다. 또한 다음 태스크를 수행했는지 확인합니다.
- Game Services API가 사용 설정되어 있는지 확인합니다. Game Services API 사용 설정
- gcloud CLI가 설치된 셸을 선택하거나 API 클라이언트를 사용합니다.
Google Cloud Console로 이동.
Console의 오른쪽 상단에서 Cloud Shell 활성화 버튼을 클릭합니다.
- 서비스 계정 만들기.
- 비공개 키를 JSON 파일로 다운로드합니다.
-
GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 사용자 인증 정보가 포함된 JSON 파일의 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로 새 세션을 열면 변수를 다시 설정합니다.
Cloud Shell
Cloud Shell을 시작하려면 다음 단계를 수행하세요.
Console 하단의 프레임에서 Cloud Shell 세션이 열립니다.
이 셸을 사용하여 gcloud
명령어를 실행합니다.
로컬 셸
gcloud CLI 설치
Google Cloud CLI에 원하는 기본 프로젝트를 설정했는지 확인합니다. 그렇지 않으면 나중에 명령어마다 --project
플래그를 명시적으로 지정해야 합니다.
gcloud config list project
사용할 수 없는 경우 다음 명령어를 실행하여 기본 프로젝트를 설정하고 PROJECT_ID
를 원하는 프로젝트 ID로 바꾸세요.
gcloud config set project PROJECT_ID
다음 명령어를 실행하여 Google Cloud CLI 버전을 확인합니다.
Game Servers에는 gcloud CLI 버전 306.0.0
이상이 필요합니다.
gcloud version
설치를 업데이트하려면 다음 명령어를 실행합니다.
gcloud components update
curl / PowerShell
curl
또는 Windows PowerShell에서 REST API를 사용하려면 다음을 수행합니다.
클라이언트 라이브러리
클라이언트 라이브러리를 사용하여 Google Cloud Game Servers를 프로그래매틱 방식으로 제어할 수 있습니다. 라이브러리 사용 및 인증에 대한 안내는 클라이언트 라이브러리 개요를 참조하세요.
Agones 할당자 서비스 구성
Agones 설치를 위해 Agones 할당자 서비스가 설정되어 있고 단일 클러스터 할당이 동일한 가이드를 사용하여 작동하는지 확인합니다.
기본적으로 agones-allocator
서비스에는 유효한 서비스 인증서가 설치되어 있지 않고 인증서를 바꿔야 합니다.
리전별 Google Cloud Platform IP 주소를 예약하고 예약된 IP를 사용하여 agones-allocator
를 설치하면 서비스에 대한 유효한 인증서도 발급됩니다. IP를 예약하려면 다음 명령어를 실행합니다.
gcloud compute addresses create allocator-service --region REGION
예약된 IP를 찾으려면 다음 명령어를 실행합니다.
gcloud compute addresses describe allocator-service --region REGION --format="value(address)"
그런 다음 이전 명령어의 예약된 IP를 RESERVED_IP로 전달하여 Agones를 설치/업그레이드합니다.
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는 agones-allocator
서비스에 사용할 IP 주소입니다.
RELEASE은 helm 차트 설치에 대한 Agones 출시의 이름입니다.
Citadel 설치
Game Servers는 Citadel 프로젝트를 Agones에서 클러스터 사이의 보안 연결을 용이하게 하는 멀티 클러스터 할당 클라이언트 측 인증서의 인증서 관리자로 사용합니다. Game Servers에 등록된 각 Google Kubernetes Engine 클러스터에 설치해야 합니다.
클러스터의 모든 네임스페이스에 대해 Citadel은 Game Servers에서 클라이언트 측 인증서로 사용하는 istio.default
Kubernetes secret
을 실행합니다.
Google Kubernetes Engine 클러스터에 Istio를 이미 설치한 경우 이 단계를 건너뛸 수 있습니다. 현재 전체 Istio 설치에서 Agones 호환성과 관련된 알려진 문제가 있습니다.
Terraform 사용자의 경우에는 Terraform을 사용하여 Citadel을 설치할 수 있습니다. GitHub에 Terraform을 사용하여 Citadel 설치에 대한 자세한 내용은 예시 구성 파일을 참조하세요.
이 가이드에서는 helm v3 및 git용 명령줄 도구가 설치되어 있다고 가정합니다.
Citadel을 설치하려면 다음 안내를 따르세요.
Istio GitHub 저장소를 클론합니다.
git clone -b release-1.5 https://github.com/istio/istio.git
Istio의 새 네임스페이스를 만듭니다.
kubectl create ns istio-system
다음 각 명령어를 복사하고 실행하여 Istio Helm 템플릿에서 Citadel YAML 설치 파일을 생성합니다.
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
다음으로 다음 명령어를 실행하여 이전 단계에서 생성한 YAML 파일을 Google Kubernetes Engine 클러스터에 적용합니다.
kubectl apply -f citadel.yaml
Citadel이 올바르게 작동하는지 확인합니다.
kubectl get pods --namespace=istio-system
Citadel 배포가 단일 Pod로 실행되는지 확인합니다.
멀티 클러스터 할당의 네트워킹 요구사항
멀티 클러스터 할당이 렐름에서 작동하려면 각 클러스터가 서비스에 공개 외부 주소가 있는 할당자 서비스를 실행하는지 확인해야 합니다.
구성되어 있는지 확인하려면 외부 부하 분산기가 서비스에 할당되어 있는지 확인합니다.
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는 비워 둘 수 없습니다.
멀티 클러스터 할당 검사
할당 프로세스를 테스트하려면 다음 단계를 완료하세요.
렐름에 Game Servers 클러스터 2개를 등록하고 위에 표시된 대로 멀티 클러스터 할당에 구성합니다.
복제본이
5
로 설정되고gameName: udp-server
라벨이 적용된 플릿 사양으로 Game Servers 구성을 만듭니다.Game Servers 배포의 출시를 업데이트하여 구성을 활성화합니다.
다음 YAML을 LOCAL_FILE에 복사합니다.
apiVersion: "allocation.agones.dev/v1" kind: GameServerAllocation spec: multiClusterSetting: enabled: true required: matchLabels: gameName: udp-server
다음 명령어를 사용하여 YAML 파일을 렐름의 Game Servers 클러스터 중 하나에 적용합니다.
kubectl create -f LOCAL_FILE -o yaml
이렇게 하면 두 클러스터에 준비된 복제본 10개 중 1개가 할당됩니다. 명령어를 9번 더 반복하여 두 클러스터의 복제본 10개가 모두 할당되었는지 확인합니다.
렐름 내 모든 클러스터의 모든 엔드포인트를 사용하여 렐름의 모든 클러스터에서 GameServer
를 할당할 수 있습니다. GameServer
할당은 라운드 로빈 스키마를 사용하여 렐름 내의 모든 클러스터에 부하가 분산됩니다.
문제해결
이 가이드의 절차와 관련하여 문제가 발생한 경우 다음 문제 해결 문서를 검토하시기 바랍니다.
멀티 클러스터 할당 정책이 지정되지 않음
게임 서버를 할당하려고 하면 다음 오류가 표시됩니다.
no multi-cluster allocation policy is specified
게임 서버 네임스페이스에서 citadel이 istio.default
보안 비밀을 생성했는지 확인하여 클러스터에 올바르게 citadel을 설치했는지 확인합니다.
kubectl get secret istio.default -n NAMESPACE
알 수 없는 기관에서 서명한 인증서
게임 서버를 할당하려고 하면 다음 오류가 표시됩니다.
transport: authentication handshake failed: x509: certificate signed by unknown authority
모든 클러스터에 대해 allocator-tls-ca
Kubernetes 보안 비밀을 올바르게 설정했는지 확인합니다. Helm 설치 시 allocator-tls-ca
보안 비밀이 업데이트되지만 TLS 보안 비밀을 수동으로 변경하면 allocator-tls-ca
보안 비밀도 업데이트해야 합니다. 인증 기관을 확인하려면 다음 명령어를 실행합니다.
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
확인은 tls.crt: OK
를 출력해야 합니다.
근본 원인 해결했지만, 문제가 남아 있음
모든 클러스터에서 단일 클러스터에 적용되는 변경사항을 조정하는 데 최대 1시간이 걸릴 수 있습니다. 예를 들어, 렐름 리소스의 라벨을 업데이트하여 Game Servers 리소스를 변경하면 즉시 조정을 트리거할 수 있습니다.
gcloud game servers realms update REALM_NAME --update-labels=usage=testing --location=REALM_LOCATION
다음 단계
- 클러스터 등록 방법 알아보기