이 페이지에서는 여러 프로토콜의 트래픽 부하를 분산하도록 내부 패스 스루 네트워크 부하 분산기를 만드는 방법을 설명합니다.
TCP 및 UDP를 포함하여 여러 프로토콜에 부하 분산기를 구성하려면 L3_DEFAULT
로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 이 전달 규칙은 프로토콜이 UNSPECIFIED
로 설정된 백엔드 서비스를 가리킵니다.
이 예시에서는 내부 패스 스루 네트워크 부하 분산기 하나를 사용하여 us-west1
리전의 백엔드 VM에 트래픽을 분산합니다. 부하 분산기에는 TCP, UDP, ICMP, ICMPv6, SCTP, ESP, AH, GRE를 처리하도록 프로토콜 L3_DEFAULT
가 포함된 전달 규칙이 포함됩니다.
시작하기 전에
- Google Cloud CLI를 설치합니다. 이 도구에 대한 전체 개요는 gcloud CLI 개요를 참조하세요. API 및 gcloud CLI 참조에서 부하 분산과 관련된 명령어를 확인할 수 있습니다.
이전에 gcloud CLI를 실행한 적이 없으면 먼저
gcloud init
명령어를 실행하여 인증합니다. - bash에 대해 알아봅니다.
권한
이 가이드를 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- 부하 분산기 리소스를 만들려면 다음 안내를 따르세요.
Compute 부하 분산기 관리자(
roles/compute.loadBalancerAdmin
) - Compute Engine 인스턴스와 인스턴스 그룹을 만들려면 다음 안내를 따르세요.
Compute 인스턴스 관리자(
roles/compute.instanceAdmin.v1
) - 네트워킹 구성요소를 만들려면 다음 안내를 따르세요.
Compute 네트워크 관리자(
roles/compute.networkAdmin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
L3_DEFAULT 트래픽 부하 분산기 설정
이 섹션의 단계에서는 다음 구성을 설명합니다.
lb-network
라는 커스텀 모드 VPC 네트워크를 사용하는 예시입니다. IPv4 트래픽만 처리하려면 자동 모드 네트워크를 사용하면 됩니다. 하지만 IPv6 트래픽에는 커스텀 모드 서브넷이 필요합니다.- IPv4 트래픽에 필요한 단일 스택 서브넷입니다(
stack-type
이IPv4
로 설정됨). 커스텀 모드 VPC 네트워크에서 단일 스택 서브넷을 만들 때 서브넷에 IPv4 서브넷 범위를 선택합니다. IPv6 트래픽의 경우 이중 스택 서브넷(stack-type
이IPv4_IPv6
로 설정됨)도 필요합니다. 커스텀 모드 VPC 네트워크에서 이중 스택 서브넷을 만들 때 서브넷에 IPv6 액세스 유형을 선택합니다. 이 예시에서는 서브넷의ipv6-access-type
매개변수를INTERNAL
로 설정합니다. 즉, 이 서브넷의 새 VM에 내부 IPv4 주소와 내부 IPv6 주소를 모두 할당할 수 있습니다. - 백엔드 VM에 대한 수신 연결을 허용하는 방화벽 규칙
- 이 예시에서 사용되는 백엔드 인스턴스 그룹과 부하 분산기 구성요소는 다음 리전 및 서브넷에 있습니다.
- 리전:
us-west1
- 서브넷:
lb-subnet
, 기본 IPv4 주소 범위10.1.2.0/24
. 서브넷에 구성할 IPv4 주소 범위를 선택하더라도 IPv6 주소 범위가 자동으로 할당됩니다. Google은 고정된 크기(/64)의 IPv6 CIDR 블록을 제공합니다.
- 리전:
us-west1-a
영역의 관리형 인스턴스 그룹에 있는 백엔드 VM- 백엔드에 대한 연결을 테스트하는 클라이언트 VM
- 다음 구성요소가 포함된 내부 패스 스루 네트워크 부하 분산기
- 백엔드 서비스의 상태 점검
- 영역 인스턴스 그룹에 대한 연결 분산을 관리하도록 프로토콜이
UNSPECIFIED
로 설정된us-west1
리전의 백엔드 서비스 - 프로토콜이
L3_DEFAULT
로 설정되고 포트가ALL
으로 설정된 전달 규칙
네트워크, 리전, 서브넷 구성
내부 IPv6 범위로 서브넷을 구성하려면 Virtual Private Cloud(VPC) 네트워크 ULA 내부 IPv6 범위를 사용 설정합니다. 내부 IPv6 서브넷 범위는 이 범위에서 할당됩니다. 네트워크 및 서브넷 예시를 만들려면 다음 단계를 따르세요.
콘솔
IPv4 및 IPv6 트래픽을 모두 지원하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network
를 입력합니다.이 네트워크에서 서브넷에 내부 IPv6 주소 범위를 구성하려면 다음 단계를 수행합니다.
- VPC 네트워크 ULA 내부 IPv6 범위에서 사용 설정됨을 선택합니다.
- 내부 IPv6 범위 할당에 대해 자동 또는 수동을 선택합니다.
서브넷 생성 모드에 커스텀을 선택합니다.
새 서브넷 섹션에서 서브넷에 다음 구성 매개변수를 지정합니다.
- 이름에
lb-subnet
를 입력합니다. - 리전에서
us-west1
을 선택합니다. - 이중 스택 서브넷을 만들려면 IP 스택 유형에 IPv4 및 IPv6(이중 스택)을 선택합니다.
- IPv4 범위에
10.1.2.0/24
를 입력합니다. - IPv6 액세스 유형에서 내부를 선택합니다.
- 이름에
완료를 클릭합니다.
만들기를 클릭합니다.
IPv4 트래픽을 지원하려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network
를 입력합니다.서브넷 섹션에서 다음을 수행합니다.
- 서브넷 생성 모드를 커스텀으로 설정합니다.
- 새 서브넷 섹션에 다음 정보를 입력합니다.
- 이름:
lb-subnet
- 리전:
us-west1
- IP 스택 유형: IPv4(단일 스택)
- IP 주소 범위:
10.1.2.0/24
- 이름:
- 완료를 클릭합니다.
만들기를 클릭합니다.
gcloud
IPv4 및 IPv6 트래픽 모두의 경우 다음 명령어를 사용합니다.
새 커스텀 모드 VPC 네트워크를 만들려면
gcloud compute networks create
명령어를 실행합니다.이 네트워크의 서브넷에서 내부 IPv6 범위를 구성하려면
--enable-ula-internal-ipv6
플래그를 사용합니다. 이 옵션은 내부 IPv6 서브넷 범위에 대해 Google Cloud에서 사용되는fd20::/20
범위 내에서/48
ULA 프리픽스를 할당합니다.gcloud compute networks create lb-network \ --subnet-mode=custom \ --enable-ula-internal-ipv6
lb-network
내에서us-west1
리전의 백엔드에 대한 서브넷을 만듭니다.서브넷을 만들려면
gcloud compute networks subnets create
명령어를 실행합니다.gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
IPv4 트래픽 전용의 경우 다음 명령어를 사용합니다.
커스텀 VPC 네트워크를 만들려면
gcloud compute networks create
명령어를 사용합니다.gcloud compute networks create lb-network --subnet-mode=custom
lb-network
네트워크 내us-west1
리전에 백엔드의 서브넷을 만들려면gcloud compute networks subnets create
명령어를 사용합니다.gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
API
IPv4 및 IPv6 트래픽 모두의 경우 다음 명령어를 사용합니다.
새 커스텀 모드 VPC 네트워크를 만듭니다.
networks.insert
메서드에 대해POST
요청을 실행합니다.이 네트워크의 서브넷에서 내부 IPv6 범위를 구성하려면
enableUlaInternalIpv6
를true
로 설정합니다. 이 옵션은 내부 IPv6 서브넷 범위에 대해 Google에서 사용하는fd20::/20
범위 내에서/48
범위를 할당합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "lb-network", "mtu": MTU, "enableUlaInternalIpv6": true, }
다음을 바꿉니다.
PROJECT_ID
: VPC 네트워크가 만들어진 프로젝트의 IDMTU
: 네트워크의 최대 전송 단위입니다. MTU는1460
(기본값) 또는1500
이 될 수 있습니다. MTU를1500
으로 설정하기 전에 최대 전송 단위 개요를 검토합니다.
subnetworks.insert
메서드에 대해POST
요청을 실행합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.1.2.0/24", "network": "lb-network", "name": "lb-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
IPv4 트래픽 전용의 경우 다음 단계를 수행합니다.
networks.insert
메서드에 대해POST
요청을 실행합니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "name": "lb-network", "autoCreateSubnetworks": false }
subnetworks.insert
메서드에POST
요청을 두 번 수행합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
방화벽 규칙 구성
이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.
fw-allow-lb-access
: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로,10.1.2.0/24
범위의 소스에서 들어오는 트래픽을 허용합니다. 이 규칙에서는 서브넷에 위치하는 모든 클라이언트에서 들어오는 트래픽을 허용합니다.fw-allow-lb-access-ipv6
: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로, 서브넷에 구성된 IPv6 범위의 소스에서 오는 트래픽을 허용합니다. 이 규칙에서는 서브넷에 위치하는 모든 클라이언트에서 들어오는 IPv6 트래픽을 허용합니다.fw-allow-ssh
: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, TCP 포트 22에서 임의의 주소로부터 수신되는 SSH 연결을 허용합니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 범위만 지정할 수도 있습니다. 이 예시에서는allow-ssh
대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.fw-allow-health-check
: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(130.211.0.0/22
및35.191.0.0/16
)의 트래픽을 허용합니다. 이 예시에서는allow-health-check
대상 태그를 사용하여 적용해야 할 인스턴스를 식별합니다.fw-allow-health-check-ipv6
: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 점검 시스템(2600:2d00:1:b029::/64
)의 트래픽을 허용합니다. 이 예시에서는allow-health-check-ipv6
대상 태그를 사용하여 적용해야 할 인스턴스를 식별합니다.
이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
IPv4 TCP, UDP, ICMP 트래픽이 백엔드 인스턴스 그룹
ig-a
에 도달하도록 허용하려면 다음 안내를 따르세요.- 방화벽 규칙 만들기를 클릭합니다.
- 이름:
fw-allow-lb-access
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 네트워크의 모든 인스턴스
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
10.1.2.0/24
- 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
- TCP를 선택하고
ALL
를 입력합니다. - UDP를 선택합니다.
- 기타를 선택하고
ICMP
를 입력합니다.
- TCP를 선택하고
만들기를 클릭합니다.
들어오는 SSH 연결을 허용하려면 다음 안내를 따르세요.
- 방화벽 규칙 만들기를 클릭합니다.
- 이름:
fw-allow-ssh
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-ssh
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
0.0.0.0/0
- 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택한 후
tcp:22
를 입력합니다.
만들기를 클릭합니다.
IPv6 TCP, UDP, ICMP 트래픽이 백엔드 인스턴스 그룹
ig-a
에 도달하도록 허용하려면 다음 안내를 따르세요.- 방화벽 규칙 만들기를 클릭합니다.
- 이름:
fw-allow-lb-access-ipv6
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 네트워크의 모든 인스턴스
- 소스 필터: IPv6 범위
- 소스 IPv6 범위:
lb-subnet
에서 할당된 IPV6_ADDRESS - 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
- TCP를 선택하고
0-65535
를 입력합니다. - UDP를 선택합니다.
- 기타를 선택하고 ICMPv6 프로토콜에
58
을 입력합니다.
- TCP를 선택하고
만들기를 클릭합니다.
Google Cloud IPv6 상태 점검을 허용하려면 다음 안내를 따르세요.
- 방화벽 규칙 만들기를 클릭합니다.
- 이름:
fw-allow-health-check-ipv6
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-health-check-ipv6
- 소스 필터: IPv6 범위
- 소스 IPv6 범위:
2600:2d00:1:b029::/64
- 프로토콜 및 포트: 모두 허용
만들기를 클릭합니다.
Google Cloud IPv4 상태 점검을 허용하려면 다음 안내를 따르세요.
- 방화벽 규칙 만들기를 클릭합니다.
- 이름:
fw-allow-health-check
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-health-check
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
130.211.0.0/22
및35.191.0.0/16
- 프로토콜 및 포트: 모두 허용
만들기를 클릭합니다.
gcloud
IPv4 TCP 트래픽이 백엔드 인스턴스 그룹
ig-a
에 도달하도록 허용하려면 다음 규칙을 만듭니다.gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
네트워크 태그
allow-ssh
를 사용하여 VM에 대한 SSH 연결을 허용하는fw-allow-ssh
방화벽 규칙을 만듭니다.source-ranges
를 생략하면 Google Cloud는 모든 소스를 의미하는 것으로 규칙을 해석합니다.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
IPv6 트래픽이 백엔드 인스턴스 그룹
ig-a
에 도달하도록 허용하려면 다음 규칙을 만듭니다.gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=all
IPV6_ADDRESS
를lb-subnet
에서 할당된 IPv6 주소로 바꿉니다.fw-allow-health-check
방화벽 규칙을 만들어 Google Cloud 상태 점검을 허용합니다.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
fw-allow-health-check-ipv6
규칙을 만들어 Google Cloud IPv6 상태 점검을 허용합니다.gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp,icmp
API
fw-allow-lb-access
방화벽 규칙을 만들려면firewalls.insert
메서드에 대해POST
요청을 실행합니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24" ], "allPorts": true, "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
firewalls.insert
메서드에POST
요청을 전송하여fw-allow-lb-access-ipv6
방화벽 규칙을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allPorts": true, "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "58" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
IPV6_ADDRESS를
lb-subnet
에서 할당된 IPv6 주소로 바꿉니다.fw-allow-ssh
방화벽 규칙을 만들려면firewalls.insert
메서드에 대해POST
요청을 실행합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
fw-allow-health-check
방화벽 규칙을 만들려면firewalls.insert
메서드에 대해POST
요청을 실행합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
firewalls.insert
메서드에POST
요청을 전송하여fw-allow-health-check-ipv6
방화벽 규칙을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "2600:2d00:1:b029::/64" ], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
백엔드 VM 및 인스턴스 그룹 만들기
이 부하 분산 시나리오에서는 Compute Engine 영역 관리형 인스턴스 그룹을 만들고 Apache 웹 서버를 설치합니다.
IPv4 및 IPv6 트래픽을 모두 처리하려면 백엔드 VM을 이중 스택으로 구성합니다. VM의 stack-type
을 IPv4_IPv6
로 설정합니다. VM은 서브넷에서 ipv6-access-type
설정(이 예시에서는 INTERNAL
)도 상속합니다. IPv6 요구사항에 대한 자세한 내용은 내부 패스 스루 네트워크 부하 분산기 개요: 전달 규칙을 참조하세요.
기존 VM을 백엔드로 사용하려면 gcloud compute instances network-interfaces update 명령어를 사용하여 VM을 이중 스택으로 업데이트합니다.
내부 패스 스루 네트워크 부하 분산기에 백엔드 VM으로 참여하는 인스턴스에서 적절한 Linux 게스트 환경, Windows 게스트 환경 또는 기타 동일한 기능을 제공하는 프로세스가 실행되어야 합니다.
설명 편의를 위해 백엔드 VM에서 Debian GNU/Linux 10을 실행합니다.
인스턴스 그룹 만들기
콘솔
IPv4 및 IPv6 트래픽을 모두 지원하려면 다음 단계를 따르세요.
인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
- 인스턴스 템플릿 만들기를 클릭합니다.
- 이름에
vm-a1
를 입력합니다. - 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. - 고급 옵션 섹션을 펼칩니다.
관리 섹션을 펼친 후 시작 스크립트 필드에 다음 스크립트를 복사합니다. 또한 시작 스크립트가 포트
80
대신 포트8080
에서 리슨하도록 Apache 서버를 구성합니다.#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf systemctl restart apache2
네트워킹 섹션을 펼친 후 다음을 지정합니다.
- 네트워크 태그에
allow-ssh
및allow-health-check-ipv6
를 추가합니다. - 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
- 네트워크:
lb-network
- 서브네트워크:
lb-subnet
- IP 스택 유형: IPv4 및 IPv6(이중 스택)
- 네트워크:
- 네트워크 태그에
만들기를 클릭합니다.
IPv4 트래픽을 지원하려면 다음 단계를 수행합니다.
인스턴스 템플릿을 만듭니다. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
인스턴스 템플릿 만들기를 클릭합니다.
- 이름에
vm-a1
를 입력합니다. - 부팅 디스크가 Debian GNU/Linux 12(bookworm)와 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는
apt-get
처럼 Debian에서만 사용할 수 있는 명령어를 사용합니다. - 고급 옵션 섹션을 펼칩니다.
관리 섹션을 펼친 후 시작 스크립트 필드에 다음 스크립트를 복사합니다. 또한 시작 스크립트가 포트
80
대신 포트8080
에서 리슨하도록 Apache 서버를 구성합니다.#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf systemctl restart apache2
네트워킹 섹션을 펼친 후 다음을 지정합니다.
- 네트워크 태그에
allow-ssh
및allow-health-check
를 추가합니다. - 네트워크 인터페이스에서 기본 인터페이스를 클릭하고 다음 필드를 구성합니다.
- 네트워크:
lb-network
- 서브네트워크:
lb-subnet
- IP 스택 유형: IPv4(단일 스택)
- 네트워크:
- 네트워크 태그에
만들기를 클릭합니다.
- 이름에
관리형 인스턴스 그룹을 만듭니다. Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
- 인스턴스 그룹 만들기를 클릭합니다.
- 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
- 이름에
ig-a
를 입력합니다. - 위치에서 단일 영역을 선택합니다.
- 리전으로
us-west1
을 선택합니다. - 영역으로
us-west1-a
를 선택합니다. - 인스턴스 템플릿에서
vm-a1
을 선택합니다. 그룹에 만들 인스턴스의 수를 지정합니다.
이 예시에서는 자동 확장에서 다음 옵션을 지정합니다.
- 자동 확장 모드에서
Off:do not autoscale
을 선택합니다. - 최대 인스턴스 수에
2
를 입력합니다.
- 자동 확장 모드에서
만들기를 클릭합니다.
gcloud
이 가이드의 gcloud
안내에서는 Cloud Shell 또는 bash가 설치된 다른 환경을 사용한다고 가정합니다.
gcloud compute instance-templates create
명령어로 HTTP 서버가 포함된 VM 인스턴스 템플릿을 만듭니다.또한 시작 스크립트가 포트
80
대신 포트8080
에서 리슨하도록 Apache 서버를 구성합니다.IPv4 및 IPv6 트래픽을 모두 처리하려면 다음 명령어를 사용하세요.
gcloud compute instance-templates create vm-a1 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet \ --ipv6-network-tier=PREMIUM \ --stack-type=IPv4_IPv6 \ --tags=allow-ssh \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
또는 IPv4 트래픽만 처리하려면 다음 명령어를 사용합니다.
gcloud compute instance-templates create vm-a1 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet \ --tags=allow-ssh \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
gcloud compute instance-groups managed create
명령어로 영역에 관리형 인스턴스 그룹을 만듭니다.gcloud compute instance-groups managed create ig-a \ --zone us-west1-a \ --size 2 \ --template vm-a1
api
IPv4 및 IPv6 트래픽을 모두 처리하려면 다음 단계를 수행합니다.
instances.insert
메서드에POST
요청을 전송하여 VM을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "vm-a1", "tags": { "items": [ "allow-health-check-ipv6", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-a1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
IPv4 트래픽을 처리하려면 다음 단계를 수행합니다.
instances.insert
메서드에POST
요청을 전송하여 VM을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "vm-a1", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-a1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
instanceGroups.insert
메서드에POST
요청을 전송하여 인스턴스 그룹을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
instanceGroups.addInstances
메서드에POST
요청을 전송하여 인스턴스를 각 인스턴스 그룹에 추가합니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1" } ] }
클라이언트 VM 만들기
다음 예시에서는 백엔드(서버) VM과 동일한 리전에 클라이언트 VM을 만듭니다. 클라이언트는 부하 분산기 구성의 유효성을 검사하고 테스트 섹션의 설명대로 예상되는 동작을 보여줍니다.
IPv4 및 IPv6 트래픽의 경우 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
이름을
vm-client-ipv6
로 설정합니다.영역을
us-west1-a
로 설정합니다.고급 옵션 섹션을 펼친 후 다음과 같이 변경합니다.
- 네트워킹을 펼친 후 네트워크 태그에
allow-ssh
를 추가합니다. - 네트워크 인터페이스에서 수정을 클릭하고 다음과 같이 변경한 후 완료를 클릭합니다.
- 네트워크:
lb-network
- 서브넷:
lb-subnet
- IP 스택 유형: IPv4 및 IPv6(이중 스택)
- 기본 내부 IP: 임시(자동)
- 외부 IP: 임시
- 네트워크:
- 네트워킹을 펼친 후 네트워크 태그에
만들기를 클릭합니다.
gcloud
클라이언트 VM은 부하 분산기와 동일한 리전의 어떤 영역에든 위치할 수 있으며 그 리전의 어떤 서브넷이든 사용할 수 있습니다. 다음 예시에서 클라이언트는 us-west1-a
영역에 위치하며 백엔드 VM과 동일한 서브넷을 사용합니다.
gcloud compute instances create vm-client-ipv6 \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV4_IPV6 \ --tags=allow-ssh \ --subnet=lb-subnet
api
instances.insert
메서드에 대해 POST
요청을 실행합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client-ipv6", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
IPv4 트래픽의 경우 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
이름에
vm-client
를 입력합니다.영역에
us-west1-a
를 입력합니다.고급 옵션 섹션을 펼칩니다.
네트워킹을 펼치고 다음 필드를 구성합니다.
- 네트워크 태그에
allow-ssh
를 입력합니다. - 네트워크 인터페이스에 다음을 선택합니다.
- 네트워크:
lb-network
- 서브넷:
lb-subnet
- 네트워크:
- 네트워크 태그에
만들기를 클릭합니다.
gcloud
클라이언트 VM은 부하 분산기와 동일한 리전의 어떤 영역에든 위치할 수 있으며 그 리전의 어떤 서브넷이든 사용할 수 있습니다. 다음 예시에서 클라이언트는 us-west1-a
영역에 위치하며 백엔드 VM과 동일한 서브넷을 사용합니다.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
instances.insert
메서드에 대해 POST
요청을 실행합니다.
PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
부하 분산기 구성요소 구성
여러 프로토콜의 부하 분산기를 만듭니다.
gcloud
포트 80에 대한 HTTP 상태 점검을 만듭니다. 이 상태 점검은
ig-a
인스턴스 그룹의 백엔드 상태를 확인하는 데 사용됩니다.gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
UNSPECIFIED
로 설정된 프로토콜을 사용하여 백엔드 서비스를 만듭니다.gcloud compute backend-services create be-ilb-l3-default \ --load-balancing-scheme=internal \ --protocol=UNSPECIFIED \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
인스턴스 그룹을 백엔드 서비스에 추가합니다.
gcloud compute backend-services add-backend be-ilb-l3-default \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
IPv6 트래픽의 경우: 지원되는 모든 IPv6 프로토콜 트래픽을 처리하도록
L3_DEFAULT
로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 모든 포트를L3_DEFAULT
전달 규칙으로 구성해야 합니다.gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1 \ --ip-version=IPV6
IPv4 트래픽의 경우: 지원되는 모든 IPv4 프로토콜 트래픽을 처리하도록
L3_DEFAULT
로 설정된 프로토콜을 사용하여 전달 규칙을 만듭니다. 모든 포트를L3_DEFAULT
전달 규칙으로 구성해야 합니다.10.1.2.99
를 내부 IP 주소로 사용합니다.gcloud compute forwarding-rules create fr-ilb-l3-default \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1
API
regionHealthChecks.insert
메서드에POST
요청을 전송하여 상태 점검을 만듭니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
regionBackendServices.insert
메서드에POST
요청을 전송하여 리전 백엔드 서비스를 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb-l3-default", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "UNSPECIFIED", "connectionDraining": { "drainingTimeoutSec": 0 } }
IPv6 트래픽의 경우:
forwardingRules.insert
메서드에POST
요청을 전송하여 전달 규칙을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-ipv6", "IPProtocol": "L3_DEFAULT", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "ipVersion": "IPV6", "networkTier": "PREMIUM" }
IPv4 트래픽의 경우:
forwardingRules.insert
메서드에POST
요청을 전송하여 전달 규칙을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-l3-default", "IPAddress": "10.1.2.99", "IPProtocol": "L3_DEFAULT", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "networkTier": "PREMIUM" }
부하 분산기 테스트
다음 테스트에서는 부하 분산기 구성 유효성을 검사하고 예상되는 동작을 확인하는 방법을 보여줍니다.
클라이언트 VM의 연결 테스트
이 테스트에서는 별도의 클라이언트 VM에서 부하 분산기에 연결합니다. 즉, 부하 분산기의 백엔드 VM에서 연결하는 것이 아닙니다.
gcloud:IPv6
클라이언트 VM 인스턴스에 연결합니다.
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
IPv6 전달 규칙
fr-ilb-ipv6
를 설명합니다. 설명의IPV6_ADDRESS
를 확인합니다.gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
IPv6 연결이 설정된 클라이언트에서 다음 명령어를 실행합니다.
fr-ilb-ipv6
전달 규칙의IPV6_ADDRESS
를 임시 IPv6 주소로 바꿉니다.curl -m 10 -s http://IPV6_ADDRESS:80
예를 들어 할당된 IPv6 주소가
[fd20:1db0:b882:802:0:46:0:0/96]:80
이면 명령어는 다음과 같습니다.curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
gcloud:IPv4
클라이언트 VM 인스턴스에 연결합니다.
gcloud compute ssh vm-client --zone=us-west1-a
IPv4 전달 규칙
fr-ilb
를 설명합니다.gcloud compute forwarding-rules describe fr-ilb --region=us-west1
curl
을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다. 다른 백엔드 VM에서 응답을 볼 수 있도록 요청을 반복합니다. 응답을 생성하는 VM의 이름은 각 백엔드 VM에 있는/var/www/html/index.html
콘텐츠에 따라 HTML 응답에 텍스트로 표시됩니다. 예상 응답은Page served from: vm-a1
과 같습니다.curl http://10.1.2.99
전달 규칙은 포트
80
및53
을 제공하도록 구성됩니다. 해당 포트로 트래픽을 전송하려면 다음과 같이 IP 주소 다음에 콜론(:
)과 포트 번호를 추가합니다.curl http://10.1.2.99:80
부하 분산기의 IP 주소 핑
이 테스트는 예상되는 동작을 보여줍니다. 부하 분산기의 IP 주소를 핑할 수 있습니다.
gcloud:IPv6
클라이언트 VM 인스턴스에 연결합니다.
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
부하 분산기의 IPv6 주소에 핑을 시도합니다.
fr-ilb-ipv6
전달 규칙의IPV6_ADDRESS
를 임시 IPv6 주소로 바꿉니다.이 예시에서는 응답이 표시되고
ping
명령어가 작동합니다.ping6 IPV6_ADDRESS
예를 들어 할당된 IPv6 주소가
[2001:db8:1:1:1:1:1:1/96]
이면 명령어는 다음과 같습니다.ping6 2001:db8:1:1:1:1:1:1
출력은 다음과 비슷합니다.
@vm-client: ping
IPV6_ADDRESS
PINGIPV6_ADDRESS
(IPV6_ADDRESS
) 56(84) bytes of data. 64 bytes fromIPV6_ADDRESS
: icmp_seq=1 ttl=64 time=1.58 ms
gcloud:IPv4
클라이언트 VM 인스턴스에 연결합니다.
gcloud compute ssh vm-client --zone=us-west1-a
부하 분산기의 IPv4 주소에 핑을 시도합니다. 이 예시에서는 응답이 표시되고
ping
명령어가 작동합니다.ping 10.1.2.99
출력은 다음과 같습니다.
@vm-client: ping 10.1.2.99 PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data. 64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms 64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms 64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
추가 구성 옵션
이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.
예시에 고정 내부 IP 주소를 예약할 수 있습니다. 이 구성을 사용하면 여러 내부 전달 규칙에서 서로 다른 프로토콜과 포트로 동일한 IP 주소를 사용할 수 있습니다.
예시 부하 분산기의 백엔드는 계속 리전 us-west1
에 있어야 합니다.
다음 다이어그램에서는 이 예시의 아키텍처를 보여줍니다.
다음 전달 규칙 구성을 사용하는 것이 좋을 수도 있습니다.
포트가 여러 개 있는 전달 규칙:
- 포트가
80,8080
인 프로토콜TCP
- 포트가
ALL
인 프로토콜L3_DEFAULT
- 포트가
모든 포트를 포함하는 전달 규칙:
- 포트가
ALL
인 프로토콜TCP
- 포트가
ALL
인 프로토콜L3_DEFAULT
- 포트가
고정 내부 IPv4 주소 예약
10.1.2.99
의 고정 내부 IP 주소를 예약하고 --purpose
플래그를 SHARED_LOADBALANCER_VIP
로 설정합니다. 여러 전달 규칙에서 같은 내부 IP 주소를 사용할 수 있도록 --purpose
플래그가 필요합니다.
gcloud
gcloud compute addresses create
명령어를 사용합니다.
gcloud compute addresses create internal-lb-ipv4 \ --region us-west1 \ --subnet lb-subnet \ --purpose SHARED_LOADBALANCER_VIP \ --addresses 10.1.2.99
API
addresses.insert
메서드를 호출합니다.
PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses
요청 본문에는 addressType
(INTERNAL
이어야 함), 주소의 name
, IP 주소가 속한 subnetwork
가 있어야 합니다. address
를 10.1.2.99
로 지정해야 합니다.
{ "addressType": "INTERNAL", "name": "internal-lb-ipv4", "subnetwork": "regions/us-west1/subnetworks/lb-subnet", "purpose": "SHARED_LOADBALANCER_VIP", "address": "10.1.2.99" }
부하 분산기 구성요소 구성
다음 구성요소로 부하 분산기 3개를 구성합니다.
- 첫 번째 부하 분산기에는 프로토콜이
TCP
이고 포트가80
인 전달 규칙이 있습니다. 포트80
의 내부 IP 주소에 도착하는 TCP 트래픽은TCP
전달 규칙에서 처리됩니다. - 두 번째 부하 분산기에는 프로토콜이
UDP
이고 포트가53
인 전달 규칙이 있습니다. 포트53
에서 내부 IP 주소에 도착하는 UDP 트래픽은UDP
전달 규칙에서 처리됩니다. - 세 번째 부하 분산기에는 프로토콜이
L3_DEFAULT
이고 포트가ALL
인 전달 규칙이 있습니다.TCP
또는UDP
전달 규칙과 일치하지 않는 다른 모든 트래픽은L3_DEFAULT
전달 규칙에서 처리됩니다. - 부하 분산기 3개 모두 해당 전달 규칙에서 동일한 고정 내부 IP 주소(
internal-lb-ipv4
)를 공유합니다.
첫 번째 부하 분산기 만들기
포트 80
의 TCP 트래픽에 대한 첫 번째 부하 분산기를 만듭니다.
gcloud
TCP 트래픽에 대한 백엔드 서비스를 만듭니다.
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
인스턴스 그룹을 백엔드 서비스에 추가합니다.
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
백엔드 서비스에 대한 전달 규칙을 만듭니다. 내부 IP 주소에 고정 예약 내부 IP 주소(
internal-lb-ipv4
)를 사용합니다.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=TCP \ --ports=80 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
regionBackendServices.insert
메서드에POST
요청을 전송하여 리전 백엔드 서비스를 만듭니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "TCP", "connectionDraining": { "drainingTimeoutSec": 0 } }
Create the forwarding rule by making a
POST
request to theforwardingRules.insert
method:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "internal-lb-ipv4", "IPProtocol": "TCP", "ports": [ "80" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
두 번째 부하 분산기 만들기
포트 53
에서 UDP 트래픽에 대한 두 번째 부하 분산기를 만듭니다.
gcloud
UDP
로 설정된 프로토콜을 사용하여 백엔드 서비스를 만듭니다.gcloud compute backend-services create be-ilb-udp \ --load-balancing-scheme=internal \ --protocol=UDP \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
인스턴스 그룹을 백엔드 서비스에 추가합니다.
gcloud compute backend-services add-backend be-ilb-udp \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
백엔드 서비스에 대한 전달 규칙을 만듭니다. 내부 IP 주소에 고정 예약 내부 IP 주소(
internal-lb-ipv4
)를 사용합니다.gcloud compute forwarding-rules create fr-ilb-udp \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=UDP \ --ports=53 \ --backend-service=be-ilb-udp \ --backend-service-region=us-west1
API
regionBackendServices.insert
메서드에POST
요청을 전송하여 리전 백엔드 서비스를 만듭니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb-udp", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "UDP", "connectionDraining": { "drainingTimeoutSec": 0 } }
forwardingRules.insert
메서드에POST
요청을 전송하여 전달 규칙을 만듭니다.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-udp", "IPAddress": "internal-lb-ipv4", "IPProtocol": "UDP", "ports": [ "53" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp", "networkTier": "PREMIUM" }
세 번째 부하 분산기 만들기
고정 예약 내부 IP 주소를 사용하는 세 번째 부하 분산기의 전달 규칙을 만듭니다.
gcloud
프로토콜이 L3_DEFAULT
로 설정된 전달 규칙을 만들어 지원되는 다른 모든 IPv4 프로토콜 트래픽을 처리합니다. 고정 예약 내부 IP 주소(internal-lb-ipv4
)를 내부 IP 주소로 사용합니다.
gcloud compute forwarding-rules create fr-ilb-l3-default \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1
API
forwardingRules.insert
메서드에 POST
요청을 전송하여 전달 규칙을 만듭니다.
PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-l3-default", "IPAddress": "internal-lb-ipv4", "IPProtocol": "L3_DEFAULT", "ports": [ "ALL" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "networkTier": "PREMIUM" }
부하 분산기 테스트
부하 분산기를 테스트하려면 이전 섹션의 단계를 수행합니다.
다음 단계
- 중요한 개념은 내부 패스 스루 네트워크 부하 분산기 개요를 참조하세요.
- 장애 조치를 구성하는 방법은 내부 패스 스루 네트워크 부하 분산기의 장애 조치 구성을 참조하세요.
- 내부 패스 스루 네트워크 부하 분산기의 Logging 및 Monitoring을 구성하는 방법은 내부 패스 스루 네트워크 부하 분산기 로깅 및 모니터링을 참조하세요.
- 문제 해결 방법은 내부 패스 스루 네트워크 부하 분산기 문제 해결을 참조하세요.
- 부하 분산 설정 삭제