Azure Databricks 工作區虛擬網路的自訂 DNS 最佳做法

當你在自己的虛擬網路部署 Azure Databricks 工作空間(VNet 注入)時,你可以設定 VNet 使用自訂的 DNS 伺服器,而非 Azure 提供的 DNS。 當工作空間必須解析本地主機名稱、在樞紐輻射拓撲中使用集中式 DNS 轉發器,或應用 DNS 層級過濾時,自訂 DNS 很常見。

自訂 DNS 讓你掌控名稱解析,但同時也讓你負責名稱解析。 如果你的自訂 DNS 伺服器無法解析經典運算所需的名稱,叢集就會無法啟動,導致無法與外部資料來源和函式庫庫的外站連線。 本文說明了VNet注入工作區的建議自訂DNS設定、最常見的錯誤設定,以及如何排查這些問題。

Note

自訂 DNS 適用於已注入 VNet 的工作區中的 經典計算平面。 Serverless compute 運行在 Azure Databricks 網路中,且不會使用 VNet 的 DNS 設定。

Azure Databricks 如何在已插入 VNet 的工作區中使用 DNS

經典運算節點運行在你的 VNet 容器(私有)和主機(公)子網。 在叢集啟動與運作過程中,這些節點必須解析並連接多個 Azure Databricks 與 Azure 端點。 若啟用 安全叢集連接(SCC ),每個叢集在叢集建立時會開啟與控制平面 SCC 中繼的外站連線,因此名稱解析必須成功才能啟動叢集。

經典運算所依賴的端點包括:

終點 如何抵達
Azure Databricks 控制平面和 Web 應用程式 區域IP範圍,以 AzureDatabricks 服務標籤表示
安全叢集連接(SCC)中繼 完全限定網域名稱(FQDN) tunnel.<region>.azuredatabricks.net
舊版 Hive 中繼存放區 consolidated-<region>-prod-metastore.mysql.database.azure.com
工作區根目錄(DBFS)儲存體 工作區儲存帳戶的 dfs 與 blob 端點
文物與日誌 Blob 儲存 dbartifactsprod<region>.blob.core.windows.net、dblogprod<region>.blob.core.windows.net
事件中樞(記錄) prod-<region>-observabilityeventhubs.servicebus.windows.net
外部資料來源與資料庫 公共 DNS 名稱,如 PyPI、Maven 和 CRAN 倉庫

經典運算是透過區域 IP 範圍抵達控制平面和網頁應用程式,而非面向客戶的主機名稱,因此 Azure Databricks 建議在路由表、網路安全群組或防火牆中以AzureDatabricks服務標籤將其列入允許名單。 有些防火牆,例如帕洛阿爾托,無法使用Azure服務標籤。 對於那些項目,請改為將參考清單中的基礎 IP 範圍加入允許清單。

AzureDatabricks服務標籤已經涵蓋 SCC 繼電器。 如果你是將特定 IP 位址加入允許清單,而不是使用服務標籤,請將 SCC 中繼服務的 FQDN 加入允許清單,因為其背後的 IP 位址會變動。 有些區域會切換到次要區域,因此參考列表可能會顯示同一區域的多個 tunnel FQDN。 全部都列入允許名單。 元儲存庫、儲存裝置與事件中心端點屬於其他具有獨立服務標籤的 Azure 服務,例如 Sql、 Storage、 EventHub。 關於完整的各區域地址與 FQDN 清單,請參見 Metastore、Artifact Blob 儲存、系統資料表儲存、log Blob 儲存及事件集線器端點 IP 位址。

你的自訂 DNS 伺服器不必自己解析每個 Azure 和公開名稱。 建議的做法是先解析你擁有的名稱,其他資料則轉發到 Azure。

將未解析的查詢轉送至 Azure DNS

設定你的自訂 DNS 伺服器,讓無法解析的名稱條件轉發到 Azure 提供的虛擬 IP 168.63.129.16位址的 DNS 解析器。 Azure DNS 會幫你解析 Azure Databricks 的控制平面、儲存空間、元儲存庫及其他 Azure 服務名稱,並且隨著這些位址變更,它仍能持續運作。

Important

不要完全取代 Azure 提供的 DNS,除非有條件轉發。 如果你的自訂 DNS 伺服器變成 Azure 或 Azure Databricks 網域的權威伺服器,卻不轉發無法回答的查詢,所需端點的解析就會失敗,叢集也無法啟動。

至少,請有條件地將以下網域轉發到 Azure DNS,並轉發你工作負載所使用的任何儲存空間和 Azure 服務網域:

  • *.azuredatabricks.net
  • *.privatelink.azuredatabricks.net
  • *.databricksapps.com

如果你的工作空間使用 Azure Private Link 作為經典計算平面連線,名稱解析必須回傳私有端點的 IP 位址,而非公有位址。 Azure 會建立私有 DNS 區域privatelink.azuredatabricks.net,並為你的工作區端點(包括databricks_ui_api端點和browser_authentication用於單一點名的端點)新增地址紀錄。 瀏覽器的認證記錄使用格式 pl-auth.<region>。

當工作空間使用自訂 DNS 時,其經典運算節點會將 DNS 查詢傳送到你的自訂 DNS 伺服器,而非 Azure DNS。 連結至 VNet 的私人 DNS 區域,只會透過位於 168.63.129.16 的 Azure 提供解析器來查詢,因此僅連結該區域,並不會將私人端點位址傳回給查詢自訂解析器的運算資源。 以下兩項條件皆為必備條件:

  • 將 privatelink.azuredatabricks.net 私有 DNS 區域連結至 Azure DNS 解析查詢所在的 VNet:您的工作區 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 整合。

如需完整的前端與後端 Private Link 設定,請參閱 「設定傳統計算平面到 Azure Databricks 的私人連線」 和 「設定工作區的輸入 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 解析。

  1. 在工作區建立一個叢集。 如果叢集無法啟動,且事件記錄顯示如 Cluster terminated. Reason: Control Plane Request Failure 的錯誤,表示叢集無法連線到控制平面,而這通常是名稱解析問題。

  2. 從執行中叢集上的 notebook 中,解析所需端點,以確認您的自訂 DNS 會傳回預期的位址。 對於 Private Link 工作區,請確認工作區的 URL 解析為私有端點的 IP 位址,而非公共位址。

    %sh
    nslookup adb-<workspace-id>.<n>.azuredatabricks.net
    nslookup tunnel.<region>.azuredatabricks.net
    

    如果叢集完全無法啟動,例如因為後端 Private Link 問題,請從工作空間 VNet 公共子網的 Azure 虛擬機執行這些檢查,而不是從筆記本。

  3. 若解析失敗或回傳錯誤地址,請確認以下事項。 當叢集因 DNS 問題無法啟動時,叢集事件日誌會標示失敗的網路健康檢查,括號內顯示:

    • VNet 的自訂 DNS 伺服器位址是正確的,計算子網可以連接到這些伺服器(X_NHC_DNS_SERVER_UNREACHABLE)。
    • 你的自訂 DNS 伺服器會將 Azure 和 Azure Databricks 網域有條件轉送至位於 168.63.129.16 的 Azure DNS(當控制平面或成品儲存體名稱無法解析時,則轉送至 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)。
  4. 如果叢集啟動但無法連接本地或其他 Azure 平台即服務(PaaS)資源,請確認這些目的地是否存在使用者自訂路由,因為路由和 DNS 是分開設定的。

如果問題仍無法解決,請聯絡你的 Microsoft 和 Azure Databricks 帳號團隊。

其他資源