エイリアス IP 範囲を構成する
このドキュメントでは、Google Cloud コンソールと Google Cloud CLI を使用して、エイリアス IP アドレスとエイリアス IP 範囲を構成する手順について説明します。これらのコマンドを実行する前に、エイリアス IP 範囲を確認してください。
制限事項
サブネット
- ネットワークあたりの制限は、サブネットごとに定義できるセカンダリ範囲の最大数を表します。
- セカンダリ範囲の追加と削除を同時に行うことはできません。追加と削除は別々のステップとして行う必要があります。
- セカンダリ範囲では CIDR 展開はサポートされていません。
VM インスタンス
- エイリアス IP 範囲は、すべての VM ネットワーク インターフェースでサポートされています。プライマリ ネットワーク インターフェースではエイリアス IP 範囲に対してルーティングが自動的に構成されますが、セカンダリ インターフェースでは構成されません。複数のネットワーク インターフェースがある場合は、追加のインターフェースのポリシー ルーティングを構成する必要があります。これを行う方法の例については、VM のセカンダリ インターフェースへのルーティングを構成するチュートリアルをご覧ください。
- エイリアス IP 範囲は追加または削除できますが、更新することはできません。
- エイリアス IP 範囲をある VM から削除して別の VM に割り当てると、転送が完了するまでに最長で 1 分かかることがあります。
- ファイアウォール ソースタグはエイリアス IP アドレスではサポートされません。つまり、ファイアウォール ルールでソースタグを構成した場合、ソースタグは VM のプライマリ IP アドレスと一致しますが、エイリアス IP アドレスとは一致しません。ソース範囲は、エイリアス IP アドレスからの上りトラフィックを許可または拒否するために使用します。
- 内部 DNS は VM 名をプライマリ IP に解決します。エイリアス IP に追加される名前は自動的には構成されませんが、手動で追加できます。
VPC ネットワーク
- 多数のエイリアス IP 範囲を同時に追加または削除するには、長い時間がかかる可能性があります。たとえば、7,000 個のエイリアス IP 範囲の追加または削除には、最長で 10 分かかることがあります。
- セカンダリ サブネット範囲が存在する場合、自動モード VPC ネットワークは削除できません。
- 静的ルートでは、VM のネクストホップ IP アドレスはプライマリ IP アドレスとする必要があります。エイリアス IP アドレスはネクストホップ IP アドレスとしてサポートされません。
- IPv6 アドレスはサポートされません。
- エイリアス IP 範囲は VPC ネットワークでのみサポートされ、レガシー ネットワークではサポートされません。ネットワークの種類を確認するには、ネットワークを一覧表示します。VPC ネットワークには、
custom
モードまたはauto
モードがあります。レガシー ネットワークのモードは、legacy
です。
サブネット コマンド
VM エイリアス IP 範囲は、VM が属するサブネットの所有範囲から割り当てる必要があります。すべてのサブネットにプライマリ範囲があり、それはサブネットを定義する内部 IP アドレスの標準範囲です。また、サブネットに内部 IP アドレスのセカンダリ IP 範囲をいくつか設定することもできます。エイリアス IP 範囲を割り当てる際はサブネットのプライマリ範囲とセカンダリ範囲のいずれかから割り当てます。
各セカンダリ範囲には、サブネットで一意の名前を付ける必要があります。エイリアス IP 範囲を VM に割り当てる場合、Google Cloud はセカンダリ範囲の名前により、どのサブネット範囲からエイリアス IP を割り当てるかを把握します。
すべての範囲(プライマリとセカンダリの両方)は、VPC ネットワーク内のすべてのサブネットと、VPC ネットワーク ピアリング、VPN、Interconnect を介して接続されているすべてのネットワークにおいて一意である必要があります。
このセクションでは、セカンダリ範囲を持つサブネットを作成する方法、既存のサブネットにセカンダリ範囲を追加する方法、またはサブネットからセカンダリ範囲を削除する方法を説明します。使用する範囲をサブネットに設定したら、VM インスタンス コマンドを参照して、範囲を VM に割り当てる方法を確認します。
セカンダリ CIDR 範囲を持つサブネットを作成する
このコマンドは、VPC ネットワークがすでに存在することを前提としています。そうでない場合は作成してください。
VM のプライマリ インターフェース用にサブネットを作成しているか、いずれかのセカンダリ インターフェース用にサブネットを作成しているかに関係なく、このコマンドは同じです。
エイリアス IP の割り当てにセカンダリ範囲を使用すると、VM でホストされているサービスの IP スペースを区切ることができ、VM 上で実行されているサービスにのみアクセスを許可し、VM のプライマリ IP アドレスへのアクセスをブロックするファイアウォール ルールを簡単に作成できます。
コンソール
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 既存のネットワークの名前をクリックします。
- [サブネットを追加] をクリックします。
- 新しいサブネットの名前を入力します。
- リージョンを指定します。
- IP アドレス範囲を CIDR 表記で入力します。(例: 10.65.61.0/24)
- [セカンダリ IP 範囲を作成する] をクリックします。
- サブネット範囲名を入力します。
- セカンダリ IP 範囲を CIDR 表記で入力します。(例: 10.9.0.0/24)
- セカンダリ IP 範囲を追加するには、追加する範囲ごとに [IP の範囲を追加] をクリックし、名前と範囲を入力します。
- [追加] をクリックします。
gcloud
gcloud compute networks subnets create s1 \ --network NETWORK_NAME \ --region REGION \ --range 10.65.61.0/24 \ --secondary-range RANGE_NAME_1=RANGE_CIDR_1,RANGE_NAME_2=RANGE_CIDR_2,...
次のように置き換えます。
NETWORK_NAME
: サブネットを作成するネットワークの名前。REGION
: サブネットを作成するリージョン。RANGE_NAME_1
=RANGE_CIDR_1
とRANGE_NAME_2
=RANGE_CIDR_2
: エイリアス IP 範囲の設定元となるセカンダリ範囲の名前と、エイリアス IP 範囲自体(例:range1=10.9.0.0/24
)。
完全な構文については、gcloud CLI のドキュメントをご覧ください。
API
1 つ以上のセカンダリ範囲を持つサブネットを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "PRIMARY_IP_RANGE", "network": "NETWORK_URL", "name": "SUBNET_NAME", "secondaryIpRanges": [ { "rangeName": "SECONDARY_RANGE_NAME_1", "ipCidrRange": "SECONDARY_IP_RANGE_1" }, { "rangeName": "SECONDARY_RANGE_NAME_2", "ipCidrRange": "SECONDARY_IP_RANGE_2" }, ...] }
次のように置き換えます。
NETWORK_URL
: サブネットが作成される URL または VPC ネットワーク。PRIMARY_IP_RANGE
: サブネットのプライマリ IP アドレス範囲。PROJECT_ID
: サブネットが作成される VPC ネットワークを含むプロジェクトの ID。REGION
: サブネットが配置されるリージョン。SECONDARY_IP_RANGE_1
とSECONDARY_IP_RANGE_2
: セカンダリ範囲に使用する IP アドレス範囲。SECONDARY_RANGE_NAME_1
とSECONDARY_RANGE_NAME_2
: セカンダリ範囲に使用する名前。SUBNET_NAME
: サブネットの名前。
詳細については、subnetworks.insert
メソッドをご覧ください。
Terraform
Terraform リソースを使用して、1 つ以上のセカンダリ範囲を持つサブネットを作成できます。
Terraform 引数の例の値は変更できます。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
セカンダリ CIDR 範囲を既存のサブネットに追加する
この手順では、使用するサブネットをすでに所有し、セカンダリ範囲を追加する必要があることを前提とします。
エイリアス IP の割り当てにセカンダリ範囲を使用すると、VM のプライマリ IP アドレスではなく、VM 上で実行されているサービスへのアクセスを許可するファイアウォール ルールを簡単に作成できます。
コンソール
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 変更するサブネットの名前をクリックして、詳細ページを表示します。
- [編集] をクリックします。
- [セカンダリ IP 範囲] セクションで、[IP 範囲を追加] をクリックします。
- [サブネット範囲の名前] に名前を入力します。
- [セカンダリ IP 範囲] の範囲を CIDR 表記で入力します。(例:
10.9.0.0/24
) - セカンダリ IP 範囲を追加するには、追加する範囲ごとに [IP の範囲を追加] をクリックし、名前と範囲を入力します。
- [保存] をクリックします。
gcloud
gcloud compute networks subnets update SUBNET_NAME \ --region REGION \ --add-secondary-ranges RANGE_NAME_1=RANGE_CIDR_1,RANGE_NAME_2=RANGE_CIDR_2,...
次のように置き換えます。
SUBNET_NAME
: セカンダリ範囲を追加するサブネットの名前。REGION
: サブネットを作成するリージョン。RANGE_NAME_1
=RANGE_CIDR_1
とRANGE_NAME_2
=RANGE_CIDR_2
: エイリアス IP 範囲の設定元となるセカンダリ範囲の名前と、エイリアス IP 範囲自体(例:range1=10.9.0.0/24
)。
完全な構文については、gcloud CLI のドキュメントをご覧ください。
API
セカンダリ範囲を既存のサブネットに追加します。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME { "secondaryIpRanges": [ { "rangeName": "SECONDARY_RANGE_NAME_1", "ipCidrRange": "SECONDARY_IP_RANGE_1" }, { "rangeName": "SECONDARY_RANGE_NAME_2", "ipCidrRange": "SECONDARY_IP_RANGE_2" }, ...], "fingerprint": "SUBNETWORK_FINGERPRINT" }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、変更するサブネットを含むプロジェクトの ID です。REGION
は、サブネットが存在するリージョンです。SECONDARY_IP_RANGE_1
とSECONDARY_IP_RANGE_2
は、セカンダリ範囲に使用する IP アドレス範囲です。SECONDARY_RANGE_NAME_1
とSECONDARY_RANGE_NAME_2
は、セカンダリ範囲に使用する名前です。SUBNET_FINGERPRINT
は、既存のサブネットのフィンガー プリント ID です。サブネットを記述するときに指定します。SUBNET_NAME
は、変更するサブネットの名前です。
詳細については、subnetworks.patch
メソッドをご覧ください。
サブネットからセカンダリ CIDR 範囲を削除する
サブネットから既存のセカンダリ範囲を削除できます。サブネットに関連付けられている範囲を表示するには、サブネットの説明をご覧ください。
コンソール
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 変更するサブネットの名前をクリックして、詳細ページを表示します。
- [編集] をクリックします。
- [セカンダリ IP 範囲] セクションで、削除するセカンダリ範囲の横にある [X] をクリックします。
- [保存] をクリックします。
gcloud
gcloud compute networks subnets update SUBNET_NAME \ --region REGION \ --remove-secondary-ranges RANGE_NAME_1,RANGE_NAME_2,...
ここで
SUBNET_NAME
は、セカンダリ範囲を削除するサブネットの名前です。REGION
は、サブネットを作成するリージョンです。RANGE_NAME_1
とRANGE_NAME_2
は、ターゲット サブネットSUBNET_NAME
から削除するセカンダリ範囲の名前です(例:range1=10.9.0.0/24
)。
完全な構文については、gcloud CLI のドキュメントをご覧ください。
API
セカンダリ範囲を除外して削除します。次の例では、既存のサブネットからすべてのセカンダリ範囲を削除しています。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME { "fingerprint": "SUBNET_FINGERPRINT", "secondaryIpRanges": [ ] }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、変更するサブネットを含むプロジェクトの ID です。REGION
は、サブネットが存在するリージョンです。SUBNET_FINGERPRINT
は、既存のサブネットのフィンガー プリント ID です。サブネットを記述するときに指定します。SUBNET_NAME
は、変更するサブネットの名前です。
詳細については、subnetworks.patch
メソッドをご覧ください。
VM インスタンスを操作する
VM インスタンス コマンドは、エイリアス IP 範囲を持つインスタンスを作成する方法、既存の VM インスタンスにエイリアス IP 範囲を追加する方法、または既存の VM インスタンスから範囲を削除する方法を示します。
プライマリ CIDR 範囲にエイリアス IP 範囲がある VM を作成する
サブネットのプライマリ範囲からエイリアス IP 範囲を割り当てる場合は、この手順を使用します。VPC ネットワーク上の他のリソースによってすでに一部でも使用されている範囲は選択できません。
インスタンスのプライマリ インターフェースとエイリアス IP アドレスを同じ範囲にする場合は、この手順を使用します。
コンソール
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - [インスタンスを作成] をクリックします。
- 新しいインスタンスの名前を入力します。
- ゾーンを指定します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
- [ネットワーキング] タブをクリックします。
- [ネットワーク インターフェース] セクションのプライマリ インターフェースの横にある編集(鉛筆アイコン)ボタンをクリックします。
- [エイリアス IP 範囲を表示] をクリックします。
- [サブネット範囲] は [プライマリ] のままにします。
- エイリアス IP 範囲を CIDR 表記で入力します。この範囲は、プライマリ範囲の未使用の部分範囲である必要があります。
- [作成] をクリックします。
gcloud
gcloud compute instances create vm1 \ --zone ZONE \ --network-interface "subnet=SUBNET_NAME,aliases=RANGE_CIDR_1;RANGE_CIDR_2,..."
ここで
ZONE
は、インスタンスを含むゾーンです。SUBNET_NAME
は、インスタンスを含むサブネットの名前です。RANGE_CIDR_1
とRANGE_CIDR_2
は、インターフェースに割り当てるプライマリ サブネットの IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り当てられます。複数の範囲を指定する場合は、範囲をセミコロン(;
)で区切ります。
完全な構文については、gcloud CLI のドキュメントをご覧ください。
API
インスタンスのサブネットのプライマリ IP アドレス範囲内のエイリアス IP アドレスを使用してインスタンスを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "networkInterfaces": [ { "aliasIpRanges": [ { "ipCidrRange": "CIDR_RANGE" } ] }, ... ], ... }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、インスタンスを作成するプロジェクトの ID です。CIDR_RANGE
は、インターフェースに割り当てるプライマリ サブネットからの IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アドレス アロケータによって選択され、ネットワーク インターフェースに割り当てられます。ZONE
は、インスタンスが作成される Google Cloud ゾーンです。
詳細については、instance.insert
メソッドをご覧ください。
セカンダリ CIDR 範囲にエイリアス IP 範囲がある VM を作成する
サブネットのセカンダリ範囲から取得したエイリアス IP 範囲を割り当てる場合は、この手順を使用します。エイリアス IP 範囲をサブネットのプライマリ範囲とは別にすることで、VM のプライマリ IP アドレスではなく、VM 上で実行されているサービスへのアクセスを許可するファイアウォール ルールを簡単に作成できます。
コンソール
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - [インスタンスを作成] をクリックします。
- 新しいインスタンスの名前を入力します。
- ゾーンを指定します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
- [ネットワーキング] タブをクリックします。
- [ネットワーク インターフェース] セクションのプライマリ インターフェースの横にある編集(鉛筆アイコン)ボタンをクリックします。
- [エイリアス IP 範囲を表示] をクリックします。
- セカンダリ範囲があるサブネットワークを選択します。
- [サブネット範囲] で、使用するセカンダリ IP 範囲を選択します。
- エイリアス IP 範囲を CIDR 表記で入力します。この範囲は、セカンダリ IP 範囲の未使用範囲である必要があります。
- [作成] をクリックします。
gcloud
gcloud compute instances create vm3 \ --zone ZONE \ --network-interface subnet=SUBNET_NAME,aliases=RANGE_NAME:RANGE_CIDR
ここで
ZONE
は、インスタンスを含むゾーンです。SUBNET_NAME
は、インスタンスを含むサブネットの名前です。RANGE_NAME
は、エイリアス IP 範囲の設定元となるサブネット セカンダリ範囲の名前です。RANGE_CIDR
は、インターフェースに割り当てる IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り当てられます。
完全な構文については、gcloud のドキュメントをご覧ください。
API
インスタンスのサブネットのセカンダリ IP アドレス範囲内のエイリアス IP アドレスを使用してインスタンスを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "networkInterfaces": [ { "aliasIpRanges": [ { "ipCidrRange": "SECONDARY_CIDR_RANGE", "subnetworkRangeName": "SECONDARY_RANGE_NAME" } ] }, ... ], ... }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、インスタンスを作成するプロジェクトの ID です。SECONDARY_CIDR_RANGE
は、インターフェースに割り当てる IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アドレス アロケータによって選択され、ネットワーク インターフェースに割り当てられます。SECONDARY_RANGE_NAME
は、エイリアス IP 範囲の設定元となるサブネット セカンダリ範囲の名前です。ZONE
は、インスタンスが作成される Google Cloud ゾーンです。
詳細については、instance.insert
メソッドをご覧ください。
複数のインターフェースとエイリアス IP アドレスを持つ VM を作成する
この例では、2 つのネットワーク(それぞれ 1 つのサブネットを持つ)と、両方のネットワークにインターフェースを持つ 1 つの VM を作成します。すでに 2 つの VPC ネットワークがある場合は、「VM インスタンスを作成」ステップまでスキップできます。
コンソール
最初のネットワークとサブネットを作成します。
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - [VPC ネットワークを作成] をクリックします。
- [名前] に「
my-network1
」を入力します。 - [サブネット作成モード] を「
Custom
」に設定し、サブネットの [名前] に「my-subnet1
」を指定します。 - [リージョン] を指定します。
- [IP アドレス範囲] を
172.16.1.0/24
に設定します。 - [セカンダリ IP 範囲を作成する] をクリックします。
- [サブネット範囲の名前] を
range1
に設定します。 - [セカンダリ IP の範囲] を
10.1.0.0/16
に設定します。 - [完了] をクリックします。
- [作成] をクリックします。
2 番目のネットワークとサブネットを作成します。
- Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - [VPC ネットワークを作成] をクリックします。
- [名前] に「
my-network2
」を入力します。 - [サブネット作成モード] を「
Custom
」に設定し、サブネットの [名前] に「my-subnet2
」を指定します。 - [リージョン] には、最初のネットワークとサブネットに指定したのと同じものを指定します。
- [IP アドレス範囲] を
172.16.2.0/24
に設定します。 - [セカンダリ IP 範囲を作成する] をクリックします。
- [サブネット範囲の名前] を
range2
に設定します。 - [セカンダリ IP の範囲] を
10.2.0.0/16
に設定します。 - [完了] をクリックします。
- [作成] をクリックします。
両方のネットワークにインターフェースを持つ VM を作成します。
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - [インスタンスを作成] をクリックします。
- ゾーンを、サブネットを作成したリージョンに設定します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
- [ネットワーキング] をクリックします。
- 最初のネットワーク インターフェースをクリックします。
- [ネットワーク] を
my-network1
に設定します。 - [サブネットワーク] を
my-subnet1
に設定します。 - [エイリアス IP 範囲を表示] をクリックします。
- [Add Alias IP range] をクリックします。
- [サブネットの範囲] を
Primary
に設定します。 - [エイリアス IP 範囲] を
/32
に設定します。 - [IP の範囲を追加] をクリックします。
- [サブネットの範囲] を
range1
に設定します。 - [エイリアス IP 範囲] を
/24
に設定します。 - [完了] をクリックします。
- [ネットワーク インターフェースを追加] をクリックします。
- [
my-network2
] を選択します。 - [サブネットワーク] を
my-subnet2
に設定します。 - [エイリアス IP 範囲を表示] をクリックします。
- [Add Alias IP range] をクリックします。
- [サブネットの範囲] を
Primary
に設定します。 - [エイリアス IP 範囲] を
/32
に設定します。 - [IP の範囲を追加] をクリックします。
- [サブネットの範囲] を
range2
に設定します。 - [エイリアス IP 範囲] に「
/24
」と入力します。 - [完了] をクリックします。
- [作成] をクリックします。
gcloud
最初のネットワークを作成します。
gcloud compute networks create my-network1 --subnet-mode CUSTOM
サブネットを追加します。
gcloud compute networks subnets create my-subnet1 \ --network my-network1 \ --range 172.16.1.0/24 \ --secondary-range range1=10.1.0.0/16
2 番目のネットワークを作成します。
gcloud compute networks create my-network2 --subnet-mode CUSTOM
サブネットを追加します。
gcloud compute networks subnets create my-subnet2 \ --network my-network2 \ --range 172.16.2.0/24 \ --secondary-range range2=10.2.0.0/16
両方のネットワークにインターフェースを持つ VM を作成します。リストにある最初のネットワーク インターフェース、つまり
my-subnet1
のインターフェースがプライマリ インターフェースです。gcloud compute instances create multi-nic-alias-vm \ --machine-type f1-micro \ --network-interface "subnet=my-subnet1,aliases=/32;range1:/24" \ --network-interface "subnet=my-subnet2,aliases=/32;range2:/24"
表示コマンドを使用して、インターフェースとそのアドレスを確認します。
gcloud compute instances describe multi-nic-alias-vm
... networkInterfaces: - ... aliasIpRanges: - ipCidrRange: 172.16.1.2/32 - ipCidrRange: 10.1.0.0/24 subnetworkRangeName: range1 name: nic0 network: .../networks/my-network1 networkIP: 172.16.1.3 subnetwork: .../subnetworks/my-subnet1 ... - ... aliasIpRanges: - ipCidrRange: 172.16.2.2/32 - ipCidrRange: 10.2.0.0/24 subnetworkRangeName: range2 name: nic1 network: .../networks/my-network2 networkIP: 172.16.2.3 subnetwork: .../subnetworks/my-subnet2
API
my-network1
とmy-network2
という 2 つのカスタムモード VPC ネットワークを作成します。詳細は、カスタムモード ネットワークの作成をご覧ください。サブネットを VPC ネットワークに追加します。詳細は、サブネットの追加をご覧ください。
my-subnet1
というサブネットをmy-network1
に追加します。プライマリ範囲には172.16.1.0/24
を、range1
という名前のセカンダリ範囲には10.1.0.0/16
を指定します。my-subnet2
というサブネットをmy-network2
に追加します。プライマリ範囲には172.16.2.0/24
を、range2
という名前のセカンダリ範囲には10.2.0.0/16
を指定します。
両方のネットワークにインターフェースを持つ VM インスタンスを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "networkInterfaces": [ { "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/my-subnet1", "aliasIpRanges": [ { "ipCidrRange": "/32", }, { "subnetworkRangeName": "range1", "ipCidrRange": "/24" } ] }, { "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/my-subnet2", "aliasIpRanges": [ { "ipCidrRange": "/32", }, { "subnetworkRangeName": "range2", "ipCidrRange": "/24" } ] } ], ... }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、インスタンスを作成するプロジェクトの ID です。REGION
は、サブネットが配置されている Google Cloud リージョンです。サブネットは、インスタンスと同じリージョン内に存在している必要があります。ZONE
は、インスタンスが作成される Google Cloud ゾーンです。
詳細については、
instance.insert
メソッドをご覧ください。
エイリアス IP 範囲を既存のインスタンスに追加する
実行中のインスタンスにエイリアス IP 範囲を追加できます。
API 呼び出しが完了した後も、新しいアドレスをすぐには使用できない場合があります。これは、ゲスト OS がアドレスとルートを追加した後にのみ利用可能です。
コンソール
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - 既存のインスタンスの名前をクリックします。
- [編集] をクリックします。
- ネットワーク インターフェース [nic0](またはエイリアス IP 範囲を追加するネットワーク インターフェース)をクリックします。
- [エイリアス IP 範囲を表示] をクリックします。
- [IP の範囲を追加] をクリックします。
- サブネットの範囲を選択します。
- エイリアス IP 範囲を入力します。
- [完了] をクリックします。
- [保存] をクリックします。
gcloud
gcloud compute instances network-interfaces update INSTANCE_NAME \ --zone ZONE \ [--network-interface NETWORK_INTERFACE; default="nic0"] --aliases "RANGE_NAME_1:RANGE_CIDR_1;RANGE_NAME_2:RANGE_CIDR_2;..."
次のように置き換えます。
ZONE
は、インスタンスを含むゾーンです。NETWORK_INTERFACE
は、エイリアス IP アドレス範囲を追加するネットワーク インターフェースの名前です。RANGE_NAME_1
とRANGE_NAME_2
は、エイリアス IP 範囲の取得元のサブネット セカンダリ範囲の名前です。サブネットのプライマリ範囲から範囲を割り当てる場合は、この値を省略します。RANGE_CIDR_1
とRANGE_CIDR_2
は、インターフェースに割り当てる IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り当てられます。
完全な構文については、gcloud のドキュメントをご覧ください。
API
エイリアス IP 範囲を既存のインスタンスに追加します。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NETWORK_INTERFACE_NAME { "aliasIpRanges": [ { "ipCidrRange": "SECONDARY_IP_RANGE", "subnetworkRangeName": "SECONDARY_RANGE_NAME" }, existing ranges... ], "fingerprint": "INTERFACE_FINGERPRINT" }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、変更するインスタンスを含むプロジェクトの ID です。INSTANCE_NAME
は、変更するインスタンスの名前です。NETWORK_INTERFACE_NAME
は、変更するインスタンスのネットワーク インターフェースの名前です。INTERFACE_FINGERPRINT
は、既存のネットワーク インターフェースのフィンガー プリント ID で、インスタンスの記述時に指定されます。SECONDARY_CIDR_RANGE
は、インターフェースに割り当てる IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アドレス アロケータによって選択され、ネットワーク インターフェースに割り当てられます。SECONDARY_RANGE_NAME
は、エイリアス IP 範囲の設定元となるサブネット セカンダリ範囲の名前です。サブネットのプライマリ範囲から範囲を割り当てる場合は、この項目を省略します。ZONE
は、インスタンスが作成される Google Cloud ゾーンです。
詳細については、instance.updateNetworkInterface
メソッドをご覧ください。
既存のインスタンスのエイリアス IP 範囲を変更する
既存のインスタンスへのエイリアス IP 範囲の追加や、範囲の削除ができます。
アドレスの変更がすぐに反映されないことがあります。API 呼び出しが終了し、ゲスト OS がアドレスとルートを変更する必要があります。
コンソール
- Google Cloud コンソールの [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動 - 既存のインスタンスの名前をクリックします。
- [編集] をクリックします。
- ネットワーク インターフェース [nic0](または変更するネットワーク インターフェース)をクリックします。
- [エイリアス IP 範囲を表示] をクリックします。
- エイリアス IP 範囲を追加するには、[Add Alias IP range] をクリックします。
- エイリアス IP 範囲を削除するには、そのエイリアス IP 範囲の横にある [X] をクリックします。
- [完了] をクリックします。
- [保存] をクリックします。
gcloud
gcloud compute instances network-interfaces update INSTANCE_NAME \ --zone ZONE \ [--network-interface NETWORK_INTERFACE; default="nic0"] \ --aliases "RANGES_TO_RETAIN;NEW_RANGE_NAME:NEW_RANGE_CIDR;..."
次のように置き換えます。
ZONE
: インスタンスを含むゾーン。NETWORK_INTERFACE
: 変更するネットワーク インターフェースの名前。RANGES_TO_RETAIN
: 保持する必要がある既存の範囲(CURRENT_RANGE_NAME
:CURRENT_RANGE_CIDR
形式)。範囲が設定されていないインスタンスに範囲を追加する場合は、値を空白にします。インスタンスからすべての範囲を削除する場合は、--aliases
フィールド全体が空白になります。NEW_RANGE_NAME
: 新しいエイリアス IP 範囲の設定元となるサブネット セカンダリ範囲の名前。サブネットのプライマリ範囲から範囲を割り振る場合は、この値を省略します。NEW_RANGE_CIDR
: インターフェースに割り振る IP アドレス範囲。この範囲には、特定の範囲(192.168.100.0/24
)、単一の IP アドレス(192.168.100.1
)、または CIDR 形式のネットマスク(/24
)を指定できます。この IP アドレス範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り振られます。
範囲を追加するには、コマンドを実行し、既存のエイリアス IP 範囲と新しいエイリアス IP 範囲をすべて指定します。ペアはセミコロンで区切ります。例: --aliases
"CURRENT_RANGE_NAME:CURRENT_RANGE_CIDR;NEW_RANGE_NAME:NEW_RANGE_CIDR"
範囲を削除するには、コマンドを実行し、維持するエイリアス IP 範囲のみを指定します。セカンダリ範囲を維持する場合、セカンダリ範囲の名前を指定する必要があります。CIDR 範囲には、特定の範囲(192.168.100.0/24
)または単一の IP アドレス(192.168.100.1
)を指定できます。
例: --aliases "RANGE_NAME:RANGE_CIDR;RANGE_CIDR"
すべての範囲を削除するには、コマンドを実行して --aliases
フラグを指定します。ただし、引用符を使用して空白を指定します。例: --aliases ""
1 つの gcloud
コマンドで範囲の追加と削除を行うことはできません。Google Cloud CLI を使用して一部の範囲を削除した後に、他の範囲を追加するには、このコマンドを実行して不要な範囲を削除してから、このコマンドを再度実行して必要な範囲を追加します。
完全な構文については、gcloud
のドキュメントをご覧ください。
API
既存のインスタンスのネットワーク インターフェースの場合は、エイリアス IP アドレス範囲を追加または削除します。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NETWORK_INTERFACE_NAME { "aliasIpRanges": [ include new and existing ranges to add them... exclude existing ranges to remove them... ], "fingerprint": "INTERFACE_FINGERPRINT" }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、変更するインスタンスを含むプロジェクトの ID です。INSTANCE_NAME
は、変更するインスタンスの名前です。NETWORK_INTERFACE_NAME
は、変更するインスタンスのネットワーク インターフェースの名前です。INTERFACE_FINGERPRINT
は、既存のネットワーク インターフェースのフィンガー プリント ID で、インスタンスの記述時に指定されます。
詳細については、instance.updateNetworkInterface
メソッドをご覧ください。
トラブルシューティング
エイリアス IP のある VM インスタンスを作成できない
ネットワークが VPC ネットワークであることを確認します。エイリアス IP は、レガシー ネットワークではサポートされません。
gcloud compute networks list --filter="name=NETWORK_NAME"
ネットワーク
MODE
は、「auto」か「custom」である必要があります。サブネット範囲の名前が指定されている場合、次の点を確認します。
gcloud compute networks subnets describe SUBNET_NAME --region=REGION
- サブネットのセカンダリ範囲に対応する名前があること
- リクエストしたエイリアス IP 範囲がこのセカンダリ範囲内にあるか、プライマリ範囲よりも小さい(ネットマスクを使用している場合)こと
サブネット範囲の名前が指定されていない場合、リクエストしたエイリアス IP 範囲が、プライマリ サブネット範囲内にあるか、プライマリ範囲よりも小さいこと(ネットマスクを使用している場合)を確認します。
エイリアス IP に接続できない
ファイアウォール ルールを確認します。
すべてのファイアウォール ルールを一覧表示します。
gcloud compute firewall-rules list --format=json
エイリアス IP との間のトラフィックが許可されていることを確認します。
必要に応じて、エイリアス IP への ping を許可するファイアウォール ルールを追加します。
gcloud compute firewall-rules create FIREWALL_NAME1 \ --network NETWORK_NAME --priority 0 --source-ranges ALIAS_IP \ --allow icmp
gcloud compute firewall-rules create FIREWALL_NAME2 \ --network NETWORK_NAME --priority 0 --direction out \ --destination-ranges ALIAS_IP --allow icmp
VM が IP エイリアス範囲をローカルとして認識していることを確認します。Debian などの Linux ディストリビューションでは、これは通常次の手順で行うことができます。
インスタンスに接続し、次のコマンドを実行します。
ip route show table local
出力に次の内容が含まれているはずです。
local ALIAS_IP_RANGE dev eth0 proto 66 scope host
/etc/default/instance_configs.cfg
にip_aliases = true
が含まれていることを確認します。変更する必要がある場合は、ゲスト エージェントも再起動する必要があります。systemctl restart google-guest-agent
ローカルルートが存在しない場合は、次のコマンドを使用して構成します。
ip route add to local ALIAS_IP_RANGE dev eth0 proto 66
自動起動サービスがエイリアス IP アドレスにバインドされない
サポートされている Linux ディストリビューションでは、プリインストールされたゲスト エージェントによってエイリアス IP アドレスが自動的にローカル アドレスとして設定されます。これにより、OS レベルの構成が不要なため、設定が簡単になります。
ただし、ゲスト エージェントが実行される前に、OS はエイリアス IP アドレスをローカル アドレスとして認識しません。VM に自動起動サービスがあり、ゲスト エージェントより前に開始された場合、そのサービスはエイリアス IP アドレスにバインドできません。
たとえば、Apache HTTP サーバーが次のエラーで終了することがあります。
could not bind to address ALIAS_IP:80
この問題を解決するには、ゲスト エージェントの後にサービスを開始するようにサービスを構成します。systemctl
を使用するディストリビューションでは、次の操作を行います。
特権ユーザーとして次のコマンドを実行して、正常に動作していないサービスのドロップイン スニペットを追加します。たとえば、Debian の Apache HTTP Server の場合は
apache2
になります。systemctl edit YOUR_SERVICE
テキスト エディタで、次の行を追加します。
Lines below this comment will be discarded
という行の上に行を追加してください。[Unit] After=google-guest-agent.service
セカンダリ IP 範囲が一覧表示されない
セカンダリ IP 範囲は通常のサブネットとして一覧表示されません。サブネットのセカンダリ IP 範囲が作成されたことを確認するには、gcloud compute networks subnets describe
コマンドを実行します。
サブネットを作成します。
gcloud compute networks subnets create my-subnet \ --region us-central1 \ --network my-network \ --range 10.9.0.0/16 \ --secondary-range secondaryrange1=172.16.0.0/12
Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/regions/us-central1/subnetworks/my-subnet]. NAME REGION NETWORK RANGE my-subnet us-central1 my-network 10.9.0.0/16
サブネットを一覧表示します。
gcloud compute networks subnets list
NAME REGION NETWORK RANGE my-subnet us-central1 my-network 10.9.0.0/16
サブネットの詳細を取得して、セカンダリ範囲を確認します。
gcloud compute networks subnets describe my-subnet --region us-central1
... ipCidrRange: 10.9.0.0/16 ... secondaryIpRanges: - ipCidrRange: 172.16.0.0/12 rangeName: secondaryrange1 ...
指定したサブネット セカンダリ範囲が存在しない
VM を作成するときに、セカンダリ範囲が存在しないというエラーが表示された場合は、次の点を確認します。
- サブネットに、指定した名前のセカンダリ範囲があること
- セカンダリ範囲があるサブネット内に VM を作成していること
次のコマンドを実行すると、このエラーが表示されます。
セカンダリ範囲のサブネットを作成します。
gcloud compute networks subnets create my-subnet \ --region us-central1 \ --network my-network \ --range 10.9.0.0/16 \ --secondary-range secondaryrange1=172.16.0.0/12
Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/regions/us-central1/subnetworks/my-subnet]. NAME REGION NETWORK RANGE my-subnet us-central1 my-network 10.9.0.0/16
新しく作成したサブネット内でなく、デフォルト ネットワークなどの別のネットワークにインスタンスを作成します。
gcloud compute instances create instance-1 \ --zone us-central1-a \ --network default
Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/zones/us-central1-a/instances/instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS instance-1 us-central1-a n1-standard-1 10.128.0.2 47.82.96.9 RUNNING
手順 1 で作成したサブネットからエイリアス IP 範囲を割り当てます。インスタンスとは異なるサブネットにセカンダリ範囲があるため、コマンドは失敗します。
gcloud compute instances network-interfaces update instance-1 \ --zone us-central1-a \ --aliases secondaryrange1:172.16.0.10/32
ERROR: (gcloud.compute.instances.network-interfaces.update) HTTPError 400: Invalid value for field 'resource.aliasIpRanges[0].subnetworkRangeName': 'secondaryrange'. The specified subnetwork secondary range does not exist.
手順 1 で作成したサブネット内にインターフェースがある、別のインスタンスを作成します。
gcloud compute instances create instance-2 \ --zone us-central1-a \ --network-interface subnet=my-subnet
Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/zones/us-central1-a/instances/instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS instance-2 us-central1-a n1-standard-1 10.9.0.2 38.74.204.89 RUNNING
エイリアス IP 範囲をインターフェースに追加します。今回は、インターフェースとセカンダリ範囲が同じサブネット内にあるため、コマンドは成功します。
gcloud compute instances network-interfaces update instance-2 \ --zone us-central1-a \ --aliases secondaryrange1:172.16.0.10/32
Updating network interface [nic0] of instance [instance-2]...done.
1 つのリクエストでセカンダリ IP 範囲の追加と削除を同時にできない
現在のところ、1 つのコマンドによるサブネットワーク セカンダリ IP 範囲の追加と削除はサポートされていません。セカンダリ範囲の追加と削除を行う gcloud コマンドを実行すると、変更されていない既存の範囲が保持されます。
範囲の追加と削除を行うには、2 つのコマンドを別々に実行します。
gcloud compute networks subnets update SUBNET_NAME \ --add-secondary-ranges RANGE_NAME_1=RANGE_CIDR_1,RANGE_NAME_2=RANGE_CIDR_2,...
gcloud compute networks subnets update SUBNET_NAME \ --remove-secondary-ranges RANGE_NAME_1,RANGE_NAME_2,...
このコマンドの詳細を表示するには、gcloud compute networks subnets update --help
を実行します。
エイリアス IP 範囲の追加と削除を同時にできない
現在のところ、1 つのリクエストによる VM エイリアス IP 範囲の追加と削除はサポートされていません。
エイリアス IP 範囲を更新する gcloud
コマンドでは既存の範囲が保持されないため、ある範囲を省略すると、その範囲の削除が要求されたものとして処理されます。
たとえば、現在の VM のエイリアス範囲が 10.9.27.0/24
で、新しくリクエストされた範囲が /24
の場合、/24
をリクエストするコマンドを実行すると、10.9.27.0/24
の削除と /24
の追加として解釈されるため、拒否されます。新しい範囲を追加するには、まず既存の範囲を削除する必要があります。
例:
エイリアス IP 範囲を作成します。
gcloud compute instances create vm --network-interface "subnet=s1,aliases=10.9.27.0/24"
既存の範囲を指定せずに
/24
を追加しようとすると、エラーが発生します。gcloud compute instances network-interfaces update vm --aliases "/24" ERROR: (gcloud.compute.instances.network-interfaces.update) HTTPError 400: Invalid value for field 'resource.aliasIpRanges': ''. Cannot simultaneously add and remove alias IP ranges.
VM を更新してエイリアス IP 範囲をなくします。
gcloud compute instances network-interfaces update vm --aliases "" Updating network interface [nic0] of instance [vm]...done.
新しいエイリアス IP 範囲を追加します。
gcloud compute instances network-interfaces update vm --aliases "/24" Updating network interface [nic0] of instance [vm]...done.
このコマンドの詳細を表示するには、gcloud compute instances network-interfaces update --help
を実行します。
ファイアウォール ルールのソースタグとソースサービス アカウント
ファイアウォール ソースサービス アカウントとソースタグは、一致するインスタンスのプライマリ ネットワーク IP にのみ展開され、一致するインスタンスのエイリアス IP には適用されません。したがって、ソースタグに基づくファイアウォール ルールは、インスタンス エイリアス IP アドレスからのトラフィックに影響を与えません。エイリアス IP アドレスは、送信元や送信先の範囲としてファイアウォール ルールに追加できます。
複数のインターフェースとエイリアス IP 範囲を持つ VM に関する問題
複数のインターフェースに関するトラブルシューティングをご覧ください。
Google Cloud イメージで IP エイリアスを有効にすると、セルフマネージド Kubernetes クラスタで cbr0
ブリッジが無効になる
Google 提供のイメージでは、Google ゲスト エージェントがエイリアス IP アドレス範囲のローカルルートを作成します。セルフマネージド Kubernetes クラスタの場合、エイリアス IP 範囲のローカルルートが作成されないように Google ゲスト エージェントを構成する必要があります。GKE では、ノードイメージでのエイリアス IP 範囲のローカルルートの作成が無効になるため、GKE クラスタの場合、この手順は必要ありません。
症状:
ゲスト エージェントによって作成されたローカルルートが
cbr0
インターフェースからエイリアス IP 範囲を削除すると、Kubernetes Pod はネットワーク アクセスを失います。Linux ブリッジ デバイス(
tcpdump -ni cbr arp
)のパケット キャプチャでは、そのインターフェースが稼働していても、cbr0
インターフェースから ARP レスポンスの損失が表示されます。ローカルルート テーブル(
ip route show table local
)を調べると、エイリアス IP アドレス範囲がコンテナ ブリッジ インターフェース(cbr0
)ではなく、プライマリ ネットワーク インターフェース(eth0
、ens4
など)に割り当てられています。
修正:
ゲスト環境でインストールされるパッケージに含まれている適切なコマンドを実行して、ノード VM が Google ゲスト エージェントを実行しているのか、古い Compute Engine パッケージを実行しているのかを確認します。
ノード VM が Google ゲスト エージェントを実行していない場合は、ゲスト エージェントをインストールするか、Google 提供の新しいイメージを使用します。
エイリアス IP 範囲と転送ルールのローカルルートの作成をスキップするように Google ゲスト エージェントを構成します。
/etc/default/instance_configs.cfg
を編集し、[NetworkInterfaces]
セクションでip_forwarding=false
を設定します。[NetworkInterfaces]
セクションがinstance_configs.cfg
ファイルにない場合は、このセクションを作成できます。次のいずれかの操作を行います。
google-guest-agent.service
サービスを再起動してローカルルート テーブルを編集します。google-guest-agent.service
サービスを再起動するには、sudo systemctl restart google-guest-agent.service
を実行します。次に、ローカルルート テーブルを編集してエイリアス IP アドレス範囲のエントリを削除します。次に例を示します。sudo ip route del local ALIAS_IP_RANGE dev DEVICE_IDENTIFIER
次のように置き換えます。
ALIAS_IP_RANGE
: エイリアス IP アドレス範囲。DEVICE_IDENTIFIER
: ネットワーク インターフェースの ID。たとえば、ens4
やeth0
です。
詳しくは、Google ゲスト エージェントのドキュメントで構成のセクションをご覧ください。
次のステップ
- インスタンスについて確認する