이 문서에는 내부 및 외부 프로토콜 전달 모두에서 프로토콜 전달을 구성하는 방법이 포함되어 있습니다. 프로토콜 전달을 구성하기 전에 프로토콜 전달 개요를 읽어보세요.
외부 프로토콜 전달 설정
이 섹션에서는 전달 규칙을 사용하여 TCP 트래픽을 단일 대상 인스턴스로 전달하여 외부 프로토콜 전달을 설정하는 방법을 보여줍니다. IPv4 및 IPv6 트래픽에 대한 별도의 지침이 있습니다.
외부 프로토콜 전달을 설정하려면 단일 VM 인스턴스가 포함된 대상 인스턴스를 만듭니다. 그런 다음 트래픽을 대상 인스턴스로 전달하는 외부 리전별 전달 규칙을 만듭니다.
IPv4
편의상 이 예시에서는 기본 네트워크와 서브넷을 사용합니다.
외부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \ --target-tags=allow-ipv4-ext \ --allow=tcp:80 \ --source-ranges=0.0.0.0/0
VM을 만듭니다. 이 예시에서는 VM에 Apache 서버를 설정합니다.
gcloud compute instances create VM_INSTANCE_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ipv4-ext \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sudo systemctl restart apache2'
이전 단계에서 만든 VM을 포함하는 대상 인스턴스를 만듭니다. 전달 규칙은 기존 대상 인스턴스를 참조해야 하므로 전달 규칙 객체를 만들려면 먼저 대상 인스턴스를 만들어야 합니다.
gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --zone=ZONE
고정 외부 IPv4 주소를 예약합니다.
gcloud compute addresses create IPV4_ADDRESS \ --region=REGION
TCP 트래픽을 대상 인스턴스로 전달하는 전달 규칙을 만듭니다. 전달 규칙은 대상 인스턴스가 생성된 리전과 동일한 리전에서 만들어야 합니다.
gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL \ --region=REGION \ --ip-protocol=TCP \ --address=IPV4_ADDRESS \ --ports=80 \ --target-instance=TARGET_INSTANCE_NAME \ --target-instance-zone=ZONE
설정 테스트하기
전달 규칙 IP 주소를 가져옵니다.
gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION
curl을 사용하여 부하 분산기에 웹 요청을 만들어 IP 주소에 연결합니다.
IP_ADDRESS
를 이전 단계의 IP 주소로 바꿉니다.$ while true; do curl -m1 IP_ADDRESS; done
출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.
Page served from: VM_INSTANCE_NAME.
IPv6
IPv6 트래픽을 처리하려면 대상 인스턴스 백엔드에 대한 이중 스택 VM 인스턴스가 있는 이중 스택 서브넷이 필요합니다.
커스텀 모드 VPC 네트워크를 만듭니다.
gcloud compute networks create VPC_NAME \ --subnet-mode=custom
VPC 네트워크 내에서 이중 스택 서브넷을 만듭니다.
gcloud compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --range=192.168.11.0/24 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --region=REGION
192.168.11.0/24
범위는 IPv4 범위 예시일 뿐입니다. 새 서브넷의 기본 IPv4 범위를 CIDR 표기법으로 입력할 수 있습니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.외부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-ext \ --allow=tcp:80 \ --source-ranges=::/0
이중 스택 VM을 만듭니다.
gcloud compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ipv6-ext \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo 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 sudo systemctl restart apache2'
이전 단계에서 만든 VM을 포함하는 대상 인스턴스를 만듭니다.
gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
고정 외부 IPv6 주소를 예약합니다.
gcloud compute addresses create IPV6_ADDRESS \ --region=REGION \ --subnet=SUBNET_NAME \ --ip-version=IPV6 \ --endpoint-type=NETLB
TCP 트래픽을 대상 인스턴스로 전달하는 IPv6 전달 규칙을 만듭니다. 전달 규칙은 대상 인스턴스가 생성된 리전과 동일한 리전에서 만들어야 합니다.
gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL \ --subnet=SUBNET_NAME \ --ip-version=IPV6 \ --region=REGION \ --address=IPV6_ADDRESS \ --network-tier=PREMIUM \ --target-instance=TARGET_INSTANCE_NAME \ --target-instance-zone=ZONE \ --ip-protocol=TCP \ --ports=80
설정 테스트하기
전달 규칙의 IP 주소를 가져옵니다.
gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION
curl을 사용하여 부하 분산기에 웹 요청을 만들어 IP 주소에 연결합니다.
IPV6_ADDRESS
를 이전 단계의 IP 주소로 바꿉니다.curl -6 'http://[IPV6_ADDRESS]:80'
출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.
Page served from: VM_INSTANCE_NAME.
내부 프로토콜 전달 설정
이 섹션에서는 전달 규칙을 사용하여 TCP 트래픽을 단일 대상 인스턴스로 전달하여 내부 프로토콜 전달을 설정하는 방법을 보여줍니다. IPv4 및 IPv6 트래픽에 대한 별도의 지침이 있습니다.
이 예시에서는 Apache 서버가 설치된 단일 VM 인스턴스를 포함하는 대상 인스턴스를 만듭니다. 그런 다음 트래픽을 대상 인스턴스로 전달하는 내부 리전별 전달 규칙을 만듭니다.
IPv4
편의상 이 예시에서는 기본 네트워크와 서브넷을 사용합니다.
내부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \ --target-tags=allow-ipv4-int \ --allow=tcp \ --source-ranges=0.0.0.0/0
allow-ssh
네트워크 태그를 사용하여 VM에 대한 SSH 연결을 허용하는 방화벽 규칙을 만듭니다. 이는 클라이언트 VM에 대한 SSH 연결을 설정하는 데 사용됩니다.gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \ --target-tags=allow-ssh \ --allow=tcp:22 \ --source-ranges=0.0.0.0/0
VM을 만듭니다.
gcloud compute instances create VM_INSTANCE_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ipv4-int \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sudo systemctl restart apache2'
이전 단계에서 만든 VM을 포함하는 대상 인스턴스를 만듭니다. 전달 규칙은 기존 대상 인스턴스를 참조해야 하므로 전달 규칙 객체를 만들려면 먼저 대상 인스턴스를 만들어야 합니다.
gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --zone=ZONE
TCP 트래픽을 대상 인스턴스로 전달하는 전달 규칙을 만듭니다. 전달 규칙은 대상 인스턴스가 생성된 리전과 동일한 리전에서 만들어야 합니다.
gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL \ --network-tier=PREMIUM \ --region=REGION \ --ip-protocol=TCP \ --ports=80 \ --target-instance=TARGET_INSTANCE_NAME \ --target-instance-zone=ZONE
테스트 클라이언트 VM을 만듭니다.
gcloud compute instances create CLIENT_VM_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh
이제 트래픽을 이 클라이언트 VM에서 전달 규칙 IP 주소로 전송하여 프로토콜 전달 구성을 테스트할 수 있습니다.
설정 테스트하기
전달 규칙 IP 주소를 가져옵니다.
gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \ --region=REGION
클라이언트 VM에 대한 SSH 연결을 설정합니다.
gcloud compute ssh CLIENT_VM_NAME \ --zone=ZONE
curl을 사용하여 부하 분산기에 요청을 만들어 IP 주소에 연결합니다.
$ while true; do curl -m1 IP_ADDRESS; done
출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.
Page served from: VM_INSTANCE_NAME.
IPv6
IPv6 트래픽을 처리하려면 대상 인스턴스 백엔드에 대한 이중 스택 VM 인스턴스가 있는 이중 스택 서브넷이 필요합니다.
--enable-ula-internal-ipv6
플래그를 사용해 커스텀 모드 VPC 네트워크를 만들어 이 네트워크의 서브넷에 내부 IPv6 범위를 구성합니다.gcloud compute networks create VPC_NAME \ --subnet-mode=custom \ --enable-ula-internal-ipv6
VPC 네트워크 내에서 이중 스택 서브넷을 만듭니다.
gcloud compute networks subnets create SUBNET_NAME \ --network=VPC_NAME \ --range=192.168.11.0/24 \ --region=REGION \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
192.168.11.0/24
범위는 IPv4 범위 예시일 뿐입니다. 새 서브넷의 기본 IPv4 범위를 CIDR 표기법으로 입력할 수 있습니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.내부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ipv6-int \ --allow=tcp \ --source-ranges=::/0
네트워크 태그
allow-ssh
를 사용하여 VM에 대한 SSH 연결을 허용하는 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \ --network=VPC_NAME \ --target-tags=allow-ssh \ --allow=tcp:22 \ --source-ranges=0.0.0.0/0
이 방화벽 규칙은 SSH를 사용해 연결하여 전달 규칙의 IP 주소로 HTTP 트래픽을 전송하는 클라이언트 VM(다음 단계 중 하나에서 생성됨)에 적용됩니다.
이중 스택 VM을 만듭니다.
gcloud compute instances create VM_INSTANCE_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ipv6-int \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo 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 sudo systemctl restart apache2'
이전 단계에서 만든 VM을 포함하는 대상 인스턴스를 만듭니다.
gcloud compute target-instances create TARGET_INSTANCE_NAME \ --instance=VM_INSTANCE_NAME \ --network=VPC_NAME \ --zone=ZONE
TCP 트래픽을 대상 인스턴스로 전달하는 IPv6 전달 규칙을 만듭니다. 전달 규칙은 대상 인스턴스가 생성된 리전과 동일한 리전에서 만들어야 합니다.
gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL \ --network-tier=PREMIUM \ --network=VPC_NAME \ --subnet=SUBNET_NAME \ --region=REGION \ --ip-protocol=TCP \ --ports=80 \ --target-instance=TARGET_INSTANCE_NAME \ --target-instance-zone=ZONE \ --ip-version=IPV6
클라이언트 VM 만들기
gcloud compute instances create CLIENT_VM_NAME \ --subnet=SUBNET_NAME \ --stack-type=IPV4_IPV6 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh
설정 테스트하기
전달 규칙의 IP 주소를 가져옵니다.
gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \ --region=REGION
클라이언트 VM에 대한 SSH 연결을 설정합니다.
gcloud compute ssh CLIENT_VM_NAME \ --zone=ZONE
curl을 사용하여 HTTP 요청을 전달 규칙 IP 주소에 보냅니다.
curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
출력은 다음과 비슷합니다. 여기서 응답을 생성하는 백엔드 VM의 이름이 이 텍스트에 표시됩니다.
Page served from: VM_INSTANCE_NAME.