이 문서에서는 Cloud Storage 버킷이 있는 공유 VPC 환경에서 리전 간 내부 애플리케이션 부하 분산기를 설정하는 샘플 구성 2가지를 보여줍니다.
- 첫 번째 예시에서는 단일 서비스 프로젝트에 모든 부하 분산기 구성요소와 백엔드를 만듭니다.
- 두 번째 예시에서는 부하 분산기의 프런트엔드 구성요소 및 URL 맵은 단일 서비스 프로젝트에 만들지만 부하 분산기의 백엔드 버킷 및 Cloud Storage 버킷을 다른 서비스 프로젝트에서 만듭니다.
두 예시 모두 부하 분산기를 만들기 전에 필요한 역할을 부여하고 공유 VPC를 설정할 수 있는 동일한 초기 구성이 필요합니다.
이 문서에 설명된 예시 구성 외에도 부하 분산기의 프런트엔드와 URL 맵이 호스트 프로젝트에 생성되고 백엔드 버킷과 Cloud Storage 버킷이 서비스 프로젝트에 생성되는 공유 VPC 배포를 설정할 수도 있습니다. 다른 유효한 공유 VPC 아키텍처에 대한 자세한 내용은 공유 VPC 아키텍처를 참고하세요.
공유 VPC 네트워크를 사용하지 않으려면 Cloud Storage 버킷으로 교차 리전 내부 애플리케이션 부하 분산기 설정을 참고하세요.
시작하기 전에
설정이 다음 기본 요건을 충족하는지 확인합니다.
Google Cloud 프로젝트 만들기
하나의 호스트와 두 개의 서비스 프로젝트에 대한 Google Cloud 프로젝트를 만듭니다.
필요한 역할
Cloud Storage 버킷이 있는 공유 VPC 환경에서 리전 외부 애플리케이션 부하 분산기를 설정하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
공유 VPC를 설정하려면 다음을 충족해야 합니다.
호스트 프로젝트에 대한 Compute 공유 VPC 관리자 (
roles/compute.xpnAdmin) -
서비스 프로젝트 관리자가 공유 VPC 네트워크를 사용할 수 있도록 액세스 권한을 제공하려면 다음을 수행하세요.
호스트 프로젝트에 대한 Compute 네트워크 사용자 (
roles/compute.networkUser) -
Cloud Storage 버킷을 만들려면 서비스 프로젝트에 대한 스토리지 객체 관리자 (
roles/storage.objectAdmin)가 필요합니다. -
부하 분산 리소스를 만들려면 서비스 프로젝트에 대한 Compute 네트워크 관리자 (
roles/compute.networkAdmin) 권한이 필요합니다. -
Compute Engine 인스턴스를 만드는 경우: 서비스 프로젝트에 대한 Compute 인스턴스 관리자 (
roles/compute.instanceAdmin.v1) -
인증서 관리자 SSL 인증서를 만들고 수정하려면 서비스 프로젝트에 대한 인증서 관리자 소유자 (
roles/certificatemanager.owner)가 있어야 합니다. -
다른 서비스 프로젝트의 백엔드 버킷을 참조하려면 다음 권한이 있어야 합니다.
서비스 프로젝트의 Compute 부하 분산기 서비스 사용자 (
roles/compute.loadBalancerServiceUser)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
공유 VPC 환경 설정
호스트 프로젝트에서 다음 단계를 완료하여 공유 VPC 환경을 설정합니다.
새 부하 분산기를 만들 때마다 이 섹션의 단계를 수행할 필요는 없습니다. 하지만 부하 분산기를 만들기 전에 여기에 설명된 리소스에 액세스할 수 있는지 확인해야 합니다.
호스트 프로젝트에서는 다음 VPC 네트워크, 리전, 서브넷을 사용합니다.
네트워크. 네트워크는 커스텀 모드 VPC 네트워크이며 이름은
lb-network입니다.부하 분산기의 서브넷.
us-east1리전에 있는subnet-us이라는 이름의 서브넷은 기본 IP 범위로10.1.2.0/24를 사용합니다.asia-east1리전에 있는subnet-asia이라는 이름의 서브넷은 기본 IP 범위로10.1.3.0/24를 사용합니다.Envoy 프록시의 서브넷.
us-east1리전에 있는proxy-only-subnet-us-east1이라는 이름의 서브넷은 기본 IP 범위로10.129.0.0/23를 사용합니다.asia-east1리전에 있는proxy-only-subnet-asia-east1이라는 이름의 서브넷은 기본 IP 범위로10.130.0.0/23를 사용합니다.
부하 분산기의 전달 규칙에 대한 서브넷 구성
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network를 입력합니다.서브넷 섹션의 서브넷 생성 모드에서 커스텀을 선택합니다.
새 서브넷 섹션에 다음 정보를 입력합니다.
- 이름:
subnet-us - 리전 선택:
us-east1 - IP 주소 범위:
10.1.2.0/24
- 이름:
완료를 클릭합니다.
서브넷 추가를 클릭합니다.
다른 리전에서 부하 분산기의 전달 규칙에 대해 다른 서브넷을 만듭니다. 새 서브넷 섹션에 다음 정보를 입력합니다.
- 이름:
subnet-asia - 리전:
asia-east1 - IP 주소 범위:
10.1.3.0/24
- 이름:
완료를 클릭합니다.
만들기를 클릭합니다.
gcloud
gcloud compute networks create명령어를 사용하여lb-network라는 커스텀 VPC 네트워크를 만듭니다.gcloud compute networks create lb-network \ --subnet-mode=custom \ --project=HOST_PROJECT_IDgcloud compute networks subnets create명령어를 사용하여us-east1리전의lb-networkVPC 네트워크에subnet-us라는 서브넷을 만듭니다.gcloud compute networks subnets create subnet-us \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-east1 \ --project=HOST_PROJECT_IDgcloud compute networks subnets create명령어를 사용하여asia-east1리전의lb-networkVPC 네트워크에subnet-asia라는 서브넷을 만듭니다.gcloud compute networks subnets create subnet-asia \ --network=lb-network \ --range=10.1.3.0/24 \ --region=asia-east1 \ --project=HOST_PROJECT_IDHOST_PROJECT_ID를 공유 VPC 환경에서 호스트 프로젝트로 사용 설정된 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.
프록시 전용 서브넷 구성
프록시 전용 서브넷은 Google Cloud 에서 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.
이 프록시 전용 서브넷은 VPC 네트워크와 동일한 리전에 있는 모든 Envoy 기반 리전 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 용도별로 하나만 있을 수 있습니다. 이 예시에서는 프록시 전용 서브넷을 두 개 만듭니다. 하나는 us-east1 리전에, 다른 하나는 asia-east1 리전에 만듭니다.
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
만든 VPC 네트워크의 이름을 클릭합니다.
서브넷 탭에서 서브넷 추가를 클릭합니다.
다음 정보를 입력합니다.
- 이름에
proxy-only-subnet-us를 입력합니다. - 리전에
us-east1을 입력합니다. - 용도에서 리전 간 관리형 프록시를 선택합니다.
- IP 주소 범위에
10.129.0.0/23을 입력합니다.
- 이름에
추가를 클릭합니다.
asia-east1리전에 다른 프록시 전용 서브넷을 만듭니다. 서브넷 탭에서 서브넷 추가를 클릭합니다.다음 정보를 입력합니다.
- 이름에
proxy-only-subnet-asia를 입력합니다. - 리전에
asia-east1을 입력합니다. - 용도에서 리전 간 관리형 프록시를 선택합니다.
- IP 주소 범위에
10.130.0.0/23을 입력합니다.
- 이름에
추가를 클릭합니다.
gcloud
gcloud compute networks subnets create명령어를 사용하여us-east1리전에 프록시 전용 서브넷을 만듭니다.이 예시에서 프록시 전용 서브넷의 이름은
proxy-only-subnet-us입니다.gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23 \ --project=HOST_PROJECT_IDgcloud compute networks subnets create명령어를 사용하여asia-east1리전에 프록시 전용 서브넷을 만듭니다.이 예시에서 프록시 전용 서브넷의 이름은
proxy-only-subnet-asia입니다.gcloud compute networks subnets create proxy-only-subnet-asia \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-east1 \ --network=lb-network \ --range=10.130.0.0/23 \ --project=HOST_PROJECT_IDHOST_PROJECT_ID를 호스트 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.
방화벽 규칙 구성
이 예에서는 포트 22에서 클라이언트 VM에 대해 SSH 액세스를 허용하는 인그레스 방화벽 규칙을 사용합니다. 이 예시에서 이 방화벽 규칙의 이름은 fw-allow-ssh입니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭하여 클라이언트 VM에서 들어오는 SSH 연결을 허용하는 규칙을 만듭니다.
- 이름:
fw-allow-ssh - 네트워크:
lb-network - 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-ssh - 소스 필터: IPv4 범위
- 소스 IPv4 범위:
0.0.0.0/0 - 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
22을 입력합니다.
- 이름:
만들기를 클릭합니다.
gcloud
allow-ssh네트워크 태그를 사용하여 VM에 대한 SSH 연결을 허용하는 방화벽 규칙을 만듭니다.--source-ranges를 생략하면Google Cloud 가 모든 소스를 의미하는 것으로 규칙을 해석합니다.이 예시에서 방화벽 규칙의 이름은
fw-allow-ssh입니다.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22 \ --project=HOST_PROJECT_IDHOST_PROJECT_ID를 호스트 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.
호스트 프로젝트에서 공유 VPC 설정
공유 VPC 호스트 프로젝트를 사용 설정하고, 호스트 프로젝트의 서브넷을 공유하고, 서비스 프로젝트가 공유 VPC 네트워크를 사용할 수 있도록 호스트 프로젝트에 서비스 프로젝트를 연결할 수 있습니다. 호스트 프로젝트에서 공유 VPC를 설정하려면 다음 페이지를 참조하세요.
이전 단계를 완료한 후 다음 설정 중 하나를 수행할 수 있습니다.
서비스 프로젝트에서 부하 분산기 구성
이 예시에서는 모든 부하 분산 구성요소 (전달 규칙, 대상 프록시, URL 맵, 백엔드 버킷)와 Cloud Storage 버킷이 서비스 프로젝트에 생성되는 교차 리전 내부 애플리케이션 부하 분산기를 만듭니다.
VPC 서브넷, 프록시 전용 서브넷, 방화벽 규칙과 같은 부하 분산기의 네트워킹 리소스가 호스트 프로젝트에 생성됩니다.
이 섹션에서는 부하 분산기와 백엔드를 설정하는 방법을 보여줍니다.
이 페이지의 예시 설정에서는 임시 IP 주소 할당을 허용하는 대신 부하 분산기의 전달 규칙에 예약된 IP 주소를 명시적으로 구성합니다. 권장사항에 따라서 전달 규칙에 IP 주소를 예약하는 것이 좋습니다.
Cloud Storage 버킷 구성
Cloud Storage 버킷을 구성하는 프로세스는 다음과 같습니다.
Cloud Storage 버킷 만들기
이 예시에서는 us-east1 리전과 asia-east1 리전에 하나씩 2개의 Cloud Storage 버킷을 만듭니다. 프로덕션 배포의 경우 여러 Google Cloud 리전에서 객체를 자동으로 복제하는 멀티 리전 버킷을 선택하는 것이 좋습니다. 이렇게 하면 콘텐츠의 가용성이 향상되고 애플리케이션 전체의 내결함성이 개선됩니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
시작하기 섹션에서 이름 지정 가이드라인에 따라 전역적으로 고유한 이름을 입력합니다.
데이터 저장 위치 선택을 클릭합니다.
위치 유형을 리전으로 설정합니다.
리전 목록에서 us-east1을 선택합니다.
만들기를 클릭합니다.
버킷을 클릭하여 Cloud Storage 버킷 페이지로 돌아갑니다. 다음 안내를 따라 두 번째 버킷을 만들되, 위치를 asia-east1으로 설정합니다.
gcloud
gcloud storage buckets create명령어를 사용하여us-east1리전에 첫 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_IDgcloud storage buckets create명령어를 사용하여asia-east1리전에 두 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=asia-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
BUCKET1_NAME및BUCKET2_NAME: Cloud Storage 버킷 이름SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
Cloud Storage 버킷에 콘텐츠 복사
Cloud Storage 버킷을 채우려면 공개 Cloud Storage 버킷의 그래픽 파일을 자체 Cloud Storage 버킷으로 복사합니다.
Cloud Shell에서 다음 명령어를 실행하여 버킷 이름 변수를 고유한 Cloud Storage 버킷 이름으로 바꿉니다.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
BUCKET1_NAME 및 BUCKET2_NAME을 Cloud Storage 버킷 이름으로 바꿉니다.
Cloud Storage 버킷을 공개적으로 액세스할 수 있도록 설정
공개 인터넷에서 모든 사람이 버킷의 모든 객체를 읽을 수 있도록 하려면 allUsers 주 구성원에 스토리지 객체 뷰어 역할(roles/storage.objectViewer)을 부여합니다.
콘솔
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 버킷마다 다음 절차를 반복합니다.
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 목록에서 공개하려는 버킷의 이름을 클릭합니다.
권한 탭을 선택합니다.
권한 섹션에서 액세스 권한 부여 버튼을 클릭합니다. 액세스 권한 부여 대화상자가 나타납니다.
새 주 구성원 필드에
allUsers를 입력합니다.역할 선택 필드에서 필터 상자에
Storage Object Viewer를 입력하고 필터링된 결과에서 스토리지 객체 뷰어를 선택합니다.저장을 클릭합니다.
공개 액세스 허용을 클릭합니다.
gcloud
모든 사용자에게 버킷의 객체 보기 권한을 부여하려면 gcloud storage buckets add-iam-policy-binding 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME --member=allUsers --role=roles/storage.objectViewer
BUCKET1_NAME 및 BUCKET2_NAME을 Cloud Storage 버킷 이름으로 바꿉니다.
부하 분산기의 IP 주소 예약
다음에 대해 고정 내부 IP 주소를 예약합니다.
us-east1리전의 전달 규칙asia-east1리전의 전달 규칙
콘솔
Google Cloud 콘솔에서 IP 주소 페이지로 이동합니다.
내부 예약을 클릭합니다.
이름에 새 주소의 이름을 입력합니다.
IP 버전에서 IPv4를 선택합니다.
예약을 클릭하여 IP 주소를 예약합니다.
이 단계를 다시 따라
asia-east1리전에서 IP 주소를 예약합니다.
gcloud
us-east1리전에서 고정 내부 IP 주소를 예약하려면gcloud compute addresses create명령어를 사용합니다.gcloud compute addresses create ADDRESS1_NAME \ --region=us-east1 \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --project=SERVICE_PROJECT_ID
다음을 바꿉니다.
ADDRESS1_NAME: 이 IP 주소에 할당할 이름HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 ID입니다.SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
asia-east1리전에서 고정 내부 IP 주소를 예약하려면gcloud compute addresses create명령어를 사용합니다.gcloud compute addresses create ADDRESS2_NAME \ --region=asia-east1 \ --subnet=projects/HOST_PROJECT_ID/regions/asia-east1/subnetworks/subnet-asia \ --project=SERVICE_PROJECT_ID
다음을 바꿉니다.
ADDRESS2_NAME: 이 IP 주소에 할당할 이름입니다.HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 ID입니다.SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
결과를 보려면
gcloud compute addresses describe명령어를 사용하세요.gcloud compute addresses describe ADDRESS1_NAME \ --project=SERVICE_PROJECT_ID
gcloud compute addresses describe ADDRESS2_NAME \ --project=SERVICE_PROJECT_ID
다음을 바꿉니다.
ADDRESS1_NAME및ADDRESS2_NAME: IP 주소에 할당한 이름SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
반환된 IP 주소는 다음 섹션에서
RESERVED_IP_ADDRESS로 참조됩니다.
SSL 인증서 리소스 설정
요청 및 응답 프로토콜로 HTTPS를 사용하는 리전 간 내부 애플리케이션 부하 분산기의 경우 다음 문서 중 하나에 설명된 대로 인증서 관리자를 사용하여 SSL 인증서 리소스를 만듭니다.
인증서를 만든 후 인증서를 HTTPS 대상 프록시에 연결할 수 있습니다.
Google 관리형 인증서를 사용하는 것이 좋습니다.
백엔드 버킷으로 부하 분산기 구성
이 섹션에서는 교차 리전 내부 애플리케이션 부하 분산기에 대해 다음 리소스를 만드는 방법을 보여줍니다.
- 백엔드 버킷 2개. 백엔드 버킷은 앞에서 만든 Cloud Storage 버킷에 대한 래퍼로 작동합니다.
- URL 맵
- 대상 프록시
- 리전 IP 주소가 있는 전역 전달 규칙 2개. 전달 규칙에는 부하 분산기의 전달 규칙에 대해 생성된 서브넷의 IP 주소가 할당됩니다. 프록시 전용 서브넷에서 전달 규칙에 IP 주소를 할당하려고 시도하면 전달 규칙 만들기가 실패합니다.
이 예시에서는 클라이언트와 부하 분산기 간의 요청 및 응답 프로토콜로 HTTP 또는 HTTPS를 사용할 수 있습니다. HTTPS 부하 분산기를 만들려면 부하 분산기의 프런트엔드에 SSL 인증서 리소스를 추가해야 합니다.
gcloud CLI를 사용하여 앞에서 언급한 부하 분산 구성요소를 만들려면 다음 단계를 수행합니다.
gcloud compute backend-buckets create명령어를 사용하여 Cloud Storage 버킷마다 하나씩 2개의 백엔드 버킷을 만듭니다. 백엔드 버킷에는INTERNAL_MANAGED의 부하 분산 스키마가 포함됩니다.이 예시에서 백엔드 버킷의 이름은
backend-bucket-cats및backend-bucket-dogs이며, 이는 Cloud Storage 버킷의 콘텐츠를 나타냅니다.gcloud compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --project=SERVICE_PROJECT_IDgcloud compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
BUCKET1_NAME및BUCKET2_NAME: Cloud Storage 버킷 이름SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
gcloud compute url-maps create명령어를 사용해서 들어오는 요청을 백엔드 버킷으로 라우팅하는 URL 맵을 만듭니다.이 예에서 URL 맵의 이름은
lb-map입니다.gcloud compute url-maps create lb-map \ --default-backend-bucket=backend-bucket-cats \ --global \ --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.gcloud compute url-maps add-path-matcher명령어를 사용해서 URL 맵의 호스트 및 경로 규칙을 구성합니다.이 예시에서 기본 백엔드 버킷은
backend-bucket-cats이며, 그 안에 있는 모든 경로를 처리합니다. 하지만http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg를 대상으로 하는 모든 요청에는backend-bucket-dogs백엔드가 사용됩니다. 예를 들어/love-to-fetch/폴더도 기본 백엔드(backend-bucket-cats) 내에 있으면/love-to-fetch/*에 대한 특정 경로 규칙이 있기 때문에 부하 분산기에서backend-bucket-dogs백엔드가 우선적으로 사용됩니다.gcloud compute url-maps add-path-matcher lb-map \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-cats --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.gcloud compute target-http-proxies create명령어로 대상 프록시를 만듭니다.HTTP 트래픽의 경우 대상 HTTP 프록시(이름:
http-proxy)를 만들어 요청을 URL 맵으로 라우팅합니다.gcloud compute target-http-proxies create http-proxy \ --url-map=lb-map \ --global \ --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.HTTPS 트래픽의 경우 대상 HTTPS 프록시(이름:
https-proxy)를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 HTTPS 부하 분산기에 대해 SSL 인증서를 포함하는 부하 분산기의 일부입니다. 인증서를 만든 후 인증서를 HTTPS 대상 프록시에 연결할 수 있습니다.gcloud compute target-https-proxies create https-proxy \ --url-map=lb-map \ --certificate-manager-certificates=CERTIFICATE_NAME \ --global \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
CERTIFICATE_NAME: 인증서 관리자를 사용하여 만든 SSL 인증서의 이름SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
gcloud compute forwarding-rules create명령어를 사용하여 각각us-east1리전의 IP 주소와asia-east1리전의 IP 주소를 사용해서 2개의 전역 전달 규칙을 만듭니다.HTTP 트래픽의 경우 들어오는 요청을 HTTP 대상 프록시로 라우팅하는 전역 전달 규칙(
http-fw-rule-1및http-fw-rule-2)을 만듭니다.gcloud compute forwarding-rules create http-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global \ --project=SERVICE_PROJECT_IDgcloud compute forwarding-rules create http-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/asia-east1/subnetworks/subnet-asia \ --subnet-region=asia-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDRESERVED_IP_ADDRESS: 예약한 IP 주소SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
HTTPS 트래픽의 경우 들어오는 요청을 HTTPS 대상 프록시로 라우팅하는 전역 전달 규칙(
https-fw-rule-1및https-fw-rule-2)을 만듭니다.gcloud compute forwarding-rules create https-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global \ --project=SERVICE_PROJECT_IDgcloud compute forwarding-rules create https-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/asia-east1/subnetworks/subnet-asia \ --subnet-region=asia-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDRESERVED_IP_ADDRESS: 예약한 IP 주소SERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
부하 분산기로 HTTP 요청 전송
내부 클라이언트 VM에서 부하 분산기의 전달 규칙으로 요청을 전송합니다.
부하 분산기의 전달 규칙에 해당하는 IP 주소 가져오기
부하 분산기의 전달 규칙에 해당하는 IP 주소를 가져오려면 다음 단계를 완료하세요.
us-east1리전에 있는 부하 분산기의 전달 규칙(http-fw-rule-1)에 해당하는 IP 주소를 가져옵니다.gcloud compute forwarding-rules describe http-fw-rule-1 \ --global \ --project=SERVICE_PROJECT_IDasia-east1리전에 있는 부하 분산기의 전달 규칙(http-fw-rule-2)에 해당하는 IP 주소를 가져옵니다.gcloud compute forwarding-rules describe http-fw-rule-2 \ --global \ --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.반환된 IP 주소를 복사하여 후속 단계에서
FORWARDING_RULE_IP_ADDRESS로 사용합니다.
클라이언트 VM을 만들어 연결 테스트
연결을 테스트할 클라이언트 VM을 만들려면 다음 단계를 완료하세요.
us-east1리전에client-a라는 클라이언트 VM을 만듭니다.gcloud compute instances create client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --zone=us-east1-c \ --tags=allow-ssh \ --project=SERVICE_PROJECT_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDSERVICE_PROJECT_ID: 서비스 프로젝트에 할당된 Google Cloud 프로젝트 ID
클라이언트 VM에 대한 SSH 연결을 설정합니다.
gcloud compute ssh client-a \ --zone=us-east1-c \ --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.이 예시에서 교차 리전 내부 애플리케이션 부하 분산기에는 VPC 네트워크의
us-east1및asia-east1리전에 있는 프런트엔드 가상 IP 주소(VIP)가 사용됩니다. curl을 사용하여 어느 한 리전의 VIP로 HTTP 요청을 수행합니다.curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
FORWARDING_RULE_IP_ADDRESS를 부하 분산기의 전달 규칙 IP 주소로 바꿉니다.
고가용성 테스트
고가용성을 테스트하려면 다음 단계를 완료하세요.
리전 서비스 중단을 시뮬레이션하기 위해
us-east1리전에서 전달 규칙(http-fw-rule-1)을 삭제하고us-east리전의 클라이언트가 백엔드 버킷의 데이터에 계속 액세스할 수 있는지 확인합니다.gcloud compute forwarding-rules delete http-fw-rule-1 \ --global \ --project=SERVICE_PROJECT_IDSERVICE_PROJECT_ID를 서비스 프로젝트에 할당된Google Cloud 프로젝트 ID로 바꿉니다.curl을 사용하여 어느 한 리전에서 전달 규칙의 VIP로 HTTP 요청을 수행합니다.
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
FORWARDING_RULE_IP_ADDRESS를 전달 규칙의 IP 주소로 바꿉니다.us-east1리전의 VIP로 HTTP 요청을 수행하면 DNS 라우팅 정책에 따라 이 VIP가 응답하지 않는 것이 감지되고 그 다음으로 적합한 VIP를 클라이언트에 반환합니다(이 예시에서는asia-east1). 이 동작은 리전 서비스 중단 시에도 애플리케이션이 계속 작동하도록 보장합니다.
프로젝트 간 구성으로 부하 분산기 구성
이 페이지의 이전 예시에서는 모든 부하 분산기 구성 요소와 백엔드가 서비스 프로젝트에 생성되는 공유 VPC 배포를 설정하는 방법을 보여줍니다.
리전 간 내부 애플리케이션 부하 분산기를 사용하면 단일 호스트 또는 서비스 프로젝트의 URL 맵에서 공유 VPC 환경의 여러 서비스 프로젝트에 위치한 백엔드 버킷을 참조할 수 있는 공유 VPC 배포도 구성할 수 있습니다.
이 섹션의 단계를 참조하면 여기에 나온 지원되는 조합을 구성할 수 있습니다.
- 호스트 프로젝트의 전달 규칙, 대상 프록시 및 URL 맵, 서비스 프로젝트의 백엔드 버킷
- 서비스 프로젝트의 전달 규칙, 대상 프록시 및 URL 맵, 다른 서비스 프로젝트의 백엔드 버킷
이 섹션에서는 후자 구성이 예시로 설명되어 있습니다.
설정 개요
이 예시에서는 프런트엔드 및 백엔드가 서로 다른 두 서비스 프로젝트에 있는 부하 분산기를 구성합니다.
아직 수행하지 않았으면 공유 VPC를 설정하고 이 예시에 필요한 네트워크, 서브넷, 방화벽 규칙을 구성하는 모든 기본 요건 단계를 완료해야 합니다. 자세한 내용은 이 페이지 시작 부분에 있는 다음 섹션을 참조하세요.
서비스 프로젝트 B에서 Cloud Storage 버킷 및 백엔드 버킷 구성
이 섹션의 모든 단계는 서비스 프로젝트 B에서 수행되어야 합니다.
백엔드 버킷을 만들려면 다음을 수행해야 합니다.
- Cloud Storage 버킷 만들기
- Cloud Storage 버킷에 콘텐츠를 복사합니다.
- Cloud Storage 버킷을 공개적으로 액세스할 수 있도록 설정합니다.
- 백엔드 버킷을 만들고 Cloud Storage 버킷을 가리키도록 합니다.
Cloud Storage 버킷 만들기
이 예시에서는 us-east1 리전과 asia-east1 리전에 하나씩 2개의 Cloud Storage 버킷을 만듭니다. 프로덕션 배포의 경우 여러 Google Cloud 리전에서 객체를 자동으로 복제하는 멀티 리전 버킷을 선택하는 것이 좋습니다. 이렇게 하면 콘텐츠의 가용성이 향상되고 애플리케이션 전체의 내결함성이 개선됩니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
시작하기 섹션에서 이름 지정 가이드라인에 따라 전역적으로 고유한 이름을 입력합니다.
데이터 저장 위치 선택을 클릭합니다.
위치 유형을 리전으로 설정합니다.
리전 목록에서 us-east1을 선택합니다.
만들기를 클릭합니다.
버킷을 클릭하여 Cloud Storage 버킷 페이지로 돌아갑니다. 다음 안내를 따라 두 번째 버킷을 만들되, 위치를 asia-east1으로 설정합니다.
gcloud
gcloud storage buckets create명령어를 사용하여us-east1리전에 첫 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_B_IDgcloud storage buckets create명령어를 사용하여asia-east1리전에 두 번째 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=asia-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_B_ID
다음을 바꿉니다.
BUCKET1_NAME및BUCKET2_NAME: Cloud Storage 버킷 이름입니다.SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud 프로젝트 ID입니다.
Cloud Storage 버킷에 콘텐츠 복사
Cloud Storage 버킷을 채우려면 공개 Cloud Storage 버킷의 그래픽 파일을 자체 Cloud Storage 버킷으로 복사합니다.
Cloud Shell에서 다음 명령어를 실행하여 버킷 이름 변수를 고유한 Cloud Storage 버킷 이름으로 바꿉니다.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
BUCKET1_NAME 및 BUCKET2_NAME을 Cloud Storage 버킷 이름으로 바꿉니다.
Cloud Storage 버킷을 공개적으로 액세스할 수 있도록 설정
공개 인터넷에서 모든 사람이 버킷의 모든 객체를 읽을 수 있도록 하려면 allUsers 주 구성원에 스토리지 객체 뷰어 역할(roles/storage.objectViewer)을 부여합니다.
콘솔
모든 사용자에게 버킷의 객체를 볼 수 있는 액세스 권한을 부여하려면 버킷마다 다음 절차를 반복합니다.
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 목록에서 공개하려는 버킷의 이름을 클릭합니다.
권한 탭을 선택합니다.
권한 섹션에서 액세스 권한 부여 버튼을 클릭합니다. 액세스 권한 부여 대화상자가 나타납니다.
새 주 구성원 필드에
allUsers를 입력합니다.역할 선택 필드에서 필터 상자에
Storage Object Viewer를 입력하고 필터링된 결과에서 스토리지 객체 뷰어를 선택합니다.저장을 클릭합니다.
공개 액세스 허용을 클릭합니다.
gcloud
모든 사용자에게 버킷의 객체 보기 권한을 부여하려면 gcloud storage buckets add-iam-policy-binding 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME --member=allUsers --role=roles/storage.objectViewer
BUCKET1_NAME 및 BUCKET2_NAME을 Cloud Storage 버킷 이름으로 바꿉니다.
백엔드 버킷으로 부하 분산기 구성
백엔드 버킷을 만들려면 다음 단계를 따르세요.
gcloud compute backend-buckets create명령어를 사용하여 Cloud Storage 버킷마다 하나씩, 총 2개의 백엔드 버킷을 만듭니다. 백엔드 버킷에는INTERNAL_MANAGED의 부하 분산 스키마가 포함됩니다.이 예에서 백엔드 버킷의 이름은
backend-bucket-cats및backend-bucket-dogs이며, 이는 Cloud Storage 버킷의 콘텐츠를 나타냅니다.gcloud compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --project=SERVICE_PROJECT_B_IDgcloud compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --project=SERVICE_PROJECT_B_ID다음을 바꿉니다.
BUCKET1_NAME및BUCKET2_NAME: Cloud Storage 버킷 이름입니다.SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud 프로젝트 ID입니다.
서비스 프로젝트 A에서 부하 분산기 프런트엔드 구성요소 구성
이 섹션의 모든 단계는 서비스 프로젝트 A에서 수행되어야 합니다.
서비스 프로젝트 A에서 다음 프런트엔드 부하 분산 구성요소를 만들어야 합니다.
- 대상 프록시에 연결된 SSL 인증서 리소스입니다. 이전 섹션에 설명된 단계에 따라 SSL 인증서를 만들 수 있습니다.
- 부하 분산기의 두 전달 규칙에 대한 두 IP 주소 이전 섹션에 설명된 단계에 따라 전달 규칙의 IP 주소를 만들 수 있습니다.
- 서비스 프로젝트 B의 백엔드 버킷을 참조하는 URL 맵
- 대상 프록시
- 각각 리전 IP 주소가 있는 전달 규칙 2개
프런트엔드 구성요소를 만들려면 다음 단계를 따르세요.
gcloud compute url-maps create명령어를 사용해서 들어오는 요청을 백엔드 버킷으로 라우팅하는 URL 맵을 만듭니다.이 예에서 URL 맵의 이름은
lb-map입니다.gcloud compute url-maps create lb-map \ --default-backend-bucket=projects/SERVICE_PROJECT_B_ID/global/backendBuckets/backend-bucket-cats \ --global \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud 프로젝트 IDSERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
gcloud compute url-maps add-path-matcher명령어를 사용해서 URL 맵의 호스트 및 경로 규칙을 구성합니다.이 예시에서 기본 백엔드 버킷은
backend-bucket-cats이며, 그 안에 있는 모든 경로를 처리합니다. 하지만http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg를 대상으로 하는 모든 요청에는backend-bucket-dogs백엔드가 사용됩니다. 예를 들어/love-to-fetch/폴더도 기본 백엔드(backend-bucket-cats) 내에 있으면/love-to-fetch/*에 대한 특정 경로 규칙이 있기 때문에 부하 분산기에서backend-bucket-dogs백엔드가 우선적으로 사용됩니다.gcloud compute url-maps add-path-matcher lb-map \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=projects/SERVICE_PROJECT_B_ID/global/backendBuckets/backend-bucket-dogs" \ --default-backend-bucket=projects/SERVICE_PROJECT_B_ID/global/backendBuckets/backend-bucket-cats \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud 프로젝트 IDSERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
gcloud compute target-http-proxies create명령어를 사용하여 대상 프록시를 만듭니다.HTTP 트래픽의 경우 대상 HTTP 프록시(이름:
http-proxy)를 만들어 요청을 URL 맵으로 라우팅합니다.gcloud compute target-http-proxies create http-proxy \ --url-map=lb-map \ --global \ --project=SERVICE_PROJECT_A_IDSERVICE_PROJECT_A_ID를 서비스 프로젝트 A에 할당된Google Cloud 프로젝트 ID로 바꿉니다.HTTPS 트래픽의 경우 대상 HTTPS 프록시(이름:
https-proxy)를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 HTTPS 부하 분산기에 대해 SSL 인증서를 포함하는 부하 분산기의 일부입니다. 인증서를 만든 후 인증서를 HTTPS 대상 프록시에 연결할 수 있습니다.gcloud compute target-https-proxies create https-proxy \ --url-map=lb-map \ --certificate-manager-certificates=CERTIFICATE_NAME \ --global \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
CERTIFICATE_NAME: 인증서 관리자를 사용하여 만든 SSL 인증서의 이름SERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
gcloud compute forwarding-rules create명령어를 사용하여 각각us-east1리전의 IP 주소와asia-east1리전의 IP 주소를 사용해서 2개의 전역 전달 규칙을 만듭니다.HTTP 트래픽의 경우 들어오는 요청을 HTTP 대상 프록시로 라우팅하는 전역 전달 규칙 (
http-fw-rule-1및http-fw-rule-2)을 만듭니다.gcloud compute forwarding-rules create http-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global \ --project=SERVICE_PROJECT_A_IDgcloud compute forwarding-rules create http-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/asia-east1/subnetworks/subnet-asia \ --subnet-region=asia-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDRESERVED_IP_ADDRESS: 예약한 IP 주소SERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
HTTPS 트래픽의 경우 들어오는 요청을 HTTPS 대상 프록시로 라우팅하는 전역 전달 규칙(
https-fw-rule-1및https-fw-rule-2)을 만듭니다.gcloud compute forwarding-rules create https-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global \ --project=SERVICE_PROJECT_A_IDgcloud compute forwarding-rules create https-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/asia-east1/subnetworks/subnet-asia \ --subnet-region=asia-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDRESERVED_IP_ADDRESS: 예약한 IP 주소SERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
부하 분산기 관리자에게 백엔드 버킷을 사용할 수 있는 권한 부여
부하 분산기가 다른 서비스 프로젝트의 백엔드 버킷을 참조하게 하려면 부하 분산기 관리자에게 compute.backendBuckets.use 권한이 있어야 합니다. 이 권한을 부여하려면 Compute 부하 분산기 서비스 사용자 (roles/compute.loadBalancerServiceUser)라는 사전 정의된 IAM 역할을 사용하면 됩니다. 이 역할은 서비스 프로젝트 관리자가 부여해야 하며 서비스 프로젝트 수준 또는 개별 백엔드 버킷 수준에서 적용할 수 있습니다.
이 예시에서는 서비스 프로젝트 B의 서비스 프로젝트 관리자가 다음 명령어 중 하나를 실행하여 서비스 프로젝트 A의 부하 분산기 관리자에게 compute.backendBuckets.use 권한을 부여해야 합니다. 프로젝트 수준 (프로젝트의 모든 백엔드 버킷) 또는 백엔드 버킷별로 이 작업을 수행할 수 있습니다.
콘솔
프로젝트 수준 권한
다음 단계에 따라 프로젝트의 모든 백엔드 버킷에 대해 권한을 부여합니다.
이 단계를 완료하려면 compute.backendBuckets.setIamPolicy 및 resourcemanager.projects.setIamPolicy 권한이 필요합니다.
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
프로젝트를 선택합니다.
액세스 권한 부여를 클릭합니다.
새 주 구성원 필드에 주 구성원의 이메일 주소 또는 다른 식별자를 입력합니다.
역할 할당 섹션에서 역할 추가를 클릭합니다.
역할 선택 대화상자의 역할 검색 필드에
Compute Load Balancer Services User를 입력합니다.Compute 부하 분산기 서비스 사용자 체크박스를 선택합니다.
적용을 클릭합니다.
선택사항: 역할에 조건을 추가합니다.
저장을 클릭합니다.
개별 백엔드 버킷에 대한 리소스 수준 권한
다음 단계에 따라 프로젝트의 개별 백엔드 버킷에 대해 권한을 부여합니다.
이 단계를 완료하려면 compute.backendBuckets.setIamPolicy 권한이 필요합니다.
Google Cloud 콘솔에서 백엔드 페이지로 이동합니다.
백엔드 목록에서 액세스 권한을 부여할 백엔드 버킷을 선택하고 권한을 클릭합니다.
주 구성원 추가를 클릭합니다.
새 주 구성원 필드에 주 구성원의 이메일 주소 또는 다른 식별자를 입력합니다.
역할 선택 목록에서 Compute 부하 분산기 서비스 사용자를 선택합니다.
저장을 클릭합니다.
gcloud
프로젝트 수준 권한
다음 단계에 따라 프로젝트의 모든 백엔드 버킷에 대해 권한을 부여합니다.
이 단계를 완료하려면 compute.backendBuckets.setIamPolicy 및 resourcemanager.projects.setIamPolicy 권한이 필요합니다.
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser"
다음을 바꿉니다.
SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud프로젝트 IDLOAD_BALANCER_ADMIN: 바인딩이 추가되는 주 구성원
개별 백엔드 버킷에 대한 리소스 수준 권한
백엔드 버킷 수준에서 서비스 프로젝트 관리자는 다음 명령어 중 하나를 사용하여 Compute 부하 분산기 서비스 사용자 역할(roles/compute.loadBalancerServiceUser)을 부여할 수 있습니다.
gcloud projects add-iam-policy-binding명령어gcloud compute backend-buckets add-iam-policy-binding명령어
gcloud projects add-iam-policy-binding 명령어를 사용하여 Compute 부하 분산기 서비스 사용자 역할을 부여합니다.
이 단계를 완료하려면 compute.backendBuckets.setIamPolicy 권한이 필요합니다.
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser" \
--condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/global/backendBuckets/BACKEND_BUCKET_NAME",title=Shared VPC condition'
SERVICE_PROJECT_B_ID: 서비스 프로젝트 B에 할당된 Google Cloud프로젝트 IDLOAD_BALANCER_ADMIN: 바인딩이 추가되는 주 구성원BACKEND_BUCKET_NAME: 백엔드 버킷의 이름
gcloud compute backend-buckets add-iam-policy-binding 명령어를 사용하여 Compute 부하 분산기 서비스 사용자 역할을 부여합니다.
gcloud compute backend-buckets add-iam-policy-binding BACKEND_BUCKET_NAME \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser" \
--project=SERVICE_PROJECT_B_ID \
부하 분산기로 HTTP 요청 전송
내부 클라이언트 VM에서 부하 분산기의 전달 규칙으로 요청을 전송합니다.
부하 분산기의 전달 규칙에 해당하는 IP 주소 가져오기
부하 분산기의 전달 규칙에 해당하는 IP 주소를 가져오려면 다음 단계를 완료하세요.
us-east1리전에 있는 부하 분산기의 전달 규칙(http-fw-rule-1)에 해당하는 IP 주소를 가져옵니다.gcloud compute forwarding-rules describe http-fw-rule-1 \ --global \ --project=SERVICE_PROJECT_A_IDasia-east1리전에 있는 부하 분산기의 전달 규칙(http-fw-rule-2)에 해당하는 IP 주소를 가져옵니다.gcloud compute forwarding-rules describe http-fw-rule-2 \ --global \ --project=SERVICE_PROJECT_A_IDSERVICE_PROJECT_A_ID를 서비스 프로젝트 A에 할당된Google Cloud 프로젝트 ID로 바꿉니다.반환된 IP 주소를 복사하여 후속 단계에서
FORWARDING_RULE_IP_ADDRESS로 사용합니다.
클라이언트 VM을 만들어 연결 테스트
연결을 테스트할 클라이언트 VM을 만들려면 다음 단계를 완료하세요.
us-east1리전에client-a라는 클라이언트 VM을 만듭니다.gcloud compute instances create client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/subnet-us \ --zone=us-east1-c \ --tags=allow-ssh \ --project=SERVICE_PROJECT_A_ID다음을 바꿉니다.
HOST_PROJECT_ID: 호스트 프로젝트에 할당된 Google Cloud 프로젝트 IDSERVICE_PROJECT_A_ID: 서비스 프로젝트 A에 할당된 Google Cloud 프로젝트 ID
클라이언트 VM에 대한 SSH 연결을 설정합니다.
gcloud compute ssh client-a \ --zone=us-east1-c \ --project=SERVICE_PROJECT_A_IDSERVICE_PROJECT_A_ID를 서비스 프로젝트 A에 할당된Google Cloud 프로젝트 ID로 바꿉니다.이 예시에서 교차 리전 내부 애플리케이션 부하 분산기에는 VPC 네트워크의
us-east1및asia-east1리전에 있는 프런트엔드 가상 IP 주소(VIP)가 사용됩니다. curl을 사용하여 어느 한 리전의 VIP로 HTTP 요청을 수행합니다.curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
FORWARDING_RULE_IP_ADDRESS를 부하 분산기의 전달 규칙 IP 주소로 바꿉니다.
고가용성을 테스트하려면 이 문서의 고가용성 테스트 섹션을 참고하세요.