启用安全群集连接

本文介绍如何为 Azure Databricks 工作区使用安全群集连接。 安全群集连接也称为无公共 IP (NPIP)。 尽管无服务器计算平面不使用安全群集连接,但无服务器计算资源没有公共 IP 地址。

安全群集连接概述

启用安全群集连接后,客户虚拟网络没有开放的端口,并且经典计算平面中的计算资源没有公共 IP 地址。

  • 在群集创建期间,每个群集都会启动与控制平面安全群集连接中继的连接。 群集使用端口 443 (HTTPS) 和一个与 Web 应用程序和 REST API 所用 IP 地址不同的 IP 地址来建立此连接。
  • 当控制平面执行群集管理任务时,这些请求会通过此隧道发送到群集。

注意

经典计算平面 VNet 与 Azure Databricks 控制平面之间的所有 Azure Databricks 网络流量都会经过 Microsoft 网络主干线,而不是公共 Internet。 即使禁用了安全群集连接也是如此。

可以在新工作区上启用安全群集连接,也可以将其添加到已使用 VNet 注入的现有工作区。

在新工作区上启用安全群集连接

使用 Azure 门户 或 Azure 资源管理器 (ARM) 模板创建工作区时,可以启用安全群集连接。

将安全群集连接添加到现有工作区

可以使用 Azure 门户、ARM 模板或 azurerm Terraform 提供程序版本 3.41.0+ 在现有工作区上启用安全群集连接。 若要升级,工作区需要使用 VNet 注入

重要

如果使用防火墙或其他网络配置更改来控制来自经典计算平面的流入量或流出量,则可能需要在更新这些更改的同时更新防火墙或网络安全组规则,以使其完全生效。 例如,使用安全群集连接时,会有一个额外的到控制平面的输出连接,并且不再使用来自控制平面的输入连接。

步骤 1:停止所有计算资源

停止所有经典计算资源,例如群集、池或经典 SQL 仓库。 Databricks 建议规划好升级时间,因为在此过程中会发生停机。

步骤 2:更新工作区

可以使用 Azure 门户、ARM 模板或 Terraform 更新工作区。

使用 Azure 门户

  1. 在 Azure 门户中转到你的 Azure Databricks 工作区。
  2. 在左侧导航栏中的“设置”下,单击“网络”。
  3. 网络访问选项卡中,将使用安全群集连接(无公共 IP)部署 Azure Databricks 工作区设置为已启用
  4. 单击“ 保存”。

网络更新可能需要 15 分钟以上才能完成。

使用 Azure 门户应用更新的 ARM 模板

使用 ARM 模板将 enableNoPublicIp 参数设置为 True (true)。

注意

如果托管资源组使用自定义名称,则必须相应地修改模板。 有关详细信息,请联系 Azure Databricks 客户团队。

  1. 复制以下升级 ARM 模板 JSON:

      {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "location": {
                "defaultValue": "[resourceGroup().location]",
                "type": "String",
                "metadata": {
                    "description": "Location for all resources."
                }
            },
            "workspaceName": {
                "type": "String",
                "metadata": {
                    "description": "The name of the Azure Databricks workspace to create."
                }
            },
            "apiVersion": {
                "defaultValue": "2023-02-01",
                "allowedValues": [
                  "2018-04-01",
                  "2020-02-15",
                  "2022-04-01-preview",
                  "2023-02-01"
                ],
                "type": "String",
                "metadata": {
                    "description": "2018-03-15 for 'full region isolation control plane' and 2020-02-15 for 'FedRAMP certified' regions"
                }
            },
            "enableNoPublicIp": {
                "defaultValue": true,
                "type": "Bool"
            },
            "pricingTier": {
                "defaultValue": "premium",
                "allowedValues": [
                    "premium",
                    "standard",
                    "trial"
                ],
                "type": "String",
                "metadata": {
                    "description": "The pricing tier of workspace."
                }
            },
            "publicNetworkAccess": {
              "type": "string",
              "defaultValue": "Enabled",
              "allowedValues": [
                "Enabled",
                "Disabled"
              ],
              "metadata": {
                "description": "Indicates whether public network access is allowed to the workspace - possible values are Enabled or Disabled."
              }
            },
            "requiredNsgRules": {
              "type": "string",
              "defaultValue": "AllRules",
              "allowedValues": [
                "AllRules",
                "NoAzureDatabricksRules"
              ],
              "metadata": {
                "description": "Indicates whether to retain or remove the AzureDatabricks outbound NSG rule - possible values are AllRules or NoAzureDatabricksRules."
              }
            }
        },
        "variables": {
            "managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]",
            "managedResourceGroupId": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', variables('managedResourceGroupName'))]"
        },
        "resources": [
            {
                "type": "Microsoft.Databricks/workspaces",
                "apiVersion": "[parameters('apiVersion')]",
                "name": "[parameters('workspaceName')]",
                "location": "[parameters('location')]",
                "sku": {
                    "name": "[parameters('pricingTier')]"
                },
                "properties": {
                    "ManagedResourceGroupId": "[variables('managedResourceGroupId')]",
                    "publicNetworkAccess": "[parameters('publicNetworkAccess')]",
                    "requiredNsgRules": "[parameters('requiredNsgRules')]",
                    "parameters": {
                        "enableNoPublicIp": {
                            "value": "[parameters('enableNoPublicIp')]"
                        }
                    }
                }
            }
        ]
    }
    
    1. 转到 Azure 门户自定义部署页。

    2. 单击“在编辑器中生成自己的模板”。

    3. 粘贴复制的模板的 JSON。

    4. 单击“保存” 。

    5. 填写这些参数。

    6. 若要更新现有工作区,请使用用于创建工作区的相同参数,但不能使用 enableNoPublicIp,该参数必须设置为 true。 设置现有 VNet 的订阅、区域、工作区名称、子网名称、资源 ID。

      重要

      资源组名称、工作区名称和子网名称与现有工作区相同,这样,此命令才能更新现有工作区而不是创建新工作区。

    7. 单击“查看 + 创建”。

    8. 如果没有验证问题,请单击“创建”。

    网络更新可能需要 15 分钟以上才能完成。

使用 Terraform 应用更新

对于使用 Terraform 创建的工作区,无需重新创建工作区即可更新该工作区。

重要

必须使用 terraform-provider-azurerm 版本 3.41.0 或更高版本,因此请根据需要升级 Terraform 提供程序版本。 如果更改其中的任何设置,早期版本会尝试重新创建工作区。

更改以下工作区设置:

  • custom_parameters 块中的 no_public_ip 可以从 false 更改为 true

网络更新可能需要 15 分钟以上才能完成。

步骤 3:验证更新

在工作区处于活动状态后,更新作业即告完成。 验证是否已应用更新:

  1. 在 Web 浏览器中打开 Azure Databricks。

  2. 启动工作区的某个群集,并等待群集完全启动。

  3. 在 Azure 门户中转到你的工作区实例。

  4. 单击字段标签“托管资源组”旁边的蓝色 ID。

  5. 在该组中找到群集的 VM,然后单击其中一个 VM。

  6. 在 VM 设置的“属性”中,查看“网络”区域中的字段。

  7. 确认“公共 IP 地址”字段为空。

    如果已填充,则表示 VM 使用公共 IP 地址,这也意味着更新失败。

临时回滚升级到安全群集连接的操作

如果在部署过程中出现问题,可以将该过程反转为临时回滚;但不支持在工作区上禁用 SCC,除非是为了在以后继续升级之前进行临时回滚。 如果需要临时这样做,可以按照上面的说明进行升级,但需要将 enableNoPublicIp 设置为 false 而不是 true。

工作区子网的流出量

启用安全群集连接时,两个工作区子网都是专用子网,因为群集节点没有公共 IP 地址。

网络流出量的实现详细信息会有所不同,具体取决于你是使用默认(托管)VNet,还是使用 VNet 注入来提供自己的 VNet 来部署工作区。

重要

在使用安全群集连接时,由于出口流量的增加,可能会产生额外的成本。 为了实现最安全的部署,Azure 和 Databricks 强烈建议启用安全群集连接。

默认(托管)VNet 的流出量

如果将安全群集连接与 Azure Databricks 创建的默认 VNet 结合使用,Azure Databricks 会自动为从工作区子网到 Azure 主干网和公用网络的出站流量创建一个 NAT 网关。 NAT 网关是在 Azure Databricks 管理的托管资源组中创建的。 不能修改此资源组,也不能修改其中预配的任何资源。 此 NAT 网关会产生额外费用。

使用 VNet 注入的出口

如果对使用 VNet 注入的工作区启用安全群集连接,Databricks 建议工作区有一个稳定的出口公共 IP。 稳定的出口公共 IP 地址非常有用,因为你可以将它们添加到外部允许列表。 例如,若要使用稳定的传出 IP 地址从 Azure Databricks 连接到 Salesforce。

警告

Azure 宣布将于 2025 年 9 月 30 日停用 Azure 中虚拟机的默认出站访问连接。 请参阅此公告。 这意味着使用默认出站访问(而不是稳定的出口公共 IP)的现有 Azure Databricks 工作区在该日期后可能无法继续工作。 Databricks 建议在该日期之前为工作区添加显式出站方法。

若要为工作区添加显式出站方法,请使用 Azure NAT 网关或用户定义的路由 (UDR)。

  • Azure NAT 网关:如果部署只需要一些自定义项,请使用 Azure NAT 网关。 在工作区的两个子网上配置网关,以确保到 Azure 主干网和公用网络的所有出站流量都通过该网关传输。 群集具有稳定的流出量公共 IP,并且你可以根据自定义流出量需求修改配置。 可以使用 Azure 模板或从 Azure 门户进行配置。
  • UDR:如果部署需要复杂的路由要求,或者工作区将 VNet 注入与出口防火墙配合使用,请使用 UDR。 UDR 确保为工作区正确路由网络流量,无论是直接路由到所需终结点还是通过流出量防火墙路由。 若要使用 UDR,必须为 Azure Databricks 安全群集连接中继以及用户定义的 Azure Databricks 路由设置中列出的其他必需终结点添加直接路由或允许的防火墙规则。

警告

不要将流出量负载均衡器用于启用了安全群集连接的工作区。 在生产系统中,流出量负载均衡器可能会导致端口耗尽的风险。