Cloud Service Mesh용 IPv6 이중 스택 구성

이 페이지에서는 Traffic Director(TD) 프록시 기반 부하 분산기를 사용하여 Cloud Service Mesh에서 IPv6 트래픽의 부하를 분산하는 방법과 IPv4 기반 배포에서 이중 스택(IPv4 및 IPv6) 배포로 마이그레이션하는 방법, 이중 스택에서 IPv4로 마이그레이션하는 방법을 보여줍니다.

이중 스택 배포에서는 서비스 백엔드로 IPv4 또는 IPv6가 전송되는지 여부를 지정할 수 있습니다. 프록시 또는 gRPC 클라이언트는 선호도 순으로 각 데이터 경로를 테스트하고 선호사항 및 지원되는 항목과 일치하는 데이터 경로를 선택합니다.

이중 스택 기능은 C++ 및 Python의 경우 gRPC 1.66.1 이상, Node의 경우 1.12 이상, Go의 경우 1.71 이상에서 지원됩니다. Java는 현재 지원되지 않습니다.

이중 스택 지원이 없는 gRPC 버전(즉, Go 및 다른 언어의 1.66 이전 버전)은 TD에서 전송한 순서대로 각 엔드포인트의 첫 번째 주소만 사용합니다.

시작하기 전에

이 가이드에서는 다음 작업을 이미 완료했다고 가정합니다.

IPv6 백엔드 서비스 설정

이 섹션에서는 다음을 구성합니다.

  • 두 개의 백엔드 그룹(인스턴스 그룹, 관리형 인스턴스 그룹 또는 네트워크 엔드포인트 그룹 중 하나)으로, 동일한 리전 내의 두 개의 서로 다른 영역에 각각 하나씩 있습니다.
  • 각 백엔드 그룹에 VM 인스턴스 2개
  • 인스턴스 상태 검증을 위한 상태 점검
  • 상태 점검이 백엔드에 도달하도록 허용하는 방화벽 규칙
  • 백엔드 서비스.
  • 구성된 두 개의 백엔드 그룹을 포함하는 백엔드 서비스입니다.

백엔드용 서브넷 설정

다음 명령어는 IPv4 및 IPv6 모두에 내부 주소 범위를 할당하고 서브넷의 VM에 두 주소 유형 중 하나를 할당할 수 있도록 허용합니다.

커스텀 모드 서브넷만 지원됩니다. 자동 모드 지원은 없습니다. 전체 VPC 네트워크를 커스텀 모드로 전환한 다음 IPv6 백엔드(MIG 또는 NEG)를 채울 수 있습니다.

  1. 이중 스택 네트워크를 만듭니다.

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. 백엔드 VM의 이중 스택 서브넷을 만듭니다.

    gcloud compute networks subnets create SUBNET \
        --network=NETWORK \
        --range=PRIMARY_IPv4_RANGE \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=IPv6_ACCESS_TYPE \
        --region=REGION
    

    다음을 바꿉니다.

    • SUBNET: 새 서브넷의 이름입니다.
    • NETWORK: 새 서브넷을 포함할 VPC 네트워크의 이름입니다.
    • PRIMARY_IPv4_RANGE: CIDR 표기법으로 표시된 새 서브넷의 기본 IPv4 주소 범위입니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.
    • IPv6_ACCESS_TYPE: IPv6 액세스 유형입니다. EXTERNAL 또는 INTERNAL일 수 있습니다.
    • REGION: 새 서브넷이 생성되는 Google Cloud 리전입니다.

백엔드 설정

관리형 인스턴스 그룹(MIG), 비관리형 인스턴스 그룹 또는 네트워크 엔드포인트 그룹(NEG) 중에서 선택할 수 있습니다.

