내부 HTTP(S) 부하 분산 설정 준비

내부 HTTP(S) 부하 분산 설정에는 다음 두 단계가 있습니다.

  • 필요한 계정에 올바른 권한이 있는지 확인하고, VPC 네트워크를 준비하는 등의 필수 작업을 수행합니다.
  • 부하 분산기 리소스 설정

이 가이드에서는 기본 요건을 설정하는 방법을 설명합니다. 추가 가이드에서는 부하 분산 리소스를 설정하는 방법을 설명합니다.

이 가이드를 진행하기 전에 다음 사항을 숙지하세요.

권한

이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.

태스크 필요한 역할
네트워크, 서브넷, 부하 분산기 구성요소 만들기 네트워크 관리자
방화벽 규칙 추가 및 삭제 보안 관리자
인스턴스 생성 인스턴스 관리자

설정 개요

다음과 같은 상위 수준 구성 흐름에서 설명하는 대로 내부 HTTP(S) 부하 분산을 구성할 수 있습니다. 번호가 매겨진 단계는 다이어그램의 번호를 나타냅니다.

내부 HTTP(S) 부하 분산 번호가 매겨진 구성요소(확대하려면 클릭)
내부 HTTP(S) 부하 분산 번호가 매겨진 구성요소(확대하려면 클릭)

다이어그램에서 볼 수 있듯이 이 예시에서는 하나의 백엔드 서비스와 두 개의 백엔드 그룹이 있는 us-west1 리전의 VPC 네트워크에 내부 HTTP(S) 부하 분산기를 만듭니다.

다이어그램에는 다음 항목이 표시됩니다.

  1. 두 개의 서브넷이 있는 VPC 네트워크:

    1. 서브넷 하나는 백엔드(인스턴스 그룹 및 NEG) 및 전달 규칙에 사용됩니다. 기본 IP 주소 범위는 10.1.2.0/24입니다.

    2. 다른 서브넷은 us-west1 리전의 프록시 전용 서브넷입니다. 내부 HTTP 부하 분산기를 사용하는 VPC 네트워크의 각 리전에 하나의 프록시 전용 서브넷을 만들어야 합니다. 해당 리전의 프록시 전용 서브넷은 해당 리전의 모든 내부 HTTP 부하 분산기 간에 공유됩니다. 내부 HTTP 부하 분산기에서 서비스의 백엔드로 보낸 패킷의 소스 주소는 프록시 전용 서브넷에서 할당됩니다. 이 예시에서 리전의 프록시 전용 서브넷의 기본 IP 주소 범위는 10.129.0.0/26입니다. 자세한 내용은 내부 HTTP(S) 부하 분산기용 프록시 전용 서브넷을 참조하세요.

  2. 네트워크에서 원하는 트래픽 흐름을 허용하는 방화벽 규칙. 여기에는 10.129.0.0/26의 TCP 포트 80, 443 및 8000 트래픽(이 예시에서는 프록시 전용 서브넷의 범위)과 상태 확인 프로브에 대한 다른 규칙을 추가하는 규칙이 포함됩니다.

  3. 백엔드 인스턴스. 이 예시에서는 다음 백엔드 배포를 보여줍니다.

    1. Google Compute Engine VM
    2. 네트워크 엔드포인트 그룹(NEG)에 추가된 Google Kubernetes Engine(GKE) 백엔드
  4. 인스턴스 그룹 및 NEG:

    1. Compute Engine VM 배포를 위한 관리형 또는 비관리형 인스턴스 그룹
    2. GKE 배포를 위한 NEG

    각 영역에서 배포 요구 사항에 따라 여러 백엔드 그룹 유형을 조합할 수 있습니다.

  5. 백엔드 준비 상태를 보고하는 리전 상태 확인입니다.

  6. 백엔드의 사용 및 상태를 모니터링하는 리전 백엔드 서비스입니다.

  7. 리전별 URL 맵은 요청의 URL을 파싱하고 요청 URL의 호스트와 경로에 따라 특정 백엔드 서비스로 요청을 전달합니다.

  8. 사용자로부터 요청을 수신하여 URL 맵에 전달하는 리전 대상 HTTP 또는 HTTPS 프록시입니다. HTTPS의 경우, 리전 SSL 인증서 리소스를 구성합니다. 대상 프록시는 HTTPS 부하 분산을 구성하는 경우 SSL 인증서를 사용하여 SSL 트래픽을 복호화합니다. 대상 프록시는 HTTP나 HTTPS를 통해 트래픽을 인스턴스에 전달할 수 있습니다.

  9. 부하 분산기의 내부 IP 주소를 가진 전달 규칙으로 각 수신 요청을 대상 프록시로 전달합니다.

네트워크 및 서브넷 구성하기

두 개의 서브넷이 있는 VPC 네트워크가 필요합니다. 한 개는 부하 분산기의 백엔드의 서브넷이며, 다른 한 개는 부하 분산기의 프록시를 위한 서브넷입니다. 내부 HTTP(S) 부하 분산기는 리전에 따라 다릅니다. 트래픽 소스가 부하 분산기와 동일한 리전의 서브넷에 있는 경우 VPC 네트워크 내의 트래픽이 부하 분산기로 라우팅됩니다.

이 예시에서는 다음 VPC 네트워크, 리전 및 서브넷을 사용합니다.

  • 네트워크: 네트워크는 이름이 lb-network커스텀 모드 VPC 네트워크입니다.

  • 백엔드용 서브넷: us-west1 리전의 이름이 backend-subnet인 서브넷은 기본 IP 범위로 10.1.2.0/24를 사용합니다.

  • 프록시용 서브넷: us-west1 리전의 이름이 proxy-subnet인 서브넷은 기본 IP 범위로 10.129.0.0/26을 사용합니다.

백엔드 네트워크 및 서브넷 구성

Console

  1. Google Cloud Platform 콘솔의 VPC 네트워크 페이지로 이동합니다.
    VPC 네트워크 페이지로 이동
  2. VPC 네트워크 만들기를 클릭합니다.
  3. 이름lb-network로 입력합니다.
  4. 서브넷 섹션에서 다음을 수행합니다.
    • 서브넷 만들기 모드커스텀으로 설정합니다.
    • 새 서브넷 섹션에 다음 정보를 입력합니다.
      • 이름: backend-subnet
      • 리전: us-west1
      • IP 주소 범위: 10.1.2.0/24
      • 완료를 클릭합니다.
  5. 만들기를 클릭합니다.

gcloud

  1. gcloud compute networks create 명령어를 사용하여 커스텀 VPC 네트워크를 만듭니다.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. gcloud compute networks subnets create 명령어를 사용하여 us-west1 리전의 lb-network 네트워크에 서브넷을 만듭니다.

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

api

networks.insert 메서드에 대해 POST 요청을 실행하여 [project-id]를 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/networks
{
  "routingConfig": {
    "routingMode": "REGIONAL"
  },
  "name": "lb-network",
  "autoCreateSubnetworks": false
}

subnetworks.insert 메서드에 대해 POST 요청을 실행하여 [project-id]를 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/subnetworks
{
  "name": "backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "ipCidrRange": "10.1.2.0/24",
  "region": "projects/[project-id]/regions/us-west1",
}

프록시 전용 서브넷 구성

프록시 전용 서브넷은 us-west1 리전의 모든 내부 HTTP 부하 분산기를 위한 것입니다.

Console

GCP Console을 사용하는 경우 나중에 부하 분산 UI에서 프록시 전용 서브넷을 만들고 대기할 수 있습니다. 설정 프로세스 계속하기를 참조하세요.

gcloud

gcloud compute networks subnets create 명령어를 사용하여 프록시 전용 서브넷을 만듭니다.

gcloud beta compute networks subnets create proxy-subnet \
  --purpose=INTERNAL_HTTPS_LOAD_BALANCER \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/26

api

subnetworks.insert 메서드로 프록시 전용 서브넷을 만들고 [project-id]를 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/compute/projects/[project-id]/regions/us-west1/subnetworks
{
  "name": "proxy-subnet",
  "ipCidrRange": "10.129.0.0/26",
  "network": "projects/[project-id]/global/networks/lb-network",
  "region": "projects/[project-id]/regions/us-west1",
  "purpose": "INTERNAL_HTTPS_LOAD_BALANCER",
  "role": "ACTIVE"
}

방화벽 규칙 구성

이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.

  • fw-allow-backend-subnet: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로, 10.1.2.0/24 범위의 소스에서 오는 트래픽을 허용합니다. 이 규칙은 backend-subnet 내의 소스에서 부하 분산되는 인스턴스(VM)로의 수신 트래픽을 허용합니다. 이 예시에서는 네트워크의 모든 인스턴스에 적용되는 방화벽 규칙을 보여줍니다. 또는 부하 분산기의 실제 백엔드에만 규칙을 적용할 수 있습니다.

  • fw-allow-ssh: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙입니다. TCP 포트 22에서 임의의 주소로부터 SSH 연결 수신을 허용합니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 범위만 지정할 수도 있습니다. 이 예시에서는 allow-ssh 대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.

  • fw-allow-health-check: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, GCP 상태 확인 시스템의 모든 TCP 트래픽을 허용합니다(130.211.0.0/2235.191.0.0/16). 이 예시에서는 대상 태그 load-balanced-backend를 사용하여 적용할 인스턴스를 식별합니다.

  • fw-allow-proxies: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙입니다. 내부 HTTP(S) 부하 분산기의 관리형 프록시로부터의 포트 80, 443, 8000 TCP 트래픽을 허용합니다. 이 예시에서는 대상 태그 load-balanced-backend를 사용하여 적용할 인스턴스를 식별합니다.

이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.

Console

  1. Google Cloud Platform Console의 방화벽 규칙 페이지로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭하고 다음 정보를 입력하여 서브넷 트래픽을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-backend-subnet
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 네트워크의 모든 인스턴스
    • 소스 필터: IP ranges
    • 소스 IP 범위: 10.1.2.0/24
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택하고 tcp, udpicmp를 확인합니다.
  3. 만들기를 클릭합니다.
  4. 방화벽 규칙 만들기를 다시 클릭하여 수신 SSH 연결을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-ssh
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-ssh
    • 소스 필터: IP ranges
    • 소스 IP 범위: 0.0.0.0/0
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택하고 tcp를 확인한 다음 포트 번호로 22를 입력합니다.
  5. 만들기를 클릭합니다.
  6. 방화벽 규칙 만들기를 세 번째 클릭하여 GCP 상태 확인을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-health-check
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: load-balanced-backend
    • 소스 필터: IP ranges
    • 소스 IP 범위: 130.211.0.0/2235.191.0.0/16
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택하고 tcp를 확인합니다(원하는 경우 포트 집합 선택).
  7. 만들기를 클릭합니다.
  8. 방화벽 규칙 만들기를 네 번째 클릭하여 부하 분산기의 프록시 서버가 백엔드에 연결하도록 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-proxies
    • 네트워크: lb-network
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: load-balanced-backend
    • 소스 필터: IP ranges
    • 소스 IP 범위: 10.129.0.0/26
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택하고 tcp를 확인한 다음 포트 번호로 80, 443, 8000을 입력합니다.
  9. 만들기를 클릭합니다.

gcloud

  1. fw-allow-backend-subnet 방화벽 규칙을 만들어 gcloud compute firewall-rules create 명령어로 서브넷에서의 통신을 허용합니다.

    gcloud compute firewall-rules create fw-allow-backend-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. fw-allow-ssh 방화벽 규칙을 만들어 allow-ssh 네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용합니다. source-ranges를 생략하면 GCP에서는 모든 소스를 의미하는 것으로 규칙을 해석합니다.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. fw-allow-health-check 규칙을 만들어 GCP 상태 확인을 허용합니다. 이 예시에서는 상태 확인 프로브의 모든 TCP 트래픽을 허용합니다. 그러나 필요에 따라 더 좁은 포트 집합을 구성할 수 있습니다.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  4. 내부 HTTP(S) 부하 분산기의 프록시를 백엔드에 연결할 fw-allow-proxies 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=10.129.0.0/26 \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8000
    

api

firewalls.insert 메서드에 대해 POST 요청을 실행하고 [project-id]를 프로젝트 ID로 대체하여 fw-allow-backend-subnet 방화벽 규칙을 만듭니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "10.1.2.0/24"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    },
    {
      "IPProtocol": "udp"
    },
    {
      "IPProtocol": "icmp"
    }
  ],
  "direction": "INGRESS"
}

firewalls.insert 메서드에 대해 POST 요청을 실행하고 [project-id]를 프로젝트 ID로 대체하여 fw-allow-ssh 방화벽 규칙을 만듭니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-ssh",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "0.0.0.0/0"
  ],
  "targetTags": [
    "allow-ssh"
  ],
  "allowed": [
   {
     "IPProtocol": "tcp",
     "ports": [
       "22"
     ]
   }
  ],
 "direction": "INGRESS"
}

firewalls.insert 메서드에 대해 POST 요청을 실행하고 [project-id]를 프로젝트 ID로 대체하여 fw-allow-health-check 방화벽 규칙을 만듭니다.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-health-check",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "direction": "INGRESS"
}

fw-allow-proxies 방화벽 규칙을 만들어 프록시 서브넷 안에 TCP 트래픽과, 프로젝트 ID를 [project-id]로 대체하는 firewalls.insert 메서드를 허용합니다.

POST https://www.googleapis.com/compute/v1/projects/{project}/global/firewalls
{
  "name": "fw-allow-proxies",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "10.129.0.0/26"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "443"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "8000"
      ]
    }
  ],
  "direction": "INGRESS"
}

설정 과정 계속하기

내부 HTTP(S) 부하 분산을 설정하려면 백엔드 서비스가 Compute Engine VM에서 실행되는지, 또는 GKE 포드에서 실행되는지에 따라 다음 절차 중 하나를 사용합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...