Dataproc クラスタ ネットワークの構成

概要

Dataproc クラスタ内の Compute Engine 仮想マシン インスタンスは、マスター VM とワーカー VM で構成され、ICMP、TCP(すべてのポート)および UDP(すべてのポート)を使用して相互に通信できる必要があります。

ファイアウォール ルールの要件

Dataproc では、次の特性を持つ上り(内向き)許可ファイアウォール ルールを作成する必要があります。

  • sources パラメータは、パケットの送信元として IP アドレスの範囲を指定します。Dataproc では、クラスタ内のすべての VM が相互に通信できなければなりません。クラスタ内の VM は、VM に接続されている VPC ネットワーク、ソースタグ、またはサービス アカウントで確認できます。送信元 IP 範囲の指定を省略した場合、ファイアウォール ルールは送信元として範囲 0.0.0.0/0(任意の IP アドレス)を使用します。 Dataproc VM に外部 IP アドレスがある場合は、インターネット上のどこからでもトラフィックを受け入れることができます。したがって、できる限りニーズに合わせて送信元を限定するように定義し、クラスタを保護する必要があります

  • ルールのターゲットは、クラスタの VM を識別する必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、ターゲットタグやターゲット サービス アカウントを使用して特定のターゲット VM を特定することもできます。

  • このルールには、プロトコルとポートの TCP(すべてのポート、0~65535)、UDP(すべてのポート、0~65535)、ICMP を含める必要があります。Dataproc は、複数のポートでサービスを実行し、すべてのポートを指定すると、サービスが正常に実行されるようになります。

デフォルトの Dataproc ファイアウォール ルールの概要

Dataproc はデフォルトの VPC ネットワークを使用します。デフォルトの VPC ネットワークが指定されていない場合は、カスタム VPC を作成する必要があります。カスタム VPC ネットワークを作成するには、自動モードまたはカスタムモードのどちらかで VPC ネットワークを作成します。

デフォルト ネットワークを使用している場合は、事前入力済みの default-allow-internal ファイアウォール ルールがあり、VPC ネットワーク上のすべての VM からの 10.128.0.0/9 送信元の範囲で上り(内向き)を許可します(より制限されたファイアウォール ルールの作成については、ファイアウォール ルールの要件をご覧ください)。この事前入力されているファイアウォール ルールを削除するか、デフォルト ネットワーク以外の VPC ネットワークを使用すると、上り(内向き)トラフィックが暗黙の上り拒否ルールによってブロックされます。そのような状況では、クラスタ内のインスタンスのすべての TCP ポートと UDP ポートへのトラフィックを許可する上り(内向き)許可ファイアウォール ルールを作成する必要があります。ネットワーク管理者またはセキュリティ管理者に詳細な情報が必要な場合は、ファイアウォール ルールの概要をご覧ください。

カスタム VPC ネットワークの作成

Dataproc クラスタを作成するときに、独自の Virtual Private Cloud(VPC)ネットワークを指定できます。この操作を行う前に、ファイアウォール ルールが適用された VPC ネットワークを作成しておく必要があります。その上でクラスタを作成し、このネットワークをクラスタに関連付けます。

VPC ネットワークの作成

Cloud Console から、または gcloud compute networks create コマンドライン ツールを使用して、VPC ネットワークを作成できます。作成できるのは、自動モードの VPC ネットワークまたはカスタムモードの VPC ネットワーク(以下それぞれ「自動」および「カスタム」ネットワークと呼びます)です。自動ネットワークには、各 Compute Engine リージョンでサブネットが自動的に構成されます。カスタム ネットワークでは、サブネットが自動的には構成されません。カスタム ネットワークの作成時に、1 つ以上の Compute Engine リージョンに 1 つ以上のサブネットを作成する必要があります。詳細については、VPC ネットワークの種類をご覧ください。

Cloud Console から自動およびカスタム ネットワークを作成する際に利用できるオプションを見てみましょう。

自動

次の Cloud Console のスクリーンショットは、サブネットワークの自動作成時(自動モード VPC ネットワーク)に入力される Cloud Console の項目です。1 つ以上のファイアウォール ルールを選択する必要があります。ネットワーク内の VM インスタンス間で完全な内部 IP ネットワーク アクセスを可能にするには、udp:0-65535;tcp:0-65535;icmp ポートを開く network-name-allow-internal ルールを選択する必要があります。また、network-name-allow-ssh ルールを選択して標準の SSH ポート 22 を開き、ネットワークへの SSH 接続を許可することもできます。

カスタム

ネットワークの作成時にカスタム サブネットワークを選択した場合(カスタムモード VPC ネットワーク)、サブネットワークごとにリージョンとプライベート IP アドレス範囲を指定する必要があります。ネットワーク内の VM 間で完全な内部アクセスを可能にするには、10.0.0.0/8の IP アドレス範囲を指定します。必要であれば、10.128.0.0/16 のように、より制限された範囲を使用します。

カスタム サブネットワークのファイアウォール ルールは、ネットワークを作成したに適用してください。前述のとおり、ネットワーク内の VM 間で完全なネットワーク アクセスを可能にするには、udp:0-65535;tcp:0-65535;icmp ポートを開くファイアウォール ルールを選択または作成します(以下の Cloud Console のスクリーンショットをご覧ください)。

VPC ネットワークを使用するクラスタの作成

gcloud コマンド

‑‑network フラグまたは ‑‑subnet フラグを指定して Cloud SDK の gcloud dataproc clusters create コマンドを使用すると、自動サブネットワークまたはカスタム サブネットワークを使用するクラスタを作成できます。

‑‑network フラグの使用
‑‑network フラグを使用すると、クラスタが作成されるリージョンのネットワークと同じ名前のサブネットワークを使用するクラスタを作成できます。

gcloud dataproc clusters create my-cluster \
    --network network-name \
    --region=region \
    ... other args ...

たとえば、自動ネットワークの作成時には、各リージョンで自動ネットワークと同じ名前のサブネットワークも作成されるため、自動ネットワーク名を ‑‑network フラグ(‑‑network auto-net-name)に渡して、クラスタのリージョンで自動サブネットワークを使用するクラスタを作成できます。

‑‑subnet フラグの使用
‑‑subnet フラグを使用すると、クラスタが作成されるリージョンで自動サブネットワークまたはカスタム サブネットワークを使用するクラスタを作成できます。‑‑subnet フラグには、クラスタが使用するサブネットの完全なリソースパスを渡す必要があります。

gcloud dataproc clusters create cluster-name \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

clusters.create リクエストの一部として networkUri or subnetworkUri GceClusterConfig 項目を指定できます。

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b"
    },
    ...

Console

VM にネットワークのプライベート IP アドレス範囲への完全アクセスを許可するファイアウォール ルールを持つ VPC ネットワークを作成すると、Cloud Console で Dataproc の [クラスタを作成する] ページからクラスタを作成できます。[クラスタのカスタマイズ] パネルの [ネットワークの構成] セクションで、プライマリ ネットワークを選択します。ネットワークを選択すると、[サブネットワーク] セレクタに、クラスタの作成対象として選択したリージョン内で使用可能なサブネットワークが表示されます。

別のプロジェクトでの VPC ネットワークを使用するクラスタの作成

Dataproc クラスタは、サービス プロジェクトとして参加することで、共有 VPC ネットワークを使用できます。共有 VPC では、共有 VPC ネットワークは、ホスト プロジェクトと呼ばれる別のプロジェクトで定義されます。ホスト プロジェクトは、IAM メンバーが接続されたサービス プロジェクトで使用できるようになっています。背景情報については、共有 VPC の概要をご覧ください。

プロジェクト内に Dataproc クラスタを作成します。共有 VPC シナリオでは、このプロジェクトはサービス プロジェクトになります。このプロジェクトのプロジェクト番号を参照する必要があります。プロジェクト番号を探す方法の 1 つは次のとおりです。

  1. [IAM と管理] ページの [設定] タブに移動します。

  2. ページの上部にあるプロジェクトのプルダウン リストから、Dataproc クラスタの作成に使用するプロジェクトを選択します。

  3. プロジェクト番号を書き留めます。

共有 VPC 管理者と IAM である IAM メンバーは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。

  1. 共有 VPC ホスト プロジェクトが有効になっていることを確認します。

  2. ホスト プロジェクトに Dataproc プロジェクトを接続します

  3. ホスト プロジェクトのネットワーク ユーザー役割を持つように、次のサービス アカウントのいずれかまたは両方を構成します。Dataproc は最初のサービス アカウントを使用しようとしますが、必要に応じて Google API サービス アカウントにフォールバックします

  4. [IAM と管理] ページの [IAM] タブに移動します。

  5. ページの上部にあるプロジェクト プルダウン リストを使用して、ホスト プロジェクトを選択します。

  6. [追加] をクリックします。両方のサービス アカウントを追加するには、次の手順を繰り返します。

    1. [メンバー] 項目にサービス アカウントを追加します。

    2. [役割] メニューから [Compute Engine] > [Compute ネットワーク ユーザー] を選択します。

    3. [追加] をクリックします。

両方のサービス アカウントにホスト プロジェクトのネットワーク ユーザー役割が設定されたら、VPC ネットワークを使用するクラスタを作成できます。

内部 IP アドレスのみで Dataproc クラスタを作成する

公開のインターネットから隔離された Dataproc クラスタを作成できます。このクラスタでは、VM インスタンスはプライベート IP サブネットワーク経由で通信します(VM インスタンスにはパブリック IP アドレスは設定されません)。これを行うには、クラスタノードが内部 IP から Cloud Storage などの Google API やサービスにアクセスできるように、クラスタのサブネットワークで限定公開の Google アクセスを有効にする必要があります。

gcloud コマンド

‑‑no-address フラグを指定した gcloud dataproc clusters create コマンドを使用するだけで、内部 IP アドレスを持つ Cloud Dataproc クラスタを作成できます。

‑‑no-address フラグと ‑‑network フラグの使用
‑‑no-address フラグと ‑‑network フラグを使用すると、クラスタが作成されるリージョンのネットワークと同じ名前のサブネットワークを使用するクラスタを作成できます。

gcloud dataproc clusters create my-cluster \
    --no-address \
    --network network-name \
    --region=region \
    ... other args ...

たとえば、自動ネットワークの作成時には、各リージョンで自動ネットワークと同じ名前のサブネットワークも作成されるため、自動ネットワーク名を ‑‑network フラグ(‑‑network auto-net-name)に渡して、クラスタのリージョンで自動サブネットワークを使用するクラスタを作成できます。

‑‑no-address フラグと ‑‑subnet フラグの使用
‑‑no-address フラグと ‑‑subnet フラグを使用すると、クラスタが作成されるリージョンで自動サブネットワークまたはカスタム サブネットワークを使用するクラスタを作成できます。‑‑subnet フラグには、クラスタが使用するサブネットの完全なリソースパスを渡す必要があります。

gcloud dataproc clusters create cluster-name \
    --no-address \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

clusters.create リクエストの一部として GceClusterConfiginternalIpOnly 項目を「true」に設定して、内部 IP アドレスのみを有効にできます。

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b",
      "internalIpOnly": true
    },
    ...

Console

Cloud Console で Dataproc の [クラスタの作成] ページから、限定公開の Google アクセスが有効な Dataproc クラスタを作成できます。[クラスタのカスタマイズ] パネルで [内部 IP のみ] をクリックして、クラスタでこの機能を有効にします。

デフォルトでは、内部 IP のみのクラスタはインターネットにアクセスできないため、インターネットから依存関係をダウンロードするジョブ(たとえば Maven Central から Spark 依存関係パッケージのダウンロードを行うジョブ)は失敗します。この問題を回避するための回避策がいくつかあります。

  1. Cloud NAT を使用して、クラスタがインターネットにアクセスできるようにします。

  2. 依存関係を含むカスタム イメージを作成します(たとえば、/usr/lib/spark/jars/ の Spark 依存関係パッケージ)。

  3. Cloud Storage バケットへの依存関係をアップロードし、クラスタの作成時に初期化アクションを使用してバケットから依存関係をダウンロードします。

Dataproc ネットワークと VPC-SC ネットワーク

VPC Service Controls を使用すると、Google マネージド サービスのリソースにセキュリティ境界を定義し、これらのサービス間の通信を制御できます。

Dataproc クラスタで VPC-SC ネットワークを使用する際の制限事項と戦略に注意してください。