MIG

  1. dual-stack-gateway-template을 사용하여 관리형 인스턴스 그룹을 만듭니다.

    gcloud alpha compute instance-templates create dual-stack-gateway-template \
    --region=REGION \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=dual-stack-http-server \
    --network=NETWORK \
    --subnet=SUBNET \
    --stack-type=IPV4_IPV6 \
    --service-proxy=enabled,scope=gateway-proxy
    
  2. 게이트웨이 프록시 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. 백엔드 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-templates create dual-stack-backend-template \
      --region=REGION \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=dual-stack-http-server \
      --network=NETWORK \
      --subnet=SUBNET \
      --stack-type=IPV4_IPV6 \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype <html><body><h1>'\`dual-stack-server\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
    gcloud compute instance-groups managed create dual-stack-ZONE-backend-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-backend-template
    
  4. 관리형 인스턴스 그룹에 이름이 지정된 포트를 추가합니다.

    gcloud compute instance-groups set-named-ports us-ig-1 \
      --named-ports http:80 \
      --zone ZONE \
    
    gcloud compute instance-groups set-named-ports us-ig-2 \
      --named-ports http:80 \
      --zone ZONE
    

    부하 분산과 자동 복구에 별도의 상태 점검을 사용합니다. 부하 분산 상태 점검은 VM이 사용자 트래픽을 수신하는지 여부와 필요한 경우 트래픽을 빠르게 리디렉션할지 여부를 결정하므로 일반적으로 더 공격적으로 구성됩니다.

    자동 복구용 상태 점검을 사용하면 Compute Engine이 장애가 발생한 VM을 사전에 교체하므로 이 상태 점검은 부하 분산 상태 점검보다 보수적이어야 합니다. 이중 스택 VM의 자동 복구는 IPv4 상태 점검을 기반으로 합니다.

  5. 상태 확인을 만듭니다.

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. 방화벽 규칙이 상태 점검을 허용하는지 확인합니다.

    IPv4

    gcloud compute firewall-rules create dual-stack-allow-ipv4-health-check \
    --network=NETWORK \
    --action=ALLOW \
    --direction=INGRESS \
    --source-ranges=35.191.0.0/16,130.211.0.0/22 \
    --target-tags=dual-stack-http-server \
    --rules=tcp:22,80
    

    IPv6

    gcloud compute firewall-rules create dual-stack-allow-ipv6-health-check \
    --network=NETWORK \
    --action=ALLOW \
    --direction=INGRESS \
    --source-ranges=::/0 \
    --target-tags=dual-stack-http-server \
    --rules=tcp:22,80
    
  7. MIG의 자동 복구 정책을 구성하여 상태 점검을 적용합니다.

    gcloud compute instance-groups managed update us-mig-1 \
      --health-check dualstack-health-check-http \
      --initial-delay 300 \
      --zone us-central1-a
    

초기 지연 설정은 VM 시작 중에 VM을 조기에 다시 만들지 않도록 자동 복구를 지연시킵니다. 초기 지연 타이머는 VM의 currentAction 입력란이 VERIFYING으로 변경될 때 시작됩니다.

비관리형 인스턴스 그룹

  1. 인스턴스 그룹 구성:

    gcloud compute instance-groups unmanaged create us-ig-1 \
    --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged create us-ig-2 \
    --zone us-central1-b
    
  2. 각 인스턴스 그룹에 이중 스택 VM 인스턴스 2개를 만듭니다.

    gcloud compute instances create inst-us-central1-1 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-a \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-2 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-a \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-3 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-b \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create inst-us-central1-4 \
    --image-family debian-12 \
    --image-project debian-cloud \
    --tags network-lb \
    --zone us-central1-b \
    --network-interface [--network=NETWORK | --subnet=SUBNET] \
    --stack-type=IPV4_IPV6
    

    IPv6 주소는 자동으로 할당됩니다.

  3. 인스턴스 그룹에 VM을 추가합니다.

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
    --instances inst-us-central1-1,inst-us-central1-2 \
    --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
    --instances inst-us-central1-3,inst-us-central1-4 \
    --zone us-central1-b
    

NEG

  1. --network-endpoint-type이 GCE_VM_IP_PORT인 백엔드를 추가합니다.

    gcloud compute network-endpoint-groups create us-neg-lb-1 \
      --network=NETWORK SUBNET \
      --zone=us-central1-a --network-endpoint-type=GCE_VM_IP_PORT \
    
    gcloud compute network-endpoint-groups create us-neg-lb-2 \
      --network=NETWORK SUBNET \
      --zone=us-central1-b  --network-endpoint-type=GCE_VM_IP_PORT
    
  2. 네트워크 엔드포인트 그룹에 엔드포인트를 추가합니다.

    gcloud compute network-endpoint-groups update us-neg-lb-1 \--zone=us-central1-a \
    --add-endpoint 'instance=inst-us-central1-1,ip=IPV4_ADRS_1, ipv6=IPV6_ADRS_1,port=80' \
    --add-endpoint 'instance=inst-us-central1-2,ip=IPV4_ADRS_2, ipv6=IPV6_ADRS_2,port=80' \
    
    gcloud compute network-endpoint-groups update us-neg-lb-2 --zone=us-central1-b \
    --add-endpoint 'instance=inst-us-central1-3,ip=IPV4_ADRS_3, ipv6=IPV6_ADRS_3,port=80' \
    --add-endpoint 'instance=inst-us-central1-4,ip=IPV4_ADRS_4,ipv6=IPV6_ADRS_4,port=80'
    

