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에서 전송한 순서대로 각 엔드포인트의 첫 번째 주소만 사용합니다.
시작하기 전에
이 가이드에서는 다음 작업을 이미 완료했다고 가정합니다.
- Envoy 및 프록시리스 워크로드로 서비스 라우팅 API 설정
- 온보딩 가이드의 설정 프로세스 계속하기 섹션에 나온 단계 완료
IPv6 백엔드 서비스 설정
이 섹션에서는 다음을 구성합니다.
- 두 개의 백엔드 그룹(인스턴스 그룹, 관리형 인스턴스 그룹 또는 네트워크 엔드포인트 그룹 중 하나)으로, 동일한 리전 내의 두 개의 서로 다른 영역에 각각 하나씩 있습니다.
- 각 백엔드 그룹에 VM 인스턴스 2개
- 인스턴스 상태 검증을 위한 상태 점검
- 상태 점검이 백엔드에 도달하도록 허용하는 방화벽 규칙
- 백엔드 서비스.
- 구성된 두 개의 백엔드 그룹을 포함하는 백엔드 서비스입니다.
백엔드용 서브넷 설정
다음 명령어는 IPv4 및 IPv6 모두에 내부 주소 범위를 할당하고 서브넷의 VM에 두 주소 유형 중 하나를 할당할 수 있도록 허용합니다.
커스텀 모드 서브넷만 지원됩니다. 자동 모드 지원은 없습니다. 전체 VPC 네트워크를 커스텀 모드로 전환한 다음 IPv6 백엔드(MIG 또는 NEG)를 채울 수 있습니다.
이중 스택 네트워크를 만듭니다.
gcloud compute networks create NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
백엔드 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
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
게이트웨이 프록시 관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \ --zone=ZONE \ --size=1 \ --template=dual-stack-gateway-template
백엔드 관리형 인스턴스 그룹을 만듭니다.
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
관리형 인스턴스 그룹에 이름이 지정된 포트를 추가합니다.
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 상태 점검을 기반으로 합니다.
상태 확인을 만듭니다.
gcloud compute health-checks create http dualstack-health-check-http \
방화벽 규칙이 상태 점검을 허용하는지 확인합니다.
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
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
으로 변경될 때 시작됩니다.
비관리형 인스턴스 그룹
인스턴스 그룹 구성:
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
각 인스턴스 그룹에 이중 스택 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 주소는 자동으로 할당됩니다.
인스턴스 그룹에 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
--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
네트워크 엔드포인트 그룹에 엔드포인트를 추가합니다.
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'
상태 점검 구성
백엔드 서비스의 상태 점검을 만듭니다.
gcloud compute health-checks create http[s] my-health-check
--global
--request-path '/'
--port SERVICE_PORTSERVICE_PORT를 1~65535 사이의 포트 번호로 바꿉니다.
상태 점검을 허용하는 방화벽 규칙을 만듭니다.
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 주소로 사용됩니다.
백엔드로 백엔드 서비스 만들기 및 업데이트
백엔드 서비스를 만듭니다.
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
백엔드 서비스에 백엔드를 추가합니다.
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 게이트웨이 리소스를 만들 수 있습니다.
게이트웨이 리소스 만들기
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
dual-stack-gateway.yaml
사양에서 게이트웨이 리소스를 만듭니다.gcloud network-services gateways import dual-stack-gateway \ --source=dual-stack-gateway.yaml \ --location=global
HTTPRoute로 라우팅 설정
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
dual-stack-http-route.yaml
의 사양을 사용하여 HTTPRoute 리소스를 만듭니다.gcloud network-services http-routes import dual-stack-http-route \ --source=dual-stack-http-route.yaml \ --location=global
엔드 투 엔드 연결을 확인하려면 게이트웨이 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-1
및us-ig-2
us-ig-1
및us-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 추가
새 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
새 인스턴스를 인스턴스 그룹에 추가합니다.
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
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
새로 만든 이중 스택 백엔드 서비스에 업데이트된 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-1
및us-ig-2
us-ig-1
및us-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 추가
새 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
새 인스턴스를 인스턴스 그룹에 추가합니다.
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
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
새로 만든 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 맵을 업데이트합니다.