프로토콜 전달 설정

이 문서에는 내부 및 외부 프로토콜 전달 모두에서 프로토콜 전달을 구성하는 방법이 포함되어 있습니다. 프로토콜 전달을 구성하기 전에 프로토콜 전달 개요를 읽어보세요.

외부 프로토콜 전달 설정

이 섹션에서는 전달 규칙을 사용하여 TCP 트래픽을 단일 대상 인스턴스로 전달하는 외부 프로토콜 전달을 설정하는 방법을 보여줍니다. IPv4 및 IPv6 트래픽에는 별도의 안내가 있습니다.

외부 프로토콜 전달을 설정하려면 단일 VM 인스턴스가 포함된 대상 인스턴스를 만듭니다. 그런 다음 트래픽을 대상 인스턴스로 전달하는 외부 리전별 전달 규칙을 만듭니다.

IPv4

편의상 이 예시에서는 기본 네트워크와 서브넷을 사용합니다.

  1. 외부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.

    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
    
  2. VM을 만듭니다. 이 예시에서는 VM에 Apache 서버를 설정합니다.

    gcloud compute instances create VM_INSTANCE_NAME \
     --zone=ZONE \
     --image-family=debian-10 \
     --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'
    
  3. 이전 단계에서 만든 VM이 포함된 대상 인스턴스를 만듭니다. 전달 규칙은 기존 대상 인스턴스를 참조해야 하므로 전달 규칙 객체를 만들려면 먼저 대상 인스턴스를 만들어야 합니다.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
       --instance=VM_INSTANCE_NAME \
       --zone=ZONE
    
  4. 고정 외부 IPv4 주소를 예약합니다.

    gcloud compute addresses create IPV4_ADDRESS \
      --region=REGION
    
  5. 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
    
  6. 설정 테스트하기

    1. 전달 규칙의 IP 주소를 가져옵니다.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
        --region=REGION
      
    2. curl을 사용하여 부하 분산기에 웹 요청을 만들어 IP 주소에 연결합니다. IP_ADDRESS를 이전 단계의 IP 주소로 바꿉니다.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

IPv6 트래픽을 처리하려면 대상 인스턴스 백엔드에 대해 이중 스택 VM 인스턴스가 있는 이중 스택 서브넷이 필요합니다.

  1. 커스텀 모드 VPC 네트워크를 만듭니다.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom
    
  2. 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 범위일 뿐입니다. CIDR 표기법으로 새 서브넷의 모든 기본 IPv4 범위를 입력할 수 있습니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.

  3. 외부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-ext \
      --allow=tcp:80 \
      --source-ranges=::/0
    
  4. 이중 스택 VM을 만듭니다.

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --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'
    
  5. 이전 단계에서 만든 VM이 포함된 대상 인스턴스를 만듭니다.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  6. 고정 외부 IPv6 주소를 예약합니다.

    gcloud compute addresses create IPV6_ADDRESS \
      --region=REGION \
      --subnet=SUBNET_NAME \
      --ip-version=IPV6 \
      --endpoint-type=NETLB
    
  7. 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
    
  8. 설정 테스트하기

    1. 전달 규칙의 IP 주소를 가져옵니다.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. curl을 사용하여 부하 분산기에 웹 요청을 만들어 IP 주소에 연결합니다. IPV6_ADDRESS를 이전 단계의 IP 주소로 바꿉니다.

      curl -6 'http://[IPV6_ADDRESS]:80'
      

      출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.

      Page served from: VM_INSTANCE_NAME.
      

내부 프로토콜 전달 설정

이 섹션에서는 전달 규칙을 사용하여 TCP 트래픽을 단일 대상 인스턴스로 전달하는 방법으로 내부 프로토콜 전달을 설정하는 방법을 보여줍니다. IPv4 및 IPv6 트래픽에는 별도의 안내가 있습니다.

