Azure Databricksワークスペースを自分の仮想ネットワークにデプロイする場合(VNetインジェクション)、Azure提供のDNSではなくカスタムDNSサーバーを使うようにVNetを設定できます。 カスタムDNSは、ワークスペースがオンプレミスのホスト名を解決したり、ハブ・アンド・スポークトポロジーで集中型DNSフォワーダーを使用したり、DNSレベルのフィルタリングを適用したりする場合に一般的です。
カスタムDNSは名前解決のコントロールを可能にしますが、同時に名前解決の責任もあなたに課せます。 カスタムDNSサーバーがクラシックコンピュートに必要な名前を解決できない場合、クラスターは起動できず、外部データソースやライブラリリポジトリへのアウトバウンド接続が失われます。 この記事では、VNet注入ワークスペースに推奨されるカスタムDNS構成、最も一般的な誤設定、そしてそれらのトラブルシューティング方法について説明します。
Note
カスタムDNSはVNetインジェクトされたワークスペース内の クラシックなコンピュートプレーン に適用されます。 サーバーレスコンピュートはAzure Databricksネットワーク上で動作し、VNetのDNS設定は使いません。
Azure DatabricksがVNetインジェクトされたワークスペースでDNSを使用する方法
クラシックなコンピュートノードは、VNetのコンテナ(プライベート)とホスト(パブリック)サブネットで動作します。 クラスタの立ち上げと運用中、これらのノードは複数のAzure DatabricksおよびAzureエンドポイントを解決し、アクセスしなければなりません。 Secure Cluster Connectivity(SCC)が有効の場合、各クラスタはクラスタ作成時に制御プレーンのSCCリレーへのアウトバウンド接続を開くため、名前解決が成功しなければクラスターが起動できません。
クラシック計算が依存するエンドポイントには以下が含まれます:
| エンドポイント | どうやって到達したか |
|---|---|
| Azure Databricks コントロール プレーンと Web アプリケーション | 地域IP範囲は AzureDatabricks サービスタグで表されます |
| セキュアクラスタ接続(SCC)リレー | 完全適格ドメイン名(FQDN) tunnel.<region>.azuredatabricks.net |
| レガシーハイブメタストア | consolidated-<region>-prod-metastore.mysql.database.azure.com |
| ワークスペースルート(DBFS)ストレージ | ワークスペースストレージアカウントの dfs と blob エンドポイント |
| アーティファクトとログのブロブ保存 |
dbartifactsprod<region>.blob.core.windows.net、dblogprod<region>.blob.core.windows.net |
| イベント ハブ (ログ) | prod-<region>-observabilityeventhubs.servicebus.windows.net |
| 外部データソースおよびライブラリリポジトリ | PyPI、Maven、CRAN リポジトリなどの公開DNS名 |
Classic Computeは顧客向けのホスト名ではなく、地域IP範囲を通じて制御プレーンやWebアプリケーションに到達するため、Azure Databricksはルートテーブル、ネットワークセキュリティグループ、ファイアウォールのAzureDatabricksサービスタグで許可リストに登録することを推奨します。 パロアルトのようなファイアウォールはAzureサービスタグを消費できません。 その場合は、代わりに参照リストにある元の IP アドレス範囲を許可リストに追加してください。
AzureDatabricksサービスタグはすでにSCCリレーをカバーしています。 サービスタグの代わりに特定のIPアドレスを許可リストする場合は、SCCリレーのFQDNで許可リストにしてください。なぜなら、その背後のIPアドレスが変わるからです。 一部のリージョンはセカンダリーリージョンにフェイルオーバーするため、リファレンスリストにはリージョンごとに複数の tunnel FQDNが表示されることがあります。 すべてを許可リストに追加してください。 メタストア、ストレージ、イベントハブのエンドポイントは、Sql、Storage、EventHubなどの独自のサービスタグを持つ他のAzureサービスに属しています。 地域ごとのアドレスおよびFQDN(地域別)リストについては、 Metastore、Artifact Blobストレージ、システムテーブルストレージ、ログBlobストレージ、Event HubsエンドポイントIPアドレスを参照してください。
推奨されるカスタムDNS設定
カスタムDNSサーバーがすべてのAzureやパブリックネームを自分で解決する必要はありません。 推奨されるパターンは、所有している名前を解決し、それ以外はすべてAzureに転送することです。
未解決のクエリを Azure DNS に転送する
カスタムDNSサーバーを設定し、解決できない名前を仮想IPアドレス168.63.129.16の条件付き転送で、Azure提供されたDNSリゾルバに転送します。 Azure DNSはAzure Databricksのコントロールプレーン、ストレージ、メタストア、その他のAzureサービス名を解決し、それらのアドレスが変わっても動作し続けます。
Important
条件付き転送なしでAzure提供のDNSを完全に置き換える必要はありません。 カスタムDNSサーバーがAzureやAzure Databricksドメインの権威的になり、応答できないクエリを転送しなければ、必要なエンドポイントの解決が失敗し、クラスターが起動できなくなります。
最低限、条件付きで以下のドメインをAzure DNSに転送し、ワークロードが使用するストレージやAzureサービスドメインも転送してください。
*.azuredatabricks.net*.privatelink.azuredatabricks.net*.databricksapps.com
Private Link エンドポイントを解決する
ワークスペースがクラシックなコンピュートプレーン接続にAzure Private Linkを使用している場合、名前解決はパブリックアドレスではなくプライベートエンドポイントのIPアドレスを返す必要があります。 AzureプライベートDNSゾーンprivatelink.azuredatabricks.netを作成し、databricks_ui_apiエンドポイントやシングルサインオンに使われるbrowser_authenticationエンドポイントを含むワークスペースエンドポイントのアドレスレコードを追加します。 ブラウザ認証レコードは pl-auth.<region>形式を使用します。
ワークスペースがカスタムDNSを使う場合、そのクラシックなコンピュートノードはAzure DNSではなく、あなたのカスタムDNSサーバーにDNSクエリを送信します。 VNetにリンクされたプライベートDNSゾーンは、168.63.129.16Azure提供のリゾルバを通じてのみ参照されるため、ゾーン単独でリンクしてもそのクエリを計算するためのプライベートエンドポイントアドレスが返されません。 以下の両方が必須です。
-
privatelink.azuredatabricks.netプライベートDNSゾーンをVNetにリンクし、Azure DNSクエリを解決します。あなたのワークスペースVNet、またはハブアンドスポークトポロジーでリゾルバをホストするハブVNetです。 これによりAzure DNSはプライベートエンドポイントアドレスレコードを返すことができます。 - カスタムDNSサーバーを条件付きで
*.privatelink.azuredatabricks.netと*.azuredatabricks.netを168.63.129.16でAzure DNSに転送するように設定してください。 転送はクエリをリンクされたプライベートDNSゾーンに送信するものです。 ハブ・アンド・スポークトポロジーでは、Azure DNSに到達する中央リゾルバに転送します。
プライベートDNSゾーンがリンクされていなかったり、リンクされているもののエンドポイントのアドレスレコードがない場合、Azure DNSはパブリック再帰に戻り、エンドポイントのパブリックIPアドレスを返します。 名前解決は成功したように見えますが、トラフィックはプライベートエンドポイントではなくパブリックエンドポイントに流れます。 リンクゾーンがワークスペースで使用されるすべてのプライベートエンドポイントの期待されるアドレスレコードを保持しているか確認してください。
ストレージなど他のAzureプライベートエンドポイントは、それぞれ独自のAzureプライベートDNSゾーン(例えばprivatelink.dfs.core.windows.netやprivatelink.blob.core.windows.net)を使用します。 同じパターンを適用します:それらのゾーンをリンクし、対応するprivatelinkドメインを条件付きでAzure DNSに転送してリンクゾーンを参照します。 プライベートエンドポイントのDNS統合には、設定によっていくつかのシナリオがあります。 詳細については、Azure Private Endpoint DNS integration をご覧ください。
フロントエンドおよびバックエンドの完全なPrivate Link構成については、「Azure Databricksへのクラシックコンピュートプレーンのプライベート接続設定」およびワークスペースのためのInbound Private Linkの設定」を参照してください。
一般的なカスタムDNSの誤設定
ほとんどのカスタムDNSサポートケースは、以下のいずれかの誤設定から生じています:
- Azure DNSへの転送はありません。 カスタムDNSサーバーはコントロールプレーン、ストレージ、メタストア名Azure Databricks解決できず、クエリを
168.63.129.16に転送しません。 クラスタが起動に失敗したり、起動後にストレージやメタストアに到達できなかったりします。 - プライベート DNS ゾーン リンク、転送、またはレコードが見つかりません。 ワークスペースはPrivate Linkを使っていますが、VNetが
privatelink.azuredatabricks.netゾーンにリンクされていなかったり、Azure DNSに転送されなかったり、リンクゾーンにエンドポイントの正しいアドレスレコードが欠けている場合があります。 名前はパブリック IP アドレス、誤ったアドレス、あるいは何も解決されないため、プライベート接続に失敗します。 - カスタムDNSサーバーにアクセスできません。 VNet上のカスタムDNSサーバーアドレスが間違っていたり、ネットワークルールがコンピュートサブネットへのアクセスをブロックしている場合などです。例えば、ワークスペースのVNetがカスタムDNSサーバーをホストするVNetとピアリングされていない場合などです。 名前解決がすべて失敗します。
- Azure への転送なしのオンプレミス リゾルバー。 DNSクエリは内部名を解決するものの、Azure名の解決や転送はできないオンプレミスのリゾルバにルーティングされます。 Azure および Azure Databricks ドメインに条件付き転送を追加してください。
- ライブラリのリポジトリがブロックされています。 DNSは必要なAzure Databricksのエンドポイントを解決しますが、パブリックライブラリのリポジトリは解決しないので、PyPI、Maven、CRANからのライブラリインストールは失敗します。
カスタムDNSの問題のトラブルシューティング
クラスターが起動しなかったり接続が切れた場合は、クラスタのDNS解決を確認してください。
ワークスペース内にクラスタを作成します。 クラスタが起動できず、イベントログに
Cluster terminated. Reason: Control Plane Request Failureなどのエラーが表示されると、クラスタは制御プレーンにアクセスできず、これはしばしば名前解決の問題となります。稼働中のクラスタ上のノートブックから、カスタムDNSが期待通りのアドレスを返すために必要なエンドポイントを解決します。 Private Link workspaceの場合は、ワークスペースのURLがパブリックアドレスではなくプライベートエンドポイントのIPアドレスに解決されているか確認してください。
%sh nslookup adb-<workspace-id>.<n>.azuredatabricks.net nslookup tunnel.<region>.azuredatabricks.net例えばバックエンドのPrivate Linkの問題でクラスターが全く起動できない場合は、ノートブックではなく、ワークスペースVNetのパブリックサブネット内のAzure VMからこれらのチェックを実行してください。
解決が失敗したり間違ったアドレスを返した場合は、以下の点を確認してください。 DNSのせいでクラスターが起動しない場合、クラスタイベントログは失敗したネットワークの健康チェックを括弧内に示します。
- VNetのカスタムDNSサーバーアドレスは正しく、コンピュートサブネットはそれらのサーバーに到達可能です(
X_NHC_DNS_SERVER_UNREACHABLE)。 - カスタムDNSサーバーは、AzureとAzure Databricksドメインを条件付きでAzure DNS
168.63.129.16(X_NHC_MULTIPLE_COMPONENTS_DNS_ERROR、制御プレーンやアーティファクトストレージ名が解決できない場合)に転送します。 - Private Link の場合、
privatelink.azuredatabricks.netゾーンが Azure DNS で名前解決が行われる VNet にリンクされており、カスタム DNS サーバーが Azure Databricks のドメインを Azure DNS に転送し、想定されるアドレス レコード(コントロール プレーンのプライベート エンドポイントが解決されない場合はX_NHC_CONTROL_PLANE_HTTP_ERROR)が存在します。
- VNetのカスタムDNSサーバーアドレスは正しく、コンピュートサブネットはそれらのサーバーに到達可能です(
クラスタが起動してもオンプレミスや他のAzure as a Service(PaaS)リソースにアクセスできない場合は、ルーティングとDNSが別々に設定されているため、その宛先にユーザー定義のルートが存在するか確認してください。
それでも問題が解決しない場合は、MicrosoftおよびAzure Databricksのアカウントチームに連絡してください。