配置托管 DevOps 池网络

可以将托管 DevOps 池代理配置为在隔离的虚拟网络中运行,也可以配置为在现有虚拟网络中运行。 本文介绍如何将托管 DevOps 池配置为在虚拟网络中运行代理。

将代理添加到自己的虚拟网络

可能需要在以下情况下将来自托管 DevOps 池的代理添加到您自己的虚拟网络中:

  • CI/CD 代理需要通过 Express Route 等服务访问仅在公司网络中可用的资源
  • 你的 CI/CD 代理需要访问隔离到专用终结点的资源
  • 您希望通过引入公司专用的 VNet 和防火墙规则来实现 CI/CD 基础设施的网络隔离。
  • 任何其他无法通过现成的托管 DevOps 池网络相关功能实现的独特用例

可以通过以下步骤将池的代理添加到虚拟网络中。

  1. 创建或引入虚拟网络和子网
  2. 将子网委托给 Microsoft.DevOpsInfrastructure/pools
  3. 将子网与托管 DevOps 池相关联

前面的步骤委托子网供池独占访问,子网不能由其他池或资源使用。 为了将多个池连接到同一虚拟网络,可以使用多个子网,每个子网都委托并与自己的池相关联。

创建或引入虚拟网络和子网

子网必须有足够的地址空间来容纳要关联的池的最大池大小(包括子网中 Azure 保留的 5 个 IP 地址)。 如果使用 Express Route,则需要临时删除或更改资源组上的管理锁以允许写入。

重要

托管 DevOps 池和虚拟网络必须位于同一区域,否则在尝试创建池或更新网络配置时,您将收到如下所示的错误。 Virtual network MDPVN is in region eastus, but pool mdpnonprodsub is in region australiaeast. These must be in the same region.

授予读者和网络参与者对 DevOpsInfrastructure 服务主体的访问权限

确保 DevOpsInfrastructure 主体在虚拟网络上具有以下访问权限:

  • ReaderNetwork Contributor
  • 或向自定义角色添加以下权限:
    • Microsoft.Network/virtualNetworks/*/read
    • Microsoft.Network/virtualNetworks/subnets/join/action
    • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/validate/action
    • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/write
    • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/delete

为服务关联链接访问权限创建自定义角色。 可以在访问控制选项卡中的资源组或订阅级别创建示例角色,如以下示例所示。

自定义角色权限的屏幕截图。

检查 DevOpsInfrastructure 主体访问权限

  1. 选择 虚拟网络的访问控制(IAM), 然后选择“ 检查访问权限”。

    SubNet 委派的 VNet 权限的屏幕截图。

  2. 搜索 DevOpsInfrastructure 并选择它。

    选择 AzureDevOpsInfrastructure 主体的屏幕截图。

  3. 验证 读取者 访问权限。 验证Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/serviceAssociationLinks/validate/actionMicrosoft.Network/virtualNetworks/subnets/serviceAssociationLinks/write的访问权限是否已分配。 自定义角色应在此处显示。

    VNet 权限的屏幕截图。

  4. 如果 DevOpsInfrastructure 没有这些权限,请通过为虚拟网络选择 访问控制(IAM) 来添加这些权限,然后选择 “授予对此资源 的访问权限”并添加它们。

将子网委托给 Microsoft.DevOpsInfrastructure/pools

子网需要委托给 Microsoft.DevOpsInfrastructure/pools 才能使用。 在门户中打开子网属性,然后在“子网委派”部分下选择 Microsoft.DevOpsInfrastructure/pools ,然后选择“ 保存”。

配置子网委派的屏幕截图。

这会将子网委派给该池进行独占访问,并且其他池或资源无法使用该子网。 若要将多个池连接到同一虚拟网络,必须使用多个子网,每个子网都委托并与自己的池相关联。 有关子网委派的详细信息,可在此处找到

一旦将子网委派给 Microsoft.DevOpsInfrastructure/pools,就可以更新池以使用该子网。

将子网与托管的 DevOps 资源池相关联

  1. 如果要创建新池,请转到“网络”选项卡。若要更新现有池,请转到“设置网络>,然后选择注入到现有虚拟网络中的代理“配置”。

    配置选项的屏幕截图。

  2. 选择你委派给 订阅虚拟网络Microsoft.DevOpsInfrastructure/pools,然后选择确定

    将子网关联到池的屏幕截图。

网络更新完成后,池中新创建的资源将使用委托的子网。

限制出站连接

如果网络上有机制(如 NSG、防火墙等)限制出站连接,则需要将特定终结点加入信任列表,以便完全支持托管的 DevOps 池。 这些端点分为通用必需端点(在任何托管 DevOps 池计算机上所需)和某些特定方案所需的端点。 除非另有说明,否则所有终结点都是 HTTPS。

  • 托管 DevOps 池启动所需的终结点 - 如果不允许列出这些终结点,计算机将无法作为服务的一部分联机,并且无法在托管 DevOps 池上运行管道
    • *.prod.manageddevops.microsoft.com - 托管 DevOps 池终结点,用于与托管 DevOps 池服务通信。
    • rmprodbuilds.azureedge.net - 用于下载托管 DevOps 池工作者二进制文件和启动脚本。 (从rm-agent.prod.manageddevops.microsoft.com下载工人二进制文件的代理部分)(以前是从agent.prod.manageddevops.microsoft.com下载)受前一个必需*.prod.manageddevops.microsoft.com条目涵盖。
    • *.queue.core.windows.net - 用于与托管 DevOps 池服务通信的工作队列。
  • 连接到 Azure DevOps 所需的终结点 - 如果不将这些终结点加入白名单,计算机可能会联机,甚至进入“分配”状态,但仍无法与 Azure DevOps (ADO) 通信,因为 VSTS 任务代理无法连接或无法启动。
    • vstsagentpackage.azureedge.netdownload.agent.dev.azure.com - 用于下载 Azure DevOps 代理的 Azure DevOps 代理 CDN 位置
    • dev.azure.com - 需要处理与 Azure DevOps 的通信
    • 准备 Linux 计算机 - 需要这些端点才能启动 Ubuntu 计算机,但如果池内仅使用 Windows,则不需要这些端点。 作为设置 Azure DevOps 任务代理的一部分,需要先添加一些必需的包并将其加入允许列表,然后运行 apt-get,否则会失败。
      • azure.archive.ubuntu.com - 预配 Linux 计算机 - 这是 HTTP(端口 80),而不是 HTTPS(端口 443)
      • www.microsoft.com - 预配 Linux 计算机
      • security.ubuntu.com - 预配 Linux 计算机
      • packages.microsoft.com - 预配 Linux 计算机
      • ppa.launchpad.net - 预配一些特定的 Linux 发行版
      • dl.fedoraproject.org - 预配某些 Linux 发行版
  • 可选,但需要特定的 Azure DevOps 功能才能在管道上运行。 在以下集合中,通配符可以替换为托管您的管道的特定 Azure DevOps 组织。 例如,如果组织命名 contoso,则可以使用 contoso.services.visualstudio.com 而不是 *.services.visualstudio.com。 这些项是所需的最基本的域。 如果遇到任何问题,请参阅 Azure DevOps 允许列表 ,了解所需的域的完整列表。
    • *.services.visualstudio.com
    • *.vsblob.visualstudio.com - 用于工件的上传和使用
    • *.vssps.visualstudio.com - 用于使用 Azure DevOps 对某些功能进行身份验证
    • *.visualstudio.com
  • Azure 相关终结点:Azure 虚拟机可以通过子网将流量路由到某些 Azure 服务。 对于这些请求,可以选择直接通过 Azure 路由请求,或者通过网络启用访问。
    1. 配置 Azure 流量以通过服务终结点运行

      通过 Azure 直接路由流量可避免向 NSG 或防火墙添加吞吐量,并且不需要将以下选项中列出的域列入允许列表。

      例如,使用 数据磁盘 功能将涉及对 Azure 存储的网络调用。 在网络上启用 Microsoft.Storage 服务终结点将直接通过 Azure 路由流量,避免网络规则并减少负载。

    2. 如果想要避免通过服务终结点路由流量,那么这些是针对特定功能允许列出的域。

  • Akamai CDN 传递 IP:从 2025 年 5 月 1 日起,Azure DevOps CDN 资产正在转换为 Akamai 和 Azure Front Door 提供的解决方案。 确保网络对 Akamai IP 范围具有出站访问权限。 有关详细信息,请参阅:

如果将 Azure DevOps Pipeline 配置为在容器内部运行,则还需要允许列出容器映像(Docker 或 ACR)的源。

将 Azure DevOps Agent 配置为通过代理服务器运行

如果在映像上配置了代理服务,并且希望托管 DevOps 池上运行的工作负荷要在此代理后面运行,则必须在映像上添加以下环境变量。

  • VSTS_AGENT_INPUT_PROXYURL - 要在后面运行的配置代理的 URL
  • VSTS_AGENT_INPUT_PROXYUSERNAME - 使用代理所需的用户名
  • VSTS_AGENT_INPUT_PROXYPASSWORD - 使用代理的密码。

对于 Windows,这些环境变量应该是系统环境变量,对于 Linux,这些变量应位于 /etc/environment 文件中。 在映像上不正确地设置这些系统变量或没有配置代理服务,都会导致预配新代理失败,并出现网络连接问题。

如果要从 Azure 虚拟机规模集代理迁移,并且已在映像上使用代理环境变量,如 Azure 虚拟机规模集代理- 自定义管道代理配置中所述,则无需更改。

另请参阅