エイリアス IP 範囲の構成

このドキュメントでは、Google Cloud Console と gcloud コマンドライン ツールを使用して、エイリアス IP アドレスとエイリアス IP 範囲を構成する手順について説明します。これらのコマンドを実行する前に、エイリアス IP の概要ページをご確認ください。

制限事項

サブネット

  • ネットワークあたりの制限は、サブネットごとに定義できるセカンダリ範囲の最大数を表します。
  • セカンダリ範囲の追加と削除を同時に行うことはできません。追加と削除は別のステップとして行う必要があります。
  • セカンダリ範囲では CIDR 展開はサポートされていません。

VM インスタンス

  • エイリアス IP 範囲は、すべての VM ネットワーク インターフェースでサポートされています。プライマリ ネットワーク インターフェースではエイリアス IP 範囲に対してルーティングが自動的に構成されますが、セカンダリ インターフェースでは構成されません。複数のネットワーク インターフェースがある場合は、追加のインターフェースのポリシー ルーティングを構成する必要があります。
  • VM インスタンスの仮想インターフェースには、最大 10 個のエイリアス IP 範囲を割り当てることができます。
  • エイリアス IP 範囲は追加または削除できますが、更新することはできません。
  • エイリアス IP 範囲をある VM から削除して別の VM に割り当てると、転送が完了するまでに最長で 1 分かかることがあります。
  • ファイアウォール ソースタグはエイリアス IP アドレスではサポートされません。つまり、ファイアウォール ルールでソースタグを構成した場合、ソースタグは VM のプライマリ IP アドレスと一致しますが、エイリアス IP アドレスとは一致しません。 ソース範囲は、エイリアス IP アドレスからの上りトラフィックを許可または拒否するために使用します。
  • 内部 DNS は VM 名をプライマリ IP に解決します。エイリアス IP に追加される名前は自動的には構成されませんが、手動で追加できます。

VPC ネットワーク

  • 1 つの VPC ネットワークには、すべての VM で最大 7,000 個のエイリアス IP 範囲を作成できます。
  • 多数のエイリアス 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 に割り当てる場合、GCP はセカンダリ範囲の名前により、どのサブネット範囲からエイリアス IP を割り当てるかを把握します。

すべての範囲(プライマリとセカンダリの両方)は、VPC ネットワーク内のすべてのサブネットと、VPC ネットワーク ピアリング、VPN、Interconnect を介して接続されているすべてのネットワークにおいて一意である必要があります。

このセクションでは、セカンダリ範囲を持つサブネットを作成する方法、既存のサブネットにセカンダリ範囲を追加する方法、またはサブネットからセカンダリ範囲を削除する方法を説明します。使用する範囲をサブネットに設定したら、VM インスタンス コマンドを参照して、範囲を VM に割り当てる方法を確認します。

セカンダリ CIDR 範囲を持つサブネットの作成

このコマンドは、VPC ネットワークがすでに存在することを前提としています。そうでない場合は作成してください。

VM のプライマリ インターフェース用にサブネットを作成しているか、いずれかのセカンダリ インターフェース用にサブネットを作成しているかに関係なく、このコマンドは同じです。

エイリアス IP の割り当てにセカンダリ範囲を使用すると、VM でホストされているサービスの IP スペースを区切ることができ、VM 上で実行されているサービスにのみアクセスを許可し、VM のプライマリ IP アドレスへのアクセスをブロックするファイアウォール ルールを簡単に作成できます。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 既存のネットワークの名前をクリックします。
  3. [サブネットを追加] をクリックします。
  4. 新しいサブネットの名前を入力します。
  5. リージョンを指定します。
  6. IP アドレス範囲を CIDR 表記で入力します。(例: 10.65.61.0/24)
  7. [セカンダリ IP 範囲を作成する] をクリックします。
  8. サブネット範囲名を入力します。
  9. セカンダリ IP 範囲を CIDR 表記で入力します。(例: 10.9.0.0/24)
  10. セカンダリ IP 範囲を追加するには、追加する範囲ごとに [IP 範囲を追加] をクリックし、名前と範囲を入力します。
  11. [追加] をクリックします。

gcloud

    gcloud compute networks subnets create s1 \
        --network NETWORK_NAME \
        --region REGION \
        --range 10.65.61.0/24 \
        --secondary-range RANGE_NAME=RANGE_CIDR,RANGE_NAME=RANGE_CIDR,...
    

ここで

  • NETWORK_NAMEは、サブネットを作成したいネットワークの名前です。
  • REGION は、サブネットを作成するリージョンです。
  • RANGE_NAME=RANGE_CIDR は、エイリアス IP 範囲の設定元となるセカンダリ範囲の名前と、エイリアス IP 範囲です。例: range1=10.9.0.0/24

完全な構文については、gcloud のドキュメントをご覧ください。

API

1 つ以上のセカンダリ範囲を持つサブネットを作成します。

    POST https://www.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",
        "ipCidrRange": "SECONDARY_IP_RANGE"
      },
      {
        "rangeName": "SECONDARY_RANGE_NAME",
        "ipCidrRange": "SECONDARY_IP_RANGE"
      },
      ...]
    }
    

プレースホルダを有効な値に置き換えます。

  • NETWORK_URL は、サブネットが作成される URL または VPC ネットワークです。
  • PRIMARY_IP_RANGE は、サブネットのプライマリ IP アドレス範囲です。
  • PROJECT_ID は、サブネットが作成される VPC ネットワークを含むプロジェクトの ID です。
  • REGION は、サブネットが作成されるリージョンです。
  • SECONDARY_IP_RANGE は、サブネットのセカンダリ IP アドレス範囲です。
  • SECONDARY_RANGE_NAME は、セカンダリ IP アドレス範囲の名前です。
  • SUBNET_NAME はサブネットの名前です。

詳細については、subnetworks.insert メソッドをご覧ください。

セカンダリ CIDR 範囲を既存のサブネットに追加する

この手順では、使用するサブネットをすでに所有し、セカンダリ範囲を追加する必要があることを前提とします。

エイリアス IP の割り当てにセカンダリ範囲を使用すると、VM のプライマリ IP アドレスではなく、VM 上で実行されているサービスへのアクセスを許可するファイアウォール ルールを簡単に作成できます。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 変更するサブネットの名前をクリックして、詳細ページを表示します。
  3. [編集] をクリックします。
  4. [セカンダリ IP 範囲] セクションで、[IP 範囲を追加] をクリックします。
  5. [サブネット範囲の名前] に名前を入力します。
  6. [セカンダリ IP 範囲] の範囲を CIDR 表記で入力します(例: 10.9.0.0/24)。
  7. セカンダリ IP 範囲を追加するには、追加する範囲ごとに [IP 範囲を追加] をクリックし、名前と範囲を入力します。
  8. [保存] をクリックします。

gcloud

    gcloud compute networks subnets update SUBNET_NAME \
        --region REGION \
        --add-secondary-ranges RANGE_NAME=RANGE_CIDR,RANGE_NAME=RANGE_CIDR,...
    

ここで

  • SUBNET_NAME は、セカンダリ範囲を追加するサブネットの名前です。
  • REGION は、サブネットを作成するリージョンです。
  • RANGE_NAME=RANGE_CIDR は、エイリアス IP 範囲の設定元となるセカンダリ範囲の名前と、エイリアス IP 範囲です。例: range1=10.9.0.0/24

完全な構文については、gcloud のドキュメントをご覧ください。

API

セカンダリ範囲を既存のサブネットに追加します。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    {
      "secondaryIpRanges": [
      {
        "rangeName": "SECONDARY_RANGE_NAME",
        "ipCidrRange": "SECONDARY_IP_RANGE"
      },
      {
        "rangeName": "SECONDARY_RANGE_NAME",
        "ipCidrRange": "SECONDARY_IP_RANGE"
      },
      ...],
      "fingerprint": "SUBNETWORK_FINGERPRINT"
    }
    

プレースホルダを有効な値に置き換えます。

  • PROJECT_ID は、変更するサブネットを含むプロジェクトの ID です。
  • REGION は、サブネットが存在するリージョンです。
  • SECONDARY_IP_RANGE は、サブネットのセカンダリ IP アドレス範囲です。
  • SECONDARY_RANGE_NAME は、セカンダリ IP アドレス範囲の名前です。
  • SUBNET_FINGERPRINT は既存のサブネットのフィンガー プリント ID で、サブネットの記述時に指定されます
  • SUBNET_NAME は、変更するサブネットの名前です。

詳細については、subnetworks.patch メソッドをご覧ください。

サブネットからセカンダリ CIDR 範囲を削除する

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 変更するサブネットの名前をクリックして、詳細ページを表示します。
  3. [編集] をクリックします。
  4. [セカンダリ IP 範囲] セクションで、削除するセカンダリ範囲の横にある [X] をクリックします。
  5. [保存] をクリックします。

gcloud

    gcloud compute networks subnets update SUBNET_NAME \
        --region REGION \
        --remove-secondary-ranges RANGE_NAME,RANGE_NAME,...
    

ここで

  • SUBNET_NAME は、セカンダリ範囲を削除するサブネットの名前です。
  • REGION は、サブネットを作成するリージョンです。
  • RANGE_NAME は、エイリアス IP 範囲の設定元となるセカンダリ範囲の名前と、エイリアス IP 範囲です。例: range1=10.9.0.0/24

完全な構文については、gcloud のドキュメントをご覧ください。

API

セカンダリ範囲を除外して削除します。次の例では、既存のサブネットからすべてのセカンダリ範囲を削除しています。

    PATCH https://www.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 アドレスを同じ範囲にする場合は、この手順を使用します。

Console

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. 新しいインスタンスの名前を入力します。
  4. ゾーンを指定します。
  5. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
  6. [ネットワーキング] タブをクリックします。
  7. [ネットワーク インターフェース] セクションのプライマリ インターフェースの横にある編集(鉛筆アイコン)ボタンをクリックします。
  8. [エイリアス IP 範囲を表示] をクリックします。
  9. [サブネット範囲] は [プライマリ] のままにします。
  10. エイリアス IP 範囲を CIDR 表記で入力します。この範囲は、プライマリ範囲の未使用の部分範囲である必要があります。
  11. [作成] をクリックします。

gcloud

    gcloud compute instances create vm1 \
        --zone ZONE \
        --network-interface "subnet=SUBNET_NAME,aliases=RANGE_CIDR;RANGE_CIDR;..."
    

ここで

  • ZONE は、インスタンスを含むゾーンです。
  • SUBNET_NAME は、インスタンスが追加されるサブネットの名前です。
  • RANGE_CIDR は、インターフェースに割り当てるプライマリ サブネットの IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24)、単一の IP アドレス(192.168.100.1)、または CIDR 形式のネットマスク(/24)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り当てられます。複数の範囲を指定するには、範囲をセミコロン(;)で区切ります。

完全な構文については、gcloud のドキュメントをご覧ください。

API

インスタンスのサブネットのプライマリ IP アドレス範囲内のエイリアス IP アドレスを使用してインスタンスを作成します。

    POST https://www.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 上で実行されているサービスへのアクセスを許可するファイアウォール ルールを簡単に作成できます。

Console

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. 新しいインスタンスの名前を入力します。
  4. ゾーンを指定します。
  5. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
  6. [ネットワーキング] タブをクリックします。
  7. [ネットワーク インターフェース] セクションのプライマリ インターフェースの横にある編集(鉛筆アイコン)ボタンをクリックします。
  8. [エイリアス IP 範囲を表示] をクリックします。
  9. セカンダリ範囲があるサブネットワークを選択します。
  10. [サブネットの範囲] で、使用するセカンダリ IP 範囲を選択します。
  11. エイリアス IP 範囲を CIDR 表記で入力します。この範囲は、セカンダリ IP 範囲の未使用範囲である必要があります。
  12. [作成] をクリックします。

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://www.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 インスタンスを作成」ステップまでスキップできます。

Console

最初のネットワークとサブネットを作成します。

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「my-network1」を入力します。
  4. [サブネット作成モード] を「Custom」に設定し、サブネットの [名前] に「my-subnet1」を指定します。
  5. [リージョン] を指定します。
  6. [IP アドレス範囲] を 172.16.1.0/24 に設定します。
  7. [セカンダリ IP 範囲を作成する] をクリックします。
  8. [サブネット範囲の名前] を range1 に設定します。
  9. [セカンダリ IP の範囲] を 10.1.0.0/16 に設定します。
  10. [完了] をクリックします。
  11. [作成] をクリックします。

2 番目のネットワークとサブネットを作成します。

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「my-network2」を入力します。
  4. [サブネット作成モード] を「Custom」に設定し、サブネットの [名前] に「my-subnet2」を指定します。
  5. [リージョン] には、最初のネットワークとサブネットに指定したのと同じものを指定します。
  6. [IP アドレス範囲] を 172.16.2.0/24 に設定します。
  7. [セカンダリ IP 範囲を作成する] をクリックします。
  8. [サブネット範囲の名前] を range2 に設定します。
  9. [セカンダリ IP の範囲] を 10.2.0.0/16 に設定します。
  10. [完了] をクリックします。
  11. [作成] をクリックします。

両方のネットワークにインターフェースを持つ VM を作成します。

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. ゾーンを、サブネットを作成したリージョンに設定します。
  4. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
  5. [ネットワーキング] をクリックします。
  6. 最初のネットワーク インターフェースをクリックします。
  7. [ネットワーク] を my-network1 に設定します。
  8. [サブネットワーク] を my-subnet1 に設定します。
  9. [エイリアス IP 範囲を表示] をクリックします。
  10. [Add Alias IP range] をクリックします。
  11. [サブネットの範囲] を Primary に設定します。
  12. [エイリアス IP 範囲] を /32 に設定します。
  13. [IP の範囲を追加] をクリックします。
  14. [サブネットの範囲] を range1 に設定します。
  15. [エイリアス IP 範囲] を /24 に設定します。
  16. [完了] をクリックします。
  17. [ネットワーク インターフェースを追加] をクリックします。
  18. [my-network2] を選択します。
  19. [サブネットワーク] を my-subnet2 に設定します。
  20. [エイリアス IP 範囲を表示] をクリックします。
  21. [Add Alias IP range] をクリックします。
  22. [サブネットの範囲] を Primary に設定します。
  23. [エイリアス IP 範囲] を /32 に設定します。
  24. [IP の範囲を追加] をクリックします。
  25. [サブネットの範囲] を range2 に設定します。
  26. [エイリアス IP 範囲] に「/24」と入力します。
  27. [完了] をクリックします。
  28. [作成] をクリックします。

gcloud

  1. 最初のネットワークを作成します。

        gcloud compute networks create my-network1 --subnet-mode CUSTOM
        
  2. サブネットを追加します。

        gcloud compute networks subnets create my-subnet1 \
            --network my-network1 \
            --range 172.16.1.0/24 \
            --secondary-range range1=10.1.0.0/16
        
  3. 2 番目のネットワークを作成します。

        gcloud compute networks create my-network2 --subnet-mode CUSTOM
        
  4. サブネットを追加します。

        gcloud compute networks subnets create my-subnet2 \
            --network my-network2 \
            --range 172.16.2.0/24 \
            --secondary-range range2=10.2.0.0/16
        
  5. 両方のネットワークにインターフェースを持つ 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"
        
  6. 表示コマンドを使用して、インターフェースとそのアドレスを確認します。

        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

  1. my-network1my-network2 という 2 つのカスタムモード VPC ネットワークを作成します。詳細は、カスタムモード ネットワークの作成をご覧ください。

  2. サブネットを VPC ネットワークに追加します。詳細は、サブネットの追加をご覧ください。

    1. my-subnet1 というサブネットを my-network1 に追加します。プライマリ範囲には 172.16.1.0/24 を、range1 という名前のセカンダリ範囲には 10.1.0.0/16 を指定します。

    2. my-subnet2 というサブネットを my-network2 に追加します。プライマリ範囲には 172.16.2.0/24 を、range2 という名前のセカンダリ範囲には 10.2.0.0/16 を指定します。

  3. 両方のネットワークにインターフェースを持つ VM インスタンスを作成します。

        POST https://www.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 範囲を追加できます。

Console

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. 既存のインスタンスの名前をクリックします。
  3. [編集] をクリックします。
  4. ネットワーク インターフェース [nic0](または変更するネットワーク インターフェース)をクリックします。
  5. [エイリアス IP 範囲を表示] をクリックします。
  6. [IP の範囲を追加] をクリックします。
  7. サブネットの範囲を選択します。
  8. エイリアス IP 範囲を入力します。
  9. [完了] をクリックします。
  10. [保存] をクリックします。

gcloud

    gcloud compute instances network-interfaces update INSTANCE_NAME \
        --zone ZONE \
        [--network-interface NETWORK_INTERFACE; default="nic0"]
        --aliases "RANGE_NAME:RANGE_CIDR,RANGE_NAME:RANGE_CIDR,..."
    
  • ZONE は、インスタンスを含むゾーンです。
  • NETWORK_INTERFACE は、エイリアス IP アドレス範囲の追加先となるネットワーク インターフェースの名前です。
  • RANGE_NAME は、エイリアス IP 範囲の取得元となるサブネット セカンダリ範囲の名前です。サブネットのプライマリ範囲から範囲を割り当てる場合は、この値を省略します。
  • RANGE_CIDR は、インターフェースに割り当てる IP 範囲です。この範囲には、特定の範囲(192.168.100.0/24)、単一の IP アドレス(192.168.100.1)、または CIDR 形式のネットマスク(/24)を指定できます。この IP 範囲をネットマスクのみで指定した場合は、指定されたネットマスクで使用可能な範囲が IP アロケータによって選択され、ネットワーク インターフェースに割り当てられます。

完全な構文については、gcloud のドキュメントをご覧ください。

API

エイリアス IP 範囲を既存のインスタンスに追加します。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/multinic/updateNetworkInterface?networkInterface=NETWORK_INTERFACE_NAME
    {
      "aliasIpRanges": [
        {
          "ipCidrRange": "SECONDARY_IP_RANGE",
          "subnetworkRangeName": "SECONDARY_RANGE_NAME"
        },
        existing ranges...
      ],
      "fingerprint": "INTERFACE_FINGERPRINT"
    }
    

プレースホルダを有効な値に置き換えます。

  • PROJECT_ID は、変更するインスタンスを含むプロジェクトの ID です。
  • 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 範囲を追加したり、範囲を削除したりできます。

Console

  1. Google Cloud Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. 既存のインスタンスの名前をクリックします。
  3. [編集] をクリックします。
  4. ネットワーク インターフェース [nic0](または変更するネットワーク インターフェース)をクリックします。
  5. [エイリアス IP 範囲を表示] をクリックします。
  6. エイリアス IP 範囲を追加するには、[Add Alias IP range] をクリックします。
  7. エイリアス IP 範囲を削除するには、そのエイリアス IP 範囲の横にある [X] をクリックします。
  8. [完了] をクリックします。
  9. [保存] をクリックします。

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:CURRRENT_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:CURRRENT_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 コマンドで範囲の追加と削除を行うことはできません。gcloud コマンドライン インターフェースを使用して一部の範囲を削除した後に、他の範囲を追加するには、まずこのコマンドを実行して不要な範囲を削除してから、再度このコマンドを実行して必要な範囲を追加します。

完全な構文については、gcloud のドキュメントをご覧ください。

API

既存のインスタンスのネットワーク インターフェースの場合は、エイリアス IP アドレス範囲を追加または削除します。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/multinic/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 です。
  • NETWORK_INTERFACE_NAME は、変更するインスタンスのネットワーク インターフェースの名前です。
  • INTERFACE_FINGERPRINT は、既存のネットワーク インターフェースのフィンガー プリント ID で、インスタンスの記述時に指定されます。

詳細については、instance.updateNetworkInterface メソッドをご覧ください。

トラブルシューティング

エイリアス IP のある VM インスタンスを作成できない

  1. ネットワークが VPC ネットワークであることを確認します。エイリアス IP は、レガシー ネットワークではサポートされません。

        gcloud compute networks list --filter="name=NETWORK_NAME"
        

    ネットワーク MODE は、「auto」か「custom」である必要があります。

  2. サブネット範囲の名前が指定されている場合、次の点を確認します。

        gcloud compute networks subnets describe SUBNET_NAME --region=REGION
        
    • サブネットのセカンダリ範囲に対応する名前があること
    • リクエストしたエイリアス IP 範囲がこのセカンダリ範囲内にあるか、プライマリ範囲よりも小さい(ネットマスクを使用している場合)こと
  3. サブネット範囲の名前が指定されていない場合は、リクエストしたエイリアス IP 範囲が、プライマリ サブネット範囲内にあるか、プライマリ範囲よりも小さいこと(ネットマスクを使用している場合)を確認します。

エイリアス IP に接続できない

  1. ファイアウォール ルールを確認します。

    1. すべてのファイアウォール ルールを一覧表示します。

          gcloud compute firewall-rules list --format=json
          
    2. エイリアス IP との間のトラフィックが許可されていることを確認します。

    3. 必要に応じて、エイリアス 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
          
  2. VM が IP エイリアス範囲をローカルとして認識していることを確認します。Debian などの Linux ディストリビューションでは、これは通常以下の手順で行うことができます。

    1. インスタンスに接続し、次のコマンドを実行します。

          ip route show table local
          

      出力に次の内容が含まれているはずです。

          local ALIAS_IP_RANGE dev eth0  proto 66  scope host
          
    2. /etc/default/instance_configs.cfgip_alias = true が含まれていることを確認します。これを変更する必要がある場合は、ルーティング デーモンも再起動する必要があります。

          service google-ip-forwarding-daemon restart
          
    3. ローカルルートが存在しない場合は、次のコマンドを使用して構成します。

          ip route add to local ALIAS_IP_RANGE dev eth0 proto 66
          

セカンダリ IP 範囲が一覧表示されない

セカンダリ IP 範囲は通常のサブネットとして一覧表示されません。サブネットのセカンダリ IP 範囲が作成されたことを確認するには、gcloud compute networks subnets describe コマンドを実行します。

  1. サブネットを作成します。

        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
        
  2. サブネットを一覧表示します。

        gcloud compute networks subnets list
        
        NAME       REGION       NETWORK     RANGE
        my-subnet  us-central1  my-network  10.9.0.0/16
        
  3. サブネットの詳細を取得して、セカンダリ範囲を確認します。

        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 を作成していること

次のコマンドを実行すると、このエラーが表示されます。

  1. セカンダリ範囲のサブネットを作成します。

        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
        
  2. 新しく作成したサブネット内でなく、デフォルト ネットワークなどの別のネットワークにインスタンスを作成します。

        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
        
  3. 手順 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.
        
  4. 手順 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
        
  5. エイリアス 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=RANGE_CIDR,RANGE_NAME=RANGE_CIDR,...
    
    gcloud compute networks subnets update  SUBNET_NAME \
        --remove-secondary-ranges RANGE_NAME,RANGE_NAME,...
    

このコマンドの詳細を表示するには、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 の追加として解釈されるため、拒否されます。新しい範囲を追加するには、まず既存の範囲を削除する必要があります。

例:

  1. エイリアス IP 範囲を作成します。

        gcloud compute instances create vm --network-interface "subnet=s1,aliases=10.9.27.0/24"
        
  2. 既存の範囲を指定せずに /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.
        
  3. VM を更新してエイリアス IP 範囲をなくします。

        gcloud compute instances network-interfaces update vm --aliases ""
        Updating network interface [nic0] of instance [vm]...done.
        
  4. 新しいエイリアス 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 に関する問題

複数のインターフェースに関するトラブルシューティングをご覧ください。

GCP イメージで IP エイリアスを有効にすると、自己管理型 Kubernetes クラスタで cbr0 ブリッジが無効になる

Kubernetes クラスタでは、cbr0ALIAS_IP_RANGE ローカルルートと競合して無効となり、Pod がネットワーク接続を失います。

そのため、このルートは GKE のコンテナ最適化 OS イメージで無効になります。

Google Cloud で提供されているイメージを使用してエイリアス IP を自己管理クラスタで使用する場合は、このルートを除外する手順を実行する必要があります。

症状:

  • この競合が発生すると、Kubernetes Pod がネットワークにアクセスできなくなります。

  • Pod が送信接続の確立を試みる間に Linux ブリッジ デバイスでのパケット キャプチャ(tcpdump -ni cbr arp)が実行されると、ARP を使用してゲートウェイの MAC アドレスをリクエストしている Pod が表示されます。cbr0 ゲートウェイは稼働していますが、ARP 応答を発行しません。

  • ip route show table local を実行すると eth0ALIAS_IP_RANGE が表示されます。

修正:

  • 影響を受けるノードの /etc/default/instance_configs.cfgip_forwarding_daemon = false を設定します。これにより、削除後にルートが再インストールされるのを防ぐことができます。

  • IP 転送デーモンを再起動します: service google-ip-forwarding-daemon restart

  • 既存ルートを手動で削除します: sudo ip route del local ALIAS_IP_RANGE dev eth0

次のステップ