상태 점검 구성

  1. 백엔드 서비스의 상태 점검을 만듭니다.

      gcloud compute health-checks create http[s] my-health-check 
    --global
    --request-path '/'
    --port SERVICE_PORT

    SERVICE_PORT를 1~65535 사이의 포트 번호로 바꿉니다.

  2. 상태 점검을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-scan-probe \
        --action allow \
        --description "allow-scan-probe" \
        --rules tcp:SERVICE_PORT \
        --source-ranges 2600:2d00:1:b029::/64 \
        --priority 10 \
        --network=NETWORK
    

2600:2d00:1:b029::/64 범위는 상태 점검기가 VM의 상태를 프로브하는 소스 IP 주소에 사용됩니다. 2600:2d00:1:b029::/64는 IPv6 상태 점검기가 네트워크 부하 분산의 백엔드 VM 상태를 프로브할 때 소스 IP 주소로 사용됩니다.

백엔드로 백엔드 서비스 만들기 및 업데이트

  1. 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create my-backend-service \
    --ip-address-selection-policy PREFER_IPV6  \
    --global \
    --health-checks my-health-check \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED \
    --timeout=5m
    
  2. 백엔드 서비스에 백엔드를 추가합니다.

    gcloud compute backend-services add-backend my-backend-service \
    --instance-group us-ig-1 \
    --instance-group-zone us-central1-a \
    --global \
    
    gcloud compute backend-services add-backend my-backend-service \
    --instance-group us-ig-2 \
    --instance-group-zone us-central1-b \
    --global
    

Cloud Service Mesh 서비스 설정

이 섹션에서는 Traffic Director에서 IPv6 서비스를 구성하는 방법을 보여줍니다. 이 서비스는 Service Mesh 구성의 일부일 수도 있고 Envoy를 실행하는 VM과 같은 서비스 게이트웨이를 구성하는 데 사용될 수도 있습니다.

이제 PREFER_IPV6을 사용하는 백엔드 서비스가 구성되었으므로 appnet 게이트웨이 리소스를 만들 수 있습니다.

게이트웨이 리소스 만들기

  1. dual-stack-gateway.yaml이라는 파일에 HTTP 트래픽의 게이트웨이 사양을 만듭니다.

    cat <<EOF | tee dual-stack-gateway.yaml
    name: dual-stack-gateway
    scope: gateway-proxy
    ipVersion: IPV6
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. dual-stack-gateway.yaml 사양에서 게이트웨이 리소스를 만듭니다.

    gcloud network-services gateways import dual-stack-gateway \
      --source=dual-stack-gateway.yaml \
      --location=global
    

HTTPRoute로 라우팅 설정

  1. dual-stack-http_route.yaml이라는 파일에서 HTTPRoute 사양을 만듭니다.

    cat <<EOF | tee dual-stack-http-route.yaml
    name: dual-stack-http-route
    hostnames:
    - dual-stack-server
    gateways:
    - projects/PROJECT_ID/locations/global/gateways/dual-stack-gateway
    rules:
    - action:
        destinations:
        - serviceName: "projects/PROJECT_ID/locations/global/backendServices/dual-stack-backend-service"
    EOF
    
  2. dual-stack-http-route.yaml의 사양을 사용하여 HTTPRoute 리소스를 만듭니다.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. 엔드 투 엔드 연결을 확인하려면 게이트웨이 MIG에서 VM에 SSH로 연결하고 다음 명령어를 실행합니다.

    curl -H 'Host: dual-stack-server' http://[::]
    

    출력은 다음과 비슷합니다.

    <!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
    

IPv4에서 이중 스택으로 마이그레이션

IPv4에서 이중 스택으로 마이그레이션하려면 다음 기본 요건을 충족해야 합니다.

  • 기존 VM이 포함된 IPV4_ONLY 스택이 있는 기존 단일 스택 VM 인스턴스 그룹 us-ig-1us-ig-2
  • us-ig-1us-ig-2를 가리키는 단일 IPv4 백엔드 서비스 my-ipv4-backend-service
  • IPV4_ONLY VM 서브넷
  • IPv4 버전 주소로 구성된 게이트웨이 리소스

서브넷을 이중 스택으로 업그레이드

IPv6를 지원하도록 백엔드의 기존 서브넷을 업데이트합니다.

gcloud compute networks subnets update SUBNET \
  --stack-type IPV4_IPV6 \
  --ipv6-access-type=IPv6_ACCESS_TYPE \

다음을 바꿉니다.

  • SUBNET: 새 서브넷의 이름입니다.
  • IPv6_ACCESS_TYPE: IPv6 액세스 유형입니다. EXTERNAL 또는 INTERNAL일 수 있습니다.

각 VM을 이중 스택으로 업그레이드

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_IPV6 \
  --zone=us-central1

EXISTING_VM_NAME을 기존 VM 이름으로 바꿉니다.

각 인스턴스 그룹에 새 이중 스택 VM 추가

  1. 새 VM 인스턴스를 만듭니다.

    gcloud compute instances create my-new-vm-1 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-a \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_IPV6 \
    
    gcloud compute instances create my-new-vm-2 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-b \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_IPV6
    
  2. 새 인스턴스를 인스턴스 그룹에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
      --instances my-new-vm-1 \
      --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
      --instances my-new-vm-2 \
      --zone us-central1-b
    
  3. IPv6 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create dual-stack-backend-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --protocol=HTTP \
      --health-checks=dual-stack-health-check-http \
      --ip-address-selection-policy=PREFER_IPV6
    
  4. 새로 만든 이중 스택 백엔드 서비스에 업데이트된 Instance-Group을 추가합니다.

    gcloud compute backend-services add-backend dual-stack-backend-service \
      --instance-group=us-ig-1 \
      --instance-group-zone=ZONE \
      --global
    
    gcloud compute backend-services add-backend dual-stack-backend-service \
      --instance-group=us-ig-2 \
      --instance-group-zone=ZONE \
      --global
    

이중 스택에서 IPv4로 마이그레이션

이중 스택에서 IPv4로 마이그레이션하려면 다음 기본 요건을 충족해야 합니다.

  • 기존 VM이 포함된 IPV4_IPV6 스택이 있는 기존 이중 스택 VM 인스턴스 그룹 us-ig-1us-ig-2
  • us-ig-1us-ig-2를 가리키는 단일 IPv6 백엔드 서비스 my-ipv6-backend-service
  • IPV4_IPV6 VM 서브넷
  • 게이트웨이 리소스

각 VM을 IPv4로 다운그레이드

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_ONLY \
  --zone=us-central1

각 인스턴스 그룹에 새 IPv4 스택 VM 추가

  1. 새 VM 인스턴스를 만듭니다.

    gcloud compute instances create my-new-vm-1 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-a \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_ONLY \
    
    gcloud compute instances create my-new-vm-2 \
      --image-family debian-12 \
      --tags network-lb \
      --zone us-central1-b \
      --network-interface [--network=NETWORK | --subnet=SUBNET] \
      --stack-type=IPV4_ONLY
    
  2. 새 인스턴스를 인스턴스 그룹에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances us-ig-1 \
      --instances my-new-vm-1 \
      --zone us-central1-a \
    
    gcloud compute instance-groups unmanaged add-instances us-ig-2 \
      --instances my-new-vm-2 \
      --zone us-central1-b
    
  3. IPv4 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create my-ipv4-backend-service \
      –ip-address-selection-policy IPV4_ONLY \
      --global \
      --health-checks my-health-check \
      --load-balancing-scheme INTERNAL_SELF_MANAGED \
      --timeout=5m
    
  4. 새로 만든 IPv4 백엔드 서비스에 업데이트된 Instance-Groups를 추가합니다.

    gcloud compute backend-services add-backend my-ipv4-backend-service \
      --instance-group us-ig1 \
      --instance-group-zone us-central1-a \
      --global \
    
    gcloud compute backend-services add-backend my-ipv4-backend-service \
      --instance-group us-ig2 \
      --instance-group-zone us-central1-b \
      --global
    

    이제 IPv4 및 IPv6 백엔드 서비스 모두 트래픽을 제공할 수 있습니다. 클라이언트 트래픽의 일부가 새로운 IPv4 백엔드 서비스로 전달되도록 URL 맵을 업데이트합니다.