이 예시에서는 Apache 서버가 설치된 단일 VM 인스턴스가 포함된 대상 인스턴스를 만듭니다. 그런 다음 트래픽을 대상 인스턴스로 전달하는 내부 리전별 전달 규칙을 만듭니다.

IPv4

편의상 이 예시에서는 기본 네트워크와 서브넷을 사용합니다.

  1. 내부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
      --target-tags=allow-ipv4-int \
      --allow=tcp \
      --source-ranges=0.0.0.0/0
    
  2. 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
    
  3. VM을 만듭니다.

    gcloud compute instances create VM_INSTANCE_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --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'
    
  4. 이전 단계에서 만든 VM이 포함된 대상 인스턴스를 만듭니다. 전달 규칙은 기존 대상 인스턴스를 참조해야 하므로 전달 규칙 객체를 만들려면 먼저 대상 인스턴스를 만들어야 합니다.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --zone=ZONE
    
  5. 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
    
  6. 테스트 클라이언트 VM을 만듭니다.

    gcloud compute instances create CLIENT_VM_NAME \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    

    이제 이 클라이언트 VM에서 전달 규칙 IP 주소로 트래픽을 전송하여 프로토콜 전달 구성을 테스트할 수 있습니다.

  7. 설정 테스트하기

    1. 전달 규칙의 IP 주소를 가져옵니다.

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. 클라이언트 VM에 SSH 연결을 설정합니다.

      gcloud compute ssh CLIENT_VM_NAME \
      --zone=ZONE
      
    3. curl을 사용하여 부하 분산기에 요청을 만들어 IP 주소에 연결합니다.

      $ while true; do curl -m1 IP_ADDRESS; done
      

      출력은 다음과 비슷합니다. 여기에 응답을 생성하는 백엔드 VM의 이름이 표시됩니다.

      Page served from: VM_INSTANCE_NAME.
      

IPv6

IPv6 트래픽을 처리하려면 대상 인스턴스 백엔드에 대해 이중 스택 VM 인스턴스가 있는 이중 스택 서브넷이 필요합니다.

  1. --enable-ula-internal-ipv6 플래그를 사용해 커스텀 모드 VPC 네트워크를 만들어 이 네트워크의 서브넷에 내부 IPv6 범위를 구성합니다.

    gcloud compute networks create VPC_NAME \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    
  2. 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 범위일 뿐입니다. CIDR 표기법으로 새 서브넷의 모든 기본 IPv4 범위를 입력할 수 있습니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.

  3. 내부 트래픽이 대상 인스턴스에 도달하도록 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
      --network=VPC_NAME \
      --target-tags=allow-ipv6-int \
      --allow=tcp \
      --source-ranges=::/0
    
  4. 네트워크 태그 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(다음 단계 중 하나에서 생성됨)에 적용됩니다.

  5. 이중 스택 VM을 만듭니다.

    gcloud compute instances create VM_INSTANCE_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --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'
    
  6. 이전 단계에서 만든 VM이 포함된 대상 인스턴스를 만듭니다.

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
      --instance=VM_INSTANCE_NAME \
      --network=VPC_NAME \
      --zone=ZONE
    
  7. 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
    
  8. 클라이언트 VM 만들기

    gcloud compute instances create CLIENT_VM_NAME \
      --subnet=SUBNET_NAME \
      --stack-type=IPV4_IPV6 \
      --zone=ZONE \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=allow-ssh
    
  9. 설정 테스트하기

    1. 전달 규칙의 IP 주소를 가져옵니다.

      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
       --region=REGION
      
    2. 클라이언트 VM에 SSH 연결을 설정합니다.

      gcloud compute ssh CLIENT_VM_NAME \
       --zone=ZONE
      
    3. curl을 사용하여 전달 규칙의 IP 주소에 HTTP 요청을 보냅니다.

      curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
      

      출력은 다음과 비슷합니다. 여기서 응답을 생성하는 백엔드 VM의 이름이 이 텍스트에 표시됩니다.

      Page served from: VM_INSTANCE_NAME.
      

다음 단계