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 バックエンド サービスを設定する
このセクションでは、次の構成を行います。
- 2 つのバックエンド グループ(インスタンス グループ、マネージド インスタンス グループ、ネットワーク エンドポイント グループのいずれか)を、同じリージョン内の 2 つの異なるゾーンに 1 つずつ配置します。
- 各バックエンド グループに 2 つの 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: 新しいサブネットのプライマリ IPv4 範囲(CIDR 表記)。詳細については、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 がユーザー トラフィックを受信しているかどうか、必要に応じてトラフィックを迅速にリダイレクトするかどうかを判断するため、通常はより積極的に構成されます。
自動修復のヘルスチェックでは、障害が発生している VM が Compute Engine によってプロアクティブに置き換えられるので、このヘルスチェックはロード バランシングのヘルスチェックより慎重に実施しなければなりません。デュアルスタック 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
各インスタンス グループに 2 つのデュアルスタック VM インスタンスを作成します。
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 ヘルスチェッカーの送信元 IP アドレスとして使用され、ネットワーク ロード バランシングのバックエンド VM のヘルスをプローブします。
Backends を使用してバックエンド サービスを作成して更新する
バックエンド サービスを作成します。
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 などの Service Gateway の構成に使用される場合もあります。
PREFER_IPV6
を含むバックエンド サービスが構成されたので、AppNet ゲートウェイ リソースを作成できます。
ゲートウェイ リソースを作成する
dual-stack-gateway.yaml
という名前のファイルで、HTTP トラフィックの Gateway 仕様を作成します。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
仕様から Gateway リソースを作成します。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 インスタンス グループ
us-ig-1
とus-ig-2
と、既存の VM を含むIPV4_ONLY
スタック 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
更新した Instance-Groups を新しく作成した IPv4 バックエンド サービスに追加します。
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 バックエンド サービスの両方がトラフィックを処理できるようになりました。URL マップを更新して、クライアント トラフィックの一部を新しい IPv4 バックエンド サービスに転送します。