부하 분산기에 인스턴스 그룹 추가


이 페이지에서는 기존 관리형 인스턴스 그룹(MIG)을 백엔드 서비스 또는 부하 분산기의 대상 풀에 추가하는 방법을 설명합니다.

부하 분산기는 사용자 트래픽을 분산시켜 애플리케이션에서 성능 문제가 발생할 위험을 줄이는 데 도움이 됩니다. Google Cloud Load Balancing에서는 관리형과 비관리형 인스턴스 그룹을 모두 사용하여 트래픽을 처리합니다. 사용 중인 부하 분산기 유형에 따라 인스턴스 그룹을 대상 풀이나 백엔드 서비스에 추가할 수 있습니다.

MIG 백엔드를 사용하여 특정 유형의 부하 분산기를 만드는 방법은 Cloud Load Balancing 문서를 참조하세요.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

백엔드 서비스에 관리형 인스턴스 그룹 추가

대부분의 부하 분산기 유형을 만들려면 백엔드 서비스가 필요합니다.

백엔드 서비스에는 여러 백엔드가 포함될 수 있습니다. 인스턴스 그룹은 백엔드의 유형입니다. 인스턴스 그룹의 인스턴스는 부하 분산기의 트래픽에 응답합니다. 그러면 백엔드 서비스에는 사용할 수 있는 인스턴스, 처리할 수 있는 트래픽의 양, 현재 처리 중인 트래픽의 양이 인식됩니다. 또한 백엔드 서비스는 상태 확인을 모니터링하고 비정상 인스턴스에 새 연결을 전송하지 않습니다.

관리형 인스턴스 그룹을 백엔드 서비스에 추가하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 관리형 인스턴스 그룹을 추가할 백엔드 서비스의 이름을 클릭합니다.
  3. 수정을 클릭합니다.
  4. +백엔드 추가를 클릭합니다.
  5. 추가할 인스턴스 그룹을 선택합니다.
  6. 변경할 선택적 설정을 수정합니다.
  7. 변경사항을 저장합니다.

gcloud

다음의 add-backend 명령어를 사용합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

분산 모드 지원 여부는 부하 분산기 유형에 따라 다릅니다. 전체 목록은 각 부하 분산기에 사용 가능한 분산 모드를 참조하세요.

관리형 인스턴스 그룹의 분산 모드에 따라 추가 파라미터가 필요합니다. 자세한 내용은 SDK의 add-backend 명령어를 참조하세요.

REST

REST API를 사용하여 백엔드 서비스를 추가하려면 backendServices를 참조하세요.

제한사항

리전 MIG를 사용하는 부하 분산RATEUTILIZATION 분산 모드에서 max-rate 대상 용량을 지원하지 않습니다. 각 부하 분산기의 사용 가이드라인에 대해 자세히 알아보려면 분산 모드 및 대상 용량 설정을 참조하세요.

대상 풀에 관리형 인스턴스 그룹 추가

대상 풀은 가상 머신 인스턴스를 하나 이상 포함하는 객체입니다. 대상 풀은 외부 패스 스루 네트워크 부하 분산기에 사용됩니다. 여기서 부하 분산기는 사용자 요청을 연결된 대상 풀로 전달합니다. 해당 대상 풀에 속하는 인스턴스가 이러한 요청을 처리하고 응답을 반환합니다. 인스턴스 그룹에서 인스턴스가 추가되거나 삭제될 때 대상 풀이 변경사항으로 자동 업데이트되도록 관리형 인스턴스 그룹을 대상 풀에 추가할 수 있습니다.

대상 풀이 있어야 대상 풀에 관리형 인스턴스 그룹을 추가할 수 있습니다. 자세한 내용은 대상 풀 추가에 대한 설명서를 참조하세요.

대상 풀에 기존 관리형 인스턴스 그룹을 추가하려면 다음 안내를 따르세요. 그러면 관리형 인스턴스 그룹에 속하는 모든 VM 인스턴스가 대상 풀에 추가됩니다.

콘솔

  1. Google Cloud 콘솔에서 대상 풀 페이지로 이동합니다.

    대상 풀 페이지로 이동

  2. 인스턴스 그룹을 추가할 대상 풀을 클릭합니다.
  3. 수정 버튼을 클릭합니다.
  4. VM 인스턴스 섹션까지 아래로 스크롤하고 인스턴스 그룹 선택을 클릭합니다.
  5. 드롭다운 메뉴에서 인스턴스 그룹을 선택합니다.
  6. 변경사항을 저장합니다.

gcloud

set-target-pools 명령어를 사용합니다.

gcloud compute instance-groups managed set-target-pools INSTANCE_GROUP \
        --target-pools TARGET_POOL,..

각 항목의 의미는 다음과 같습니다.

  • INSTANCE_GROUP은 인스턴스 그룹의 이름입니다.
  • TARGET_POOL,..은 이 인스턴스 그룹을 추가할 하나 이상의 대상 풀 이름입니다.

REST

리전 MIG 또는 영역 MIG에 대해 setTargetPools 메서드를 호출합니다. 예를 들면 다음과 같습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/regionInstanceGroupManagers/INSTANCE_GROUP/setTargetPools

각 항목의 의미는 다음과 같습니다.

  • PROJECT_ID는 이 요청의 프로젝트 ID입니다.
  • REGION은 인스턴스 그룹의 리전입니다.
  • INSTANCE_GROUP은 인스턴스 그룹의 이름입니다.

이 그룹을 추가할 대상 풀에 대한 URI 목록이 요청 본문에 포함되어야 합니다. 예를 들면 다음과 같습니다.

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

관리형 인스턴스 그룹에 이름이 지정된 포트 할당

이름이 지정된 포트는 포트 이름과 포트 번호를 나타내는 키-값 쌍입니다. 포트 이름은 서비스 또는 애플리케이션의 이름을 나타냅니다. 포트 번호는 서비스 또는 애플리케이션이 실행되는 포트를 나타냅니다.

Cloud Load Balancing에서는 이름이 지정된 포트를 사용합니다. 프록시 역할을 수행하는 부하 분산기는 백엔드 서비스 구성에서 이름이 지정된 단일 포트를 구독합니다. 포트 이름은 각 인스턴스 그룹 백엔드의 이름이 지정된 포트 매핑에 따라 포트 번호로 변환됩니다.

예를 들어 백엔드 서비스가 http-port라는 포트를 구독할 수 있습니다. 백엔드 인스턴스 그룹에는 http-port:80이라는 포트가 있을 수 있습니다. 백엔드 인스턴스 그룹은 프로토콜(예: TCP)을 사용하여 포트 80에서 그룹의 VM으로 트래픽을 보내도록 부하 분산기에 지시합니다. 프로토콜은 부하 분산기의 백엔드 서비스에서 정의됩니다.

이름이 지정된 포트는 프록시 부하 분산기에 사용되는 간단한 메타데이터이며, Compute Engine에서 네트워크 또는 방화벽 리소스를 제어하지 않습니다.

이름이 지정된 포트의 여러 포트 번호

각 서비스 이름에 여러 포트를 할당할 수 있습니다. 각 포트에 여러 서비스 이름을 할당할 수도 있습니다.

다음 사항에 유의하세요.

  • 포트 이름이 동일한 모든 포트 간에 트래픽이 분산됩니다.
  • 지정된 백엔드 서비스는 한 번에 이름이 지정된 포트 한 개로만 트래픽을 전달할 수 있습니다.
  • 이름이 지정된 포트에 여러 포트 번호를 사용하는 경우 포트는 모두 동일한 애플리케이션에 대한 것이어야 합니다.

    예를 들어 http:80,http:8080은 유효하지만 포트 80은 일반적으로 TLS를 지원하지 않으므로 http:80,http:443은 작동하지 않습니다.

인스턴스 그룹 하나에 이름이 지정된 포트를 여러 개 할당할 수 있습니다. 예를 들어 이름이 지정된 포트 http-port를 구독하고 백엔드 인스턴스 그룹이 2개 있는 예시 백엔드 서비스를 살펴보겠습니다.

  • 이름이 지정된 포트가 http-port:80instance-group-a
  • 이름이 지정된 포트가 http-port:79instance-group-b

이 백엔드 서비스는 instance-group-a에서 VM의 트래픽을 포트 80으로 보내고, instance-group-b에서 VM의 트래픽을 포트 79로 보냅니다.

여러 부하 분산기의 경우 여러 백엔드 서비스에 동일한 인스턴스 그룹을 추가하고 인스턴스 그룹이 각 부하 분산기에서 다른 포트를 제공하는 경우 이름이 지정된 단일 포트에 모든 포트 번호를 추가하지 마세요. 대신 고유한 이름이 지정된 포트를 만들어 각 백엔드 서비스가 제공할 포트 집합에 매핑합니다.

예를 들어 각각 자체 부하 분산기가 있는 3개의 애플리케이션이 있다고 가정합니다. 애플리케이션마다 자체 포트 번호(app1: 81, app2: 82, app3: 83)가 있습니다. 3개의 백엔드 서비스가 모두 공통 인스턴스 그룹을 사용하고 있다고 가정하고 이 인스턴스 그룹에 이름이 지정된 포트를 [app1:81, app2:82, app3:83]으로 할당합니다.

이름이 지정된 포트 및 상태 점검

외부 애플리케이션 부하 분산기 또는 내부 애플리케이션 부하 분산기에서 작동하도록 백엔드 서비스에 포트 번호가 여러 개 있는 이름이 지정된 포트의 경우 상태 점검에 특정 포트 번호 대신 --use-serving-port 플래그가 있어야 합니다. Google Cloud Console에서는 이 옵션을 사용할 수 없습니다. --use-serving-port를 설정하려면 Google Cloud CLI 또는 API를 사용해야 합니다.

예를 들어 인스턴스 그룹이 하나인 동일한 백엔드 서비스의 3개의 다른 포트(81, 82, 83)에서 트래픽을 부하 분산하는 애플리케이션이 있다고 가정해 보겠습니다. 이 인스턴스 그룹의 포트를 [app:81, 82, 83]으로 할당할 수 있습니다. 이 시나리오의 상태 점검에는 --use-serving-port 플래그가 있어야 합니다.

자세한 내용은 부하 분산 상태 점검 문서를 참조하세요.

이름이 지정된 포트 및 방화벽 규칙

이름이 지정된 포트는 Google Cloud 방화벽 규칙을 만들거나 수정하지 않습니다. 백엔드 VM에 트래픽을 허용하려면 여전히 필요한 방화벽 규칙을 만들어야 합니다.

이름이 지정된 포트 및 백엔드 서비스

인스턴스 그룹 구성 외에 백엔드 서비스도 구성해야 합니다. 예를 들어 이름이 my-service-name이고 포트 8888인 인스턴스 그룹에 이름이 지정된 포트를 설정했다고 가정해 보겠습니다.

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

그런 다음 백엔드 서비스 구성에서 이름이 지정된 포트를 참조해야 하며 이때 백엔드 서비스의 --port-namemy-service-name으로 설정된 포트여야 합니다.

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

이름이 지정된 포트 만들기

콘솔

  1. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹으로 이동

  2. 이름이 지정된 포트를 지정할 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성이 있는 페이지가 열립니다.
  3. 수정을 클릭하여 이 관리형 인스턴스 그룹을 수정합니다.
  4. 포트 매핑 섹션에서 포트 추가를 클릭하고 원하는 포트 이름 또는 이 이름에 연결할 포트 번호를 입력합니다. 더 많은 항목이 필요하면 포트 추가를 다시 클릭합니다.
  5. 저장을 클릭하여 변경사항을 저장하고 관리형 인스턴스 그룹의 인스턴스에 이름이 지정된 포트를 적용합니다.

gcloud

관리형 인스턴스 그룹에 대해 instance-groups managed set-named-ports 명령어를 사용해서 하나 이상의 이름이 지정된 포트를 설정합니다. 비관리형 그룹의 경우 instance-groups set-named-ports 명령어를 사용합니다.

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

예를 들면 다음과 같습니다.

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

각 서비스 이름에 여러 포트를 할당하거나 각 서비스에 여러 이름을 할당하려면 이름이나 포트마다 항목을 2개 이상 만듭니다. 예를 들어 포트 10, 20, 80이 동일한 애플리케이션에 사용되는 경우 이러한 모든 포트에 name1을 할당할 수 있습니다. 또한 두 개의 이름 name2name3를 포트 8080에 할당할 수 있습니다. 마지막으로 다음 예시와 같이 포트 9000name4에 할당할 수 있습니다.

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

get-named-ports 명령어를 사용하여 관리형 인스턴스 그룹의 이름이 지정된 포트 할당을 확인합니다.

gcloud compute instance-groups managed get-named-ports INSTANCE_GROUP
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

REST

instanceGroupManagers APIsetNamedPorts API 메서드를 제공하지 않습니다. 대신 instanceGroups API를 사용하여 이 작업을 수행합니다.

instanceGroups API에 대한 요청을 작성한 후 인스턴스 그룹의 이름을 포함합니다. 특정 그룹에 대한 정보를 가져와 인스턴스 그룹의 현재 fingerprint 값을 가져옵니다. 요청 본문에 하나 이상의 namedPorts 값 쌍과 fingerprint를 포함합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP/setNamedPorts

{
  "fingerprint": "42WmSpB8rSM=",
  "namedPorts": [
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    },
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    }
  ]
 }
 

예를 들어 포트 10, 20, 80이 동일한 애플리케이션에 사용되는 경우 이러한 모든 포트에 name1을 할당할 수 있습니다. 또한 두 개의 이름 name2name3를 포트 8080에 할당할 수 있습니다. 마지막으로 다음 예시와 같이 포트 9000name4에 할당할 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 8080
      },
      {
       "name": "name2",
       "port": 9000
      }
   ]
}

각 서비스 이름에 여러 포트를 할당하려면 해당 서비스 이름에 대해 여러 항목을 만듭니다. 예를 들어 name1에 포트 10, 20, 80을 할당할 수 있습니다. 또한 name2에 포트 8080을 할당합니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 10
      },
      {
       "name": "name1",
       "port": 20
      }
      {
       "name": "name1",
       "port": 80
      }
      {
       "name": "name2",
       "port": 8080
      }
      {
       "name": "name3",
       "port": 80
      }
      {
       "name": "name4",
       "port": 8080
      }
   ]
}

관리형 인스턴스 그룹에 이미 할당된 이름이 지정된 포트를 나열하려면 이 그룹을 가리키는 GET 요청을 작성합니다.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP

다음 단계