为 Azure Databricks Git 文件夹设置专用 Git 连接

如果托管专用 Git 服务器(如 GitHub Enterprise Server、Bitbucket 服务器或 GitLab 自管理),或者 Git 服务器位于防火墙后面,则可以使用 Git 服务器代理将 Databricks Git 文件夹连接到专用存储库。 代理通过计算资源将 Git 命令从 Azure Databricks 工作区路由到专用 Git 服务器。

关于 Git 服务器代理

使用用于 Git 文件夹的 Databricks Git 服务器代理可将 Git 命令从 Azure Databricks 工作区代理到 Internet 上无法访问的专用 Git 服务器。

Databricks Git 文件夹 将连接的 Git 存储库表示为文件夹。 这些文件夹的内容通过同步到连接的 Git 存储库进行版本控制。 默认情况下,Git 文件夹只能与 Internet 上可访问的存储库同步。 如果托管专用 Git 服务器或 Git 服务器位于防火墙后面,则必须将 Git 服务器代理与 Git 文件夹配合使用。 Git 服务器必须可从 Azure Databricks 计算平面访问。

Git 服务器代理的工作原理

Databricks Git 文件夹的 Git 服务器代理将 Git 命令从 Databricks 控制平面传递到工作区计算平面中运行的 代理群集。 代理群集配置为运行代理服务,该服务从 Databricks 控制平面接收 Git 命令,并将其转发到 Git 服务器。 代理不会影响 Databricks 控制平面的安全体系结构。

下面说明了整个系统体系结构:

此示意图显示如何将适用于 Databricks Git 文件夹的 Git 服务器代理配置为从客户的计算平面运行

重要

Databricks 提供了一个 工具笔记本 ,用于将 Git 服务器实例配置为 Databricks Git 文件夹的代理执行命令。 获取 GitHub 上的启用笔记本。 Databricks Git 服务器代理旨在与配置笔记本中包含的 Databricks Runtime 版本一起使用。 不要更新代理群集的 Databricks Runtime 版本。

设置 Git 服务器代理

若要为 Databricks Git 文件夹启用专用 Git 连接,请准备 Git 服务器实例,运行启用笔记本以创建代理并验证配置。

设置 Git 服务器代理:

  1. 使用静态 IP 地址和 HTTPS 传输准备 Git 服务器实例。
  2. 运行启用笔记本以创建代理群集。
  3. 通过克隆存储库来验证配置。
  4. 为用户配置 Git 凭据。

先决条件

在启用代理之前,请验证以下内容:

  • 工作区已启用 Databricks Git 文件夹功能。 请参阅 启用或禁用 Databricks Git 文件夹

  • Git 服务器实例可从 Azure Databricks 工作区的计算平面 Azure 虚拟网络(VNet)访问,并且已启用 HTTPS 和个人访问令牌(PAT)。

注意

Databricks 的 Git 服务器代理适用于 VNet 支持的所有区域。

步骤 1:准备 Git 服务器实例

重要

若要创建计算资源并完成此任务,你必须是具有访问权限的工作区管理员。

将 Git 服务器配置为接受来自代理群集的连接并启用 HTTPS 传输。

企业 Git 服务器通常拥有一个允许访问的 IP 地址白名单。 若要允许代理群集驱动程序节点访问 Git 服务器,请关联来自代理群集的流量的静态出站 IP 地址,并将其添加到 Git 服务器的允许列表。

  1. 使用 Azure 防火墙或出口设备为源自代理群集的流量关联静态出站 IP 地址。
  2. 将上一步中的 IP 地址添加到 Git 服务器的允许列表。

然后,将 Git 服务器实例配置为允许 HTTPS 传输:

  • GitHub Enterprise:请参阅 GitHub Enterprise 帮助中的“我应该使用哪个远程 URL”。
  • Bitbucket 服务器:在 Bitbucket 服务器管理页上,单击“服务器设置”并选择已启用 HTTP(S)。

步骤 2:运行启用笔记本

要启用代理,请执行以下命令:

  1. 以工作区管理员(有权创建群集)身份登录到 Azure Databricks 工作区。

  2. 导入此笔记本,该笔记本选择云提供商提供的最小实例类型来运行 Git 代理:

    笔记本:启用适用于 Databricks Git 文件夹的 Git 服务器代理以在 Git 文件夹中建立专用 Git 服务器连接

  3. 单击“全部运行”以运行笔记本,它会执行以下任务

    • 创建一个名为“Databricks Git 代理”的 单个节点计算资源 ,该资源不会自动终止。 此代理服务将处理 Git 命令并将其从 Azure Databricks 工作区转发到专用 Git 服务器。
    • 启用功能标志,用于控制 Databricks Git 文件夹中的 Git 请求是否通过计算实例进行代理。

    最佳做法是创建一个作业,以便定期运行 Git 代理计算资源。 这样,Git 代理服务就可供用户使用。

注意

运行额外的长时间计算资源会产生额外的 Databricks 单元(DBU)。 为了最大程度地降低成本,笔记本将代理配置为使用具有廉价节点类型的单节点计算资源。 根据需求修改计算选项。 有关定价信息,请参阅 Databricks 定价计算器

步骤 3:验证 Git 服务器配置

若要验证 Git 服务器配置,请通过代理群集克隆托管在专用 Git 服务器上的存储库。 克隆操作成功表明 Git 服务器代理适用于您的工作区。

步骤 4:创建已启用代理的 Git 存储库

用户配置其 Git 凭据后,无需执行进一步的步骤来创建或同步存储库。 若要以编程方式配置凭据和访问存储库,请参阅 “配置 Git 凭据”,并将远程存储库连接到 Azure Databricks

删除全球的 CAN ATTACH TO 权限

Git 服务器代理不需要任何用户的 CAN ATTACH TO 权限。 若要防止用户在代理群集上运行任意工作负荷,请限制代理服务器上的群集访问控制列表(ACL)权限:

  1. 从边栏中单击 “计算 ”,然后单击 “Kebab”菜单图标。 正在运行的 Git Server 代理计算项旁边的 kebab 菜单。

  2. 单击“ 编辑权限”。

  3. 从对话框中,删除所有用户“可附加到”条目。

故障排除

本部分介绍常见问题以及如何诊断它们。

常见问题清单

在开始诊断错误之前,请确认以下内容:

运行调试笔记本的其余部分并捕获结果。 如果无法解决问题或看不到报告的任何故障,Databricks 支持人员可以查看结果。 如果请求,请导出并发送调试笔记本作为 DBC 存档。

更改 Git 代理配置

如果 Git 代理服务未使用默认配置,请设置环境变量以支持网络基础结构。

使用下列环境变量更新 Git 代理服务的配置:

环境变量 格式 说明
GIT_PROXY_ENABLE_SSL_VERIFICATION true/false 如果将自签名证书用于专用 Git 服务器,请将此设置为 false
GIT_PROXY_CA_CERT_PATH 文件路径(字符串) 将此设置为 SSL 验证所用 CA 证书文件的路径。 示例: /FileStore/myCA.pem
GIT_PROXY_HTTP_PROXY https://<hostname>:<port #> 将此项设置为 HTTP 流量的网络防火墙代理的 HTTPS URL。
GIT_PROXY_CUSTOM_HTTP_PORT 端口号(整数) 将此设置为分配给 Git 服务器的 HTTP 端口的端口号。

设置以下环境变量:

  1. 转到 Azure Databricks 工作区中的 “计算 ”选项卡。
  2. 选择 Git 代理服务的计算配置。
  3. “配置 ”窗格底部,展开“ 高级 ”并选择 “Spark ”选项卡。
  4. 将环境变量添加到“ 环境变量 ”字段。

检查代理群集上的日志

代理群集上/databricks/git-proxy/git-proxy.log的文件包含可用于调试的日志。

日志文件应以 . 开头 Data-plane proxy server binding to ('', 8000)…。 如果未启动,则代理服务器无法正常启动。 重启群集,或删除群集,然后再次运行启用笔记本。

如果日志文件以此行开头,请查看 Databricks Git 文件夹中由 Git 操作启动的每个 Git 请求的后续日志记录。

例如:

  do_GET: https://server-address/path/to/repo/info/refs?service=git-upload-pack 10.139.0.25 - - [09/Jun/2021 06:53:02] /
  "GET /server-address/path/to/repo/info/refs?service=git-upload-pack HTTP/1.1" 200`

写入此文件的错误日志可帮助你或 Databricks 支持团队调试问题。

SSL 证书错误

你可能会看到以下错误:

https://git.consult-prodigy.com/Prodigy/databricks_test: Secure connection to https://git.consult-prodigy.com/Prodigy/databricks_test could not be established because of SSL problems

这通常意味着你使用的是需要特殊 SSL 证书的存储库。 检查代理群集上的/databricks/git-proxy/git-proxy.log文件。 如果证书验证失败,请将证书颁发机构添加到系统证书链:

  1. 使用 浏览器 或其他方法提取根证书,并将其上传到 Databricks 文件系统。
  2. 编辑 Git 文件夹 Git 代理 群集,将环境变量设置为 GIT_PROXY_CA_CERT_PATH 指向根证书文件。 请参阅环境变量

完成这些步骤后,重启群集。

常见问题解答

以下是有关 Git 服务器代理配置和用法的常见问题。

如何检查 Git 代理是否正在运行?

导入并运行 Git 代理调试笔记本。 结果显示 Git 代理服务是否存在问题。

工作区是否可以共享代理群集?

每个 Azure Databricks 工作区都需要自己的代理群集。 不能跨多个工作区共享代理群集,每个工作区只能有一个 Git 代理服务器群集。

是否可以仅通过代理路由某些 Git 流量?

所有与 Databricks Git 文件夹相关的流量都通过代理群集路由,甚至对于公共 Git 存储库也是如此。 Azure Databricks 工作区不区分代理存储库和非代理存储库。

支持哪些 Git 提供程序?

Databricks Git 文件夹支持 GitHub Enterprise、Bitbucket 服务器、Azure DevOps Server 和 GitLab 自管理。 如果其他企业 Git 服务器提供程序符合常见的 Git 规范,则它们也应正常工作。

是否支持 GNU Privacy Guard (GPG) 的提交签名?

否。

是否支持 SSH 传输?

否。 仅支持 HTTPS。

是否可以使用非默认 HTTPS 端口?

启用笔记本假定 Git 服务器使用默认 HTTPS 端口 443。 将环境变量 GIT_PROXY_CUSTOM_HTTP_PORT 设置为使用其他端口。

用户是否需要更改代理的 Git URL?

否。 用户输入正常的 Git 存储库 URL,例如 https://git.company.com/org/repo-name.git。 Databricks Git 文件夹的所有 Git 流量以透明方式通过代理路由。

身份验证如何与代理配合使用?

是的,代理使用用户的 Git 凭据向 Git 服务器进行身份验证。 访问权限受该凭据中指定的权限的限制。