可以将托管 DevOps 池代理配置为在隔离的虚拟网络中运行,也可以配置为在现有虚拟网络中运行。 本文介绍如何将托管 DevOps 池配置为在虚拟网络中运行代理。
将代理添加到自己的虚拟网络
可能需要在以下情况下将来自托管 DevOps 池的代理添加到您自己的虚拟网络中:
- CI/CD 代理需要通过 Express Route 等服务访问仅在公司网络中可用的资源
- 你的 CI/CD 代理需要访问隔离到专用终结点的资源
- 您希望通过引入公司专用的 VNet 和防火墙规则来实现 CI/CD 基础设施的网络隔离。
- 任何其他无法通过现成的托管 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 主体在虚拟网络上具有以下访问权限:
-
Reader
和Network 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 主体访问权限
选择 虚拟网络的访问控制(IAM), 然后选择“ 检查访问权限”。
搜索 DevOpsInfrastructure 并选择它。
验证 读取者 访问权限。 验证
Microsoft.Network/virtualNetworks/subnets/join/action
、Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/validate/action
和Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/write
的访问权限是否已分配。 自定义角色应在此处显示。如果 DevOpsInfrastructure 没有这些权限,请通过为虚拟网络选择 访问控制(IAM) 来添加这些权限,然后选择 “授予对此资源 的访问权限”并添加它们。
将子网委托给 Microsoft.DevOpsInfrastructure/pools
子网需要委托给 Microsoft.DevOpsInfrastructure/pools
才能使用。
在门户中打开子网属性,然后在“子网委派”部分下选择 Microsoft.DevOpsInfrastructure/pools
,然后选择“ 保存”。
这会将子网委派给该池进行独占访问,并且其他池或资源无法使用该子网。 若要将多个池连接到同一虚拟网络,必须使用多个子网,每个子网都委托并与自己的池相关联。 有关子网委派的详细信息,可在此处找到。
一旦将子网委派给 Microsoft.DevOpsInfrastructure/pools
,就可以更新池以使用该子网。
将子网与托管的 DevOps 资源池相关联
如果要创建新池,请转到“网络”选项卡。若要更新现有池,请转到“设置网络”>,然后选择注入到现有虚拟网络中的代理“配置”。
选择你委派给 的订阅、虚拟网络和
Microsoft.DevOpsInfrastructure/pools
,然后选择确定。
网络更新完成后,池中新创建的资源将使用委托的子网。
限制出站连接
如果在限制出站连接的网络上(NSG、防火墙等)上安装了系统,则需要确保可以访问以下域,否则托管 DevOps 池将不起作用。 所有这些都是 HTTPS,除非另有说明。
- 我们服务所依赖的高度安全终结点:
-
*.prod.manageddevops.microsoft.com
- 托管的 DevOps 池终结点 -
rmprodbuilds.azureedge.net
- 工作进程二进制文件 -
vstsagentpackage.azureedge.net
和https://download.agent.dev.azure.com
- Azure DevOps 代理 CDN 位置 -
*.queue.core.windows.net
- 用于与托管的 DevOps 池服务通信的工作进程队列 -
server.pipe.aria.microsoft.com
- 常见的客户端遥测解决方案 -
azure.archive.ubuntu.com
- 预配 Linux 计算机 - 这是 HTTP(端口 80),而不是 HTTPS(端口 443) -
www.microsoft.com
- 预配 Linux 计算机 -
security.ubuntu.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 相关终结点:Azure 虚拟机可以通过子网将流量路由到某些 Azure 服务。 对于这些请求,可以选择直接通过 Azure 路由请求,或者通过网络启用访问。
- 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 虚拟机规模集代理- 自定义管道代理配置中所述,则无需更改。