このページでは、組織のデータ ネットワーク セグメントに追加のサブネットを作成して、外部ネットワーク要件をサポートする方法について説明します。サブネットを追加して、下り(外向き)ネットワーク アドレス変換(NAT)や外部ロードバランサなどの外部サービスが、組織外の外部ネットワークに接続するためのネットワーキング要件をサポートするのに十分な数の IP アドレスを確保する必要があります。
このページでは、順に完了することを想定していないタスクをいくつか説明します。
- 外部サービスのゾーン ブランチ サブネットを作成する: このタスクは、ゾーンの既存の外部 IP アドレスをサービスにさらに整理または割り当てる場合に便利です。
- 個々のサービスのリーフ サブネットを作成する: このタスクは、使用する IP アドレスがまだない新しいサービスがある場合に便利です。
- グローバル IP アドレス範囲からゾーン サブネットを割り当てる: このタスクは、ゾーンに十分な外部 IP アドレス空間がなくなった場合に便利です。
- ゾーン割り当てなしでルート グローバル サブネットを分割する: このタスクは、外部 IP アドレスをゾーンに割り当てる前に、グローバル API サーバーで外部 IP アドレスをさらに整理する場合に便利です。
- 新しいネットワーク ルート範囲のグローバル サブネットを追加する: このタスクは、ゾーンに割り当てるグローバル外部 IP アドレス空間がデータ ネットワーク セグメントに不足している場合に便利です。
このページのタスクを完了する前に、サブネットとそのコンセプトの概要については、サブネットと IP アドレスをご覧ください。
このページは、組織のネットワーク トラフィックの管理を担当するプラットフォーム管理者グループのネットワーク管理者と、アプリケーション オペレーター グループのアプリケーション デベロッパーを対象としています。詳細については、GDC エアギャップの対象読者に関するドキュメントをご覧ください。
始める前に
サブネットの作成に必要な権限を取得するには、サブネット組織管理者(subnet-org-admin
)の IAM ロールを付与するよう組織 IAM 管理者に依頼してください。このロールは Namespace にバインドされていません。
外部サービス用のゾーン ブランチ サブネットを作成する
ゾーンの既存のゾーンルート サブネットからゾーン外部サブネットを作成して、ゾーン データ ネットワーク セグメントの IP アドレスをさらに細分化できます。このサブネット タイプは platform
名前空間に作成する必要があります。親のゾーンルート サブネットで使用可能な IP アドレスが不足している場合は、まずグローバル IP アドレス範囲から別のゾーン サブネットを割り当ててから、この手順に戻ります。
ターミナル ウィンドウで、ゾーン管理 API サーバーに新しい外部サブネットを作成します。
kubectl -kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH networkSpec: enableGateway: true enableVLANID: false parentReference: name: PARENT_SUBNET_NAME namespace: platform type: Branch EOF
次のように置き換えます。
MANAGEMENT_API_SERVER_KUBECONFIG
: 管理 API サーバーの kubeconfig ファイルのパス。詳細については、ゾーン管理 API サーバー リソースをご覧ください。SUBNET_NAME
: 新しいネットワーク サブネットの名前。CIDR_PREFIX_LENGTH
: 動的に割り当てられる新しいサブネットの CIDR プレフィックスの長さ(20
など)。CIDR を静的に設定するには、prefixLength
フィールドをcidr
フィールドに置き換えてから、CIDR ブロック(10.0.10.0/27
など)を設定します。PARENT_SUBNET_NAME
: 親サブネットの名前(data-external-zone0-cidr
など)。親サブネットは通常、データ ネットワーク セグメント内のゾーンルート サブネットです。
詳細については、
Subnet
リソースの API リファレンス ドキュメントをご覧ください。ゾーン サブネットをさらに分割するか、リーフ サブネットを作成して、外部サービスに個々の IP アドレスを直接割り振ることができます。
個々のサービスのリーフ サブネットを作成する
サービスに単一の IP アドレスを割り当てるには、リーフ サブネットを作成する必要があります。このリーフ サブネットには type: Leaf
というフィールド値があり、外部ロードバランサや下り(外向き)NAT などの外部サービスと同じプロジェクト Namespace に存在する必要があります。
リーフ サブネットは、単一の IP アドレスを割り当てることを目的としているため、prefixLength
値を 32
に構成する必要があります。parentReference
値は、以前に割り当てられたサブネット(ワークロード用のゾーン ブランチ サブネットを作成するで作成した親ゾーン サブネットなど)を参照します。
ターミナル ウィンドウで、管理 API サーバーにリーフ サブネットを作成します。
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/allocation-preference: default ipam.gdc.goog/network-segment: data name: SUBNET_NAME namespace: PROJECT_NAMESPACE spec: ipv4Request: prefixLength: 32 parentReference: name: PARENT_SUBNET namespace: platform type: Leaf EOF
次のように置き換えます。
MANAGEMENT_API_SERVER_KUBECONFIG
: 管理 API サーバーの kubeconfig ファイルのパス。詳細については、ゾーン管理 API サーバー リソースをご覧ください。SUBNET_NAME
: リーフ サブネットの名前。PROJECT_NAMESPACE
: サービスが配置されているプロジェクトに対応するプロジェクト Namespace。PARENT_SUBNET
: このリーフ サブネットが IP アドレスの取得元となる親サブネットの名前。
これで、外部サービスで個々の IP アドレスを使用できるようになりました。サービスの IP アドレスを構成する方法については、外部ロードバランサを構成するなど、対応するサービスのドキュメントをご覧ください。
グローバル IP アドレス範囲からゾーン サブネットを割り当てる
既存のゾーンルート サブネットの IP アドレス範囲から、外部サービスに十分な IP アドレスが提供されない場合は、グローバル IP アドレスのルート範囲から追加の IP アドレスを割り当てることができます。
platform
Namespace のデータ ネットワーク セグメントに対して、次の操作を行います。
ターミナル ウィンドウで、データ ネットワーク セグメントのすべてのルート サブネットを記述し、使用可能な CIDR を確認します。
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
GLOBAL_API_SERVER_KUBECONFIG
は、グローバル API サーバーの kubeconfig ファイルのパスに置き換えます。詳細については、グローバル API サーバー リソースをご覧ください。ラベルは定数であり、同じままにする必要があります。出力は次のようになります。
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data Annotations: <none> API Version: ipam.global.gdc.goog/v1 Kind: Subnet Metadata: Creation Timestamp: 2025-06-18T23:05:38Z Finalizers: global-subnet-finalizer Generation: 1 Resource Version: 439434 UID: 5ed1c51a-b5ee-473e-a185-8e065a87ae8f Spec: ipv4Request: Cidr: 10.252.0.0/14 Propagation Strategy: None Type: Root Status: Children Refs: Name: data-external-zone1-root-cidr Namespace: platform Type: SingleSubnet Conditions: Last Transition Time: 2025-06-18T23:05:38Z Message: IP allocation finished successfully Observed Generation: 1 Reason: AllocationSucceeded Status: True Type: Ready ipv4Allocation: Available CIDRs: 10.254.0.0/15 10.253.0.0/16 Cidr: 10.252.0.0/14 Events: <none>
Status.ipv4Allocation.Available CIDRs
の値を使用可能な CIDR としてメモします。これは次のステップで参照されます。上記の出力では、CIDR 範囲10.254.0.0/15
と10.253.0.0/16
を使用できます。出力には、ルート サブネットの数に応じて複数のサブネットが存在する可能性があります。使用可能なすべての CIDR をメモし、使用可能な CIDR がどのサブネットから取得されたかをメモします。前のステップでメモした使用可能な最大の CIDR と、ゾーンに割り当てる必要がある CIDR のサイズを比較します。使用可能な最大の CIDR が新しいサブネットの割り当てに十分な大きさでない場合は、続行する前に新しいネットワーク ルート範囲のグローバル サブネットを追加します。新しいサブネットの CIDR を取得する親サブネットをメモします。
たとえば、
/13
CIDR が必要で、使用可能な CIDR に/15
と/16
のみが含まれている場合は、新しいネットワーク ルート範囲のグローバル サブネットを作成する必要があります。/15
サブネットが必要な場合は、既存の/15
CIDR から新しいゾーン サブネットを割り当てることができます。グローバル API サーバーに新しいサブネットを作成します。
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: zone-network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH zone: ZONE_NAME propagationStrategy: SingleZone type: Branch parentReference: name: PARENT_SUBNET_NAME namespace: ORG_NAME EOF
次のように置き換えます。
GLOBAL_API_SERVER_KUBECONFIG
: グローバル API サーバーの kubeconfig ファイルへのパス。詳細については、グローバル API サーバー リソースをご覧ください。SUBNET_NAME
: 新しいサブネットの名前。CIDR_PREFIX_LENGTH
: 動的に割り振られる新しいサブネットの CIDR プレフィックスの長さ(20
など)。CIDR を静的に設定するには、prefixLength
フィールドをcidr
フィールドに置き換えてから、CIDR ブロック(10.0.10.0/27
など)を設定します。ZONE_NAME
: サブネットを割り当てるゾーン(zone1
など)。PARENT_SUBNET_NAME
: 親サブネットの名前(data-external-root-cidr
など)または作成した新しいネットワーク ルート範囲のグローバル サブネット。ORG_NAME
: 組織の名前。
詳細については、グローバル
Subnet
リソースの API リファレンス ドキュメントをご覧ください。ステータス
Ready
タイプがtrue
であることを確認して、サブネットがグローバル API サーバーで準備完了し、使用可能であることを確認します。kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
出力は次のようになります。
status: conditions: - lastTransitionTime: "2025-06-06T07:28:48Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
ゾーン管理 API サーバーにゾーン サブネットが作成され、そのステータス
Ready
タイプがtrue
であることを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
MANAGEMENT_API_SERVER_KUBECONFIG
は、管理 API サーバーの kubeconfig ファイルへのパスに置き換えます。詳細については、ゾーン管理 API サーバー リソースをご覧ください。出力は次のようになります。
status: conditions: - lastTransitionTime: "2025-06-06T07:29:34Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
この新しいゾーン サブネットから、ゾーンの子サブネットをさらに作成するか、個々の IP アドレスを外部サービスに直接割り振ることができます。
ゾーン割り当てなしでルート グローバル サブネットを分割する
IP アドレスをゾーン外部サービスに割り当てることなく、グローバル ルート サブネットからグローバルにアクセス可能な IP アドレス範囲の整理を続行する場合は、グローバル サブネットを作成し、Subnet
カスタム リソースで伝播戦略を定義しないでください。
platform
Namespace で次の操作を行い、グローバル スコープ内でのみグローバル ルート サブネットを分割します。
ターミナル ウィンドウで、データ ネットワーク セグメントのすべてのルート サブネットを記述し、使用可能な CIDR を確認します。
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
GLOBAL_API_SERVER_KUBECONFIG
は、グローバル API サーバーの kubeconfig ファイルのパスに置き換えます。詳細については、グローバル API サーバー リソースをご覧ください。ラベルは定数であり、同じままにする必要があります。出力は次のようになります。
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data Annotations: <none> API Version: ipam.global.gdc.goog/v1 Kind: Subnet Metadata: Creation Timestamp: 2025-06-18T23:05:38Z Finalizers: global-subnet-finalizer Generation: 1 Resource Version: 439434 UID: 5ed1c51a-b5ee-473e-a185-8e065a87ae8f Spec: ipv4Request: Cidr: 10.252.0.0/14 Propagation Strategy: None Type: Root Status: Children Refs: Name: data-external-zone1-root-cidr Namespace: platform Type: SingleSubnet Conditions: Last Transition Time: 2025-06-18T23:05:38Z Message: IP allocation finished successfully Observed Generation: 1 Reason: AllocationSucceeded Status: True Type: Ready ipv4Allocation: Available CIDRs: 10.254.0.0/15 10.253.0.0/16 Cidr: 10.252.0.0/14 Events: <none>
Status.ipv4Allocation.Available CIDRs
の値を使用可能な CIDR としてメモします。これは次のステップで参照されます。上記の出力では、CIDR 範囲10.254.0.0/15
と10.253.0.0/16
を使用できます。出力には、ルート サブネットの数に応じて複数のサブネットが存在する可能性があります。使用可能なすべての CIDR をメモし、使用可能な CIDR がどのサブネットから取得されたかをメモします。前の手順でメモした使用可能な最大の CIDR と、新しいグローバル サブネットに割り振る必要がある CIDR のサイズを比較します。使用可能な最大の CIDR が新しいサブネットの割り当てに十分な大きさでない場合は、続行する前に新しいネットワーク ルート範囲のグローバル サブネットを追加します。新しいサブネットの CIDR を取得する親サブネットをメモします。
たとえば、
/13
CIDR が必要で、使用可能な CIDR に/15
と/16
のみが含まれている場合は、新しいネットワーク ルート範囲のグローバル サブネットを作成する必要があります。/15
サブネットが必要な場合は、既存の/15
CIDR から新しいグローバル サブネットを割り当てることができます。グローバル API サーバーに新しいサブネットを作成します。
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: zone-network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH propagationStrategy: None type: Branch parentReference: name: PARENT_SUBNET_NAME namespace: ORG_NAME EOF
次のように置き換えます。
GLOBAL_API_SERVER_KUBECONFIG
: グローバル API サーバーの kubeconfig ファイルへのパス。詳細については、グローバル API サーバー リソースをご覧ください。SUBNET_NAME
: 新しいサブネットの名前。CIDR_PREFIX_LENGTH
: 動的に割り振られる新しいサブネットの CIDR プレフィックスの長さ(20
など)。CIDR を静的に設定するには、prefixLength
フィールドをcidr
フィールドに置き換えてから、CIDR ブロック(10.0.10.0/27
など)を設定します。PARENT_SUBNET_NAME
: 親サブネットの名前(data-external-root-cidr
など)、または作成した新しいネットワーク ルート範囲のグローバル サブネット。ORG_NAME
: 組織の名前。
詳細については、グローバル
Subnet
リソースの API リファレンス ドキュメントをご覧ください。ステータス
Ready
タイプがtrue
であることを確認して、サブネットがグローバル API サーバーで準備完了し、使用可能であることを確認します。kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
出力は次のようになります。
status: conditions: - lastTransitionTime: "2025-06-06T07:28:48Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
組織の新しいグローバル サブネットがデータ ネットワーク セグメントで使用可能になりました。この新しいグローバル親サブネットから、特定のゾーンのサブネットを作成できます。
新しいネットワーク ルート範囲のグローバル サブネットを追加する
ipam.gdc.goog/usage: network-root-range
ラベルが付いたグローバル サブネットは、ネットワークのすべてのゾーンの CIDR をホストします。CIDR が使い果たされた場合は、グローバル API サーバーに新しいネットワーク ルート範囲サブネットを作成する必要があります。必要に応じて、複数のルート グローバル サブネットを作成できます。
新しいネットワーク ルート範囲サブネットを作成するには、次の操作を行います。
ターミナル ウィンドウで、
platform
Namespace のデータ ネットワーク セグメントの新しいネットワーク ルート範囲グローバル サブネットを作成します。kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: cidr: NEW_CIDR type: Root EOF
次のように置き換えます。
GLOBAL_API_SERVER_KUBECONFIG
: グローバル API サーバーの kubeconfig ファイルへのパス。詳細については、グローバル API サーバー リソースをご覧ください。SUBNET_NAME
: 新しいサブネットの名前。NEW_CIDR
: サブネットの新しい CIDR。この CIDR は、同じグローバル API サーバー内のipam.gdc.goog/usage: network-root-range
ラベルが付いた既存のサブネットの CIDR と重複できません。
この新しいグローバル ルート範囲サブネットは、グローバル API サーバー内で分割することも、特定のゾーンに割り当てることもできます。