配置托管 DevOps 池网络

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

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

对于以下情况,可能需要将代理从托管 DevOps 池添加到自己的虚拟网络:

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

可以使用以下步骤将池的代理添加到虚拟网络。

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

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

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

子网必须有足够的地址空间来容纳要关联的池的最大池大小(包括子网中保留的 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/action是否分配了Microsoft.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 池将不起作用。 所有这些都是 HTTPS,除非另有说明。

  • 我们服务所依赖的高度安全终结点:
    • *.prod.manageddevops.microsoft.com - 托管 DevOps 池终结点
    • rmprodbuilds.azureedge.net - 辅助角色二进制文件
    • vstsagentpackage.azureedge.net - Azure DevOps 代理 CDN 位置
    • *.queue.core.windows.net - 用于与托管 DevOps 池服务通信的辅助角色队列
    • server.pipe.aria.microsoft.com - 常见的客户端遥测解决方案(代理池验证扩展等使用)
    • azure.archive.ubuntu.com - 预配 Linux 计算机 - 这是 HTTP,而不是 HTTPS
    • www.microsoft.com - 预配 Linux 计算机
  • 服务所依赖的更安全、更开放的终结点:
    • 我们的服务需要:
      • packages.microsoft.com - 预配 Linux 计算机
      • ppa.launchpad.net - 预配 Ubuntu 计算机
      • dl.fedoraproject.org - 预配某些 Linux 发行版
    • Azure DevOps 代理需要:
      • dev.azure.com
      • *.services.visualstudio.com
      • *.vsblob.visualstudio.com
      • *.vssps.visualstudio.com
      • *.visualstudio.com 这些条目是所需的最小域。 如果遇到任何问题,请参阅 Azure DevOps 允许列表 ,了解所需的域的完整列表。

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

将 Azure DevOps 代理配置为在代理后面运行

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

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

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

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

另请参阅