Google Dataproc クラスタにデフォルトで組み込まれる Apache Hadoop、Apache Spark などの一部のオープンソース コンポーネントには、ウェブ インターフェースが備わっています。こうしたインターフェースを使用すると、YARN リソース マネージャー、Hadoop 分散ファイル システム(HDFS)、MapReduce、Spark などのクラスタ リソースと機能を管理およびモニタリングできます。コンポーネント ゲートウェイを使用すると、Dataproc のデフォルト コンポーネントとオプション コンポーネントのウェブ エンドポイントへ安全にアクセスできます。
サポートされている Dataproc イメージ バージョンで作成されたクラスタでは、内向きトラフィックを許可するために SSH トンネルへの依存や、ファイアウォール ルールの変更を行うことなく、コンポーネントのウェブ インターフェースへのアクセスを有効にできます。
考慮事項
- コンポーネントのウェブ インターフェースには、IAM の dataproc.clusters.use 権限を付与されたユーザーがアクセスできます。Dataproc のロールをご覧ください。
- コンポーネント ゲートウェイを使用して REST API(Apache Hadoop YARN、Apache Livy など)や履歴サーバーにアクセスすることができます。
- コンポーネント ゲートウェイが有効になっている場合、Dataproc はクラスタの最初のマスターノードに次のサービスを追加します。
- Apache Knox。デフォルトの Knox ゲートウェイ SSL 証明書は、クラスタの作成日から 13 か月間有効です。期限切れになると、すべてのコンポーネント ゲートウェイのウェブ インターフェース URL が非アクティブになります。新しい証明書を取得するには、コンポーネント ゲートウェイの SSL 証明書を再生成する方法をご覧ください。
- Inverting Proxy
- コンポーネント ゲートウェイは、
node:port
インターフェースへの直接アクセスを有効にしませんが、サービスの特定のサブセットを自動的にプロキシします。ノード(node:port
)上のサービスにアクセスする必要がある場合は、SSH SOCKS プロキシを使用します。
コンポーネント ゲートウェイを使用してクラスタを作成する
Console
Google Cloud コンソールを使用してクラスタを作成すると、デフォルトで Dataproc コンポーネント ゲートウェイが有効になります。この設定を無効にするには、Dataproc の [Compute Engine で Dataproc クラスタを作成する] ページ の [クラスタの設定] パネルにある [コンポーネント] セクションで [コンポーネント ゲートウェイを有効にする] チェックボックスをオフにします。
gcloud コマンド
gcloud CLI のgcloud dataproc clusters create コマンドをターミナル ウィンドウでローカルに、または Cloud Shell で実行します。
gcloud dataproc clusters create cluster-name \ --enable-component-gateway \ --region=region \ other args ...
REST API
clusters.create リクエストの一部として EndpointConfig.enableHttpPortAccess プロパティを true
に設定します。
コンポーネント ゲートウェイの URL を使用してウェブ インターフェースにアクセスする
クラスタでコンポーネント ゲートウェイが有効になっている場合、Google Cloud コンソール上のリンクをクリックして、クラスタの最初のマスターノードで実行されているコンポーネント ウェブ インターフェースに接続できます。また、コンポーネント ゲートウェイでは、endpointConfig.httpPorts に URL へのポート名のマップが設定されます。コンソールを使用する代わりに、gcloud
コマンドライン ツールや Dataproc REST API を使用してこのマッピング情報を表示し、URL をコピーしてブラウザに貼り付けて、コンポーネントの UI に接続できます。
Console
Google Cloud コンソールで Dataproc の [クラスタ] フォームに移動し、クラスタを選択して [クラスタの詳細] フォームを開きます。[ウェブ インターフェース] タブをクリックすると、クラスタにインストールされているデフォルト コンポーネントとオプション コンポーネントのウェブ インターフェースへのコンポーネント ゲートウェイ リンクのリストが表示されます。いずれかのコンポーネントのリンクをクリックすると、クラスタのマスターノード上で実行されているそのコンポーネントのウェブ インターフェースがローカル ブラウザ内に開きます。
gcloud コマンド
gcloud CLI のgcloud dataproc clusters describe コマンドをターミナル ウィンドウでローカルに、または Cloud Shell で実行します。
gcloud dataproc clusters describe cluster-name \ --region=region
出力例:
... config: endpointConfig: enableHttpPortAccess: true httpPorts: HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/ MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/ Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/ YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/ YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/ ...
REST API
URL へのポート名の endpointConfig.httpPorts マップを取得するには、clusters.get を呼び出します。VPC-SC でのコンポーネント ゲートウェイの使用
コンポーネント ゲートウェイでは、VPC Service Controls がサポートされます。サービス境界の適用では、コンポーネント ゲートウェイを介したインターフェースへのリクエストは Dataproc API サーフェスの一部として処理され、dataproc.googleapis.com
の権限を制御するアクセス ポリシーでもコンポーネント ゲートウェイ UI へのアクセスが制御されます。
また、コンポーネント ゲートウェイでは、外部 IP アドレスがない Dataproc クラスタへのプライベート Google 接続に依存する VPC-SC 構成もサポートされていますが、次のように、制限された Google 仮想 IP 範囲 199.36.153.4/30
を介して Dataproc マスター VM から *.dataproc.cloud.google.com
へのアクセスを許可するようにネットワークを手動で構成する必要があります。
- 手順に従って、すべての Google API に対して、プライベート Google 接続を構成します。
- Cloud DNS によって DNS を構成するか、Dataproc マスターノードでローカルに DNS を構成して、
*.dataproc.cloud.google.com
へのアクセスを許可します。
Cloud DNS によって DNS を構成する
*.dataproc.cloud.google.com
を宛先とするトラフィックを、制限付きの Google API 仮想 IP 範囲にマッピングする Cloud DNS ゾーンを作成します。
VPC ネットワーク用の非公開マネージド ゾーンを作成します。
gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \ --description=DESCRIPTION \ --dns-name=dataproc.cloud.google.com \ --project=PROJECT_ID
ZONE_NAME は、作成するゾーンの名前です。例:
vpc
。このゾーン名は、次の各ステップで使用されます。PROJECT_ID は、VPC ネットワークをホストするプロジェクトの ID です。
NETWORK_NAME は VPC ネットワークの名前です。
DESCRIPTION は、人間が読める形式のマネージド ゾーンの説明です。これは指定しなくても構いません。
トランザクションを開始します。
gcloud dns record-sets transaction start --zone=ZONE_NAME
- ZONE_NAME は、ゾーン名です。
DNS レコードを追加します。
gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300
- ZONE_NAME は、ゾーン名です。
gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300
- ZONE_NAME は、ゾーン名です。
トランザクションを実行します。
gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
ZONE_NAME は、ゾーン名です。
PROJECT_ID は、VPC ネットワークをホストするプロジェクトの ID です。
初期化アクションで Dataproc マスターノードでローカルに DNS を構成する
dataproc.cloud.google.com
へのプライベート接続を許可するように Dataproc マスターノードでローカルに DNS を構成できます。この手順は、短期的なテストと開発を目的としています。本番環境ワークロードでの使用は推奨されません。
初期化アクションを Cloud Storage にステージングします。
cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh #!/bin/bash readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)" if [[ "${ROLE}" == 'Master' ]]; then readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \ "/etc/google-dataproc/dataproc.properties" | \ tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g') readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \ sed -n -E 's;^https://([^/?#]*).*;\1;p') echo "199.36.153.4 ${HOSTNAME} # Component Gateway VPC-SC" >> "/etc/hosts" fi EOF gcloud storage cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
- BUCKET は、Dataproc クラスタからアクセスできる Cloud Storage バケットです。
初期化アクションがステージングされ、コンポーネント ゲートウェイが有効になっている Dataproc クラスタを作成します。
gcloud dataproc clusters create cluster-name \ --region=region \ --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \ --enable-component-gateway \ other args ...
- BUCKET は、上記の手順 1 で使用した Cloud Storage バケットです。
コンポーネント ゲートウェイを介して HTTP API をプログラムでの使用する
コンポーネント ゲートウェイは、Apache Knox が組み込まれているプロキシです。Apache Knox によって公開されるエンドポイントは、https://component-gateway-base-url/component-path
を介して利用できます。
コンポーネント ゲートウェイを使用してプログラムで認証するには、ヘッダー Proxy-Authorization
に OAuth 2.0 署名なしトークンを渡します。
$ ACCESS_TOKEN="$(gcloud auth print-access-token)"
$ curl -H "Proxy-Authorization: Bearer ${ACCESS_TOKEN}" "https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/jmx"
{
"beans" : [ {
"name" : "Hadoop:service=ResourceManager,name=RpcActivityForPort8031",
"modelerType" : "RpcActivityForPort8031",
"tag.port" : "8031",
"tag.Context" : "rpc",
"tag.NumOpenConnectionsPerUser" : "{\"yarn\":2}",
"tag.Hostname" : "demo-cluster-m",
"ReceivedBytes" : 1928581096,
"SentBytes" : 316939850,
"RpcQueueTimeNumOps" : 7230574,
"RpcQueueTimeAvgTime" : 0.09090909090909091,
"RpcProcessingTimeNumOps" : 7230574,
"RpcProcessingTimeAvgTime" : 0.045454545454545456,
...
コンポーネント ゲートウェイは、リクエストを Apache Knox に転送する前に Proxy-Authorization
ヘッダーを削除します。
コンポーネント ゲートウェイのベース URL を確認するには、次の gcloud dataproc clusters describe
を実行します。
$ gcloud dataproc clusters describe <var>cluster-name</var> \
--region=<var>region</var>
...
endpointConfig:
enableHttpPortAccess: true
httpPorts:
HDFS NameNode: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/hdfs/dfshealth.html
MapReduce Job History: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/jobhistory/
Spark History Server: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/sparkhistory/
Tez: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/tez-ui/
YARN Application Timeline: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/
YARN ResourceManager: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/
...
ベース URL は、httpPorts
の下にある URL のスキームと認証の部分です。この例では、https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/
です。
コンポーネント ゲートウェイの SSL 証明書を再生成する方法
コンポーネント ゲートウェイのデフォルトの Knox ゲートウェイ SSL 証明書は、次の期間に有効です。
イメージ バージョン 2.0.93、2.1.41、2.2.7 以降を使用して作成されたクラスタの場合、Dataproc クラスタの作成日から 5 年間。
以前のイメージ バージョンを使用して作成されたクラスタの場合、Dataproc クラスタの作成日から 13 か月。
証明書が期限切れになると、すべてのコンポーネント ゲートウェイのウェブ インターフェース URL が非アクティブになります。
SSL 証明書が組織から提供されている場合は、その組織から新しい証明書を取得し、古い証明書を新しい証明書に置き換えます。
デフォルトの自己署名 SSL 証明書を使用している場合は、次のように更新します。
SSH を使用して、
m-0
名サフィックスを持つ Dataproc クラスタ マスターノードに接続します。/var/lib/knox/security/keystores/gateway.jks
パスでgateway.jks
を見つけます。keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
gateway.jks
ファイルをバックアップ ディレクトリに移動します。mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
Knox サービスを再起動して、新しい自己署名証明書を作成します。
systemctl restart knox
コンポーネント ゲートウェイと Knox のステータスを確認します。
systemctl status google-dataproc-component-gateway systemctl status knox
次のステップ
- Dataproc コンポーネントがあるクラスタを作成します。