|
1 | 1 | --- |
2 | 2 | title: Configure networking |
3 | 3 | description: Learn how to configure networking for Managed DevOps Pools. |
4 | | -ms.date: 07/29/2025 |
| 4 | +ms.date: 10/27/2025 |
5 | 5 | ms.custom: sfi-image-nochange |
6 | 6 | --- |
7 | 7 |
|
@@ -206,6 +206,106 @@ If you have systems in place on your network (NSG, Firewall, etc.) that restrict |
206 | 206 |
|
207 | 207 | If you configure your Azure DevOps Pipeline to run inside of a container, you need to also allowlist the source of the container image (Docker or ACR). |
208 | 208 |
|
| 209 | +## Validating endpoint connectivity |
| 210 | + |
| 211 | +To confirm that you can use a given subnet with Managed DevOps Pools, you can run the following script on a resource on that subnet to validate that the network flow is configured to reach all these available endpoints, and additionally the Managed DevOps control plane. |
| 212 | + |
| 213 | +> [!IMPORTANT] |
| 214 | +> You must run this script on a resource that is in your subnet, such as a VM or container, to validate that the network path is open from that subnet to the required endpoints. |
| 215 | +
|
| 216 | +To run the script with PowerShell Core, or PowerShell 5 or greater, save the following script as `ValidateMDPEndpoints.ps1` and run the following PowerShell command: `.\ValidateMDPEndpoints.ps1 -organization "<your-organization>"` |
| 217 | + |
| 218 | +```powershell |
| 219 | +# ValidateMDPEndpoints.ps1 |
| 220 | +param ( |
| 221 | + [string]$organization |
| 222 | +) |
| 223 | +$azureDevOpsUris = @( |
| 224 | + "https://dev.azure.com", |
| 225 | + "https://vssps.dev.azure.com", |
| 226 | + "https://vsrm.dev.azure.com", |
| 227 | + "https://management.azure.com", |
| 228 | + "https://login.microsoftonline.com", |
| 229 | + "https://graph.microsoft.com", |
| 230 | + "https://aadcdn.msftauth.net", |
| 231 | + "https://${organization}.visualstudio.com", |
| 232 | + "https://${organization}.vsrm.visualstudio.com", |
| 233 | + "https://${organization}.vstmr.visualstudio.com", |
| 234 | + "https://${organization}.pkgs.visualstudio.com", |
| 235 | + "https://${organization}.vssps.visualstudio.com", |
| 236 | + "https://download.agent.dev.azure.com", |
| 237 | + "download.agent.dev.azure.com" |
| 238 | +) |
| 239 | +$managedDevOpsPoolsControlPlaneUris = @( |
| 240 | + # List of agent queue endpoints - maps to *.queue.core.windows.net |
| 241 | + "https://rmprodaedefaultcq.queue.core.windows.net", |
| 242 | + "https://rmprodbrsdefaultcq.queue.core.windows.net", |
| 243 | + "https://rmprodcncdefaultcq.queue.core.windows.net", |
| 244 | + "https://rmprodcusdefaultcq.queue.core.windows.net", |
| 245 | + "https://rmprodeus2defaultcq.queue.core.windows.net", |
| 246 | + "https://rmprodgwcdefaultcq.queue.core.windows.net", |
| 247 | + "https://rmprodincdefaultcq.queue.core.windows.net", |
| 248 | + "https://rmprodneudefaultcq.queue.core.windows.net", |
| 249 | + "https://rmprodseadefaultcq.queue.core.windows.net", |
| 250 | + "https://rmprodszndefaultcq.queue.core.windows.net", |
| 251 | + "https://rmproduksdefaultcq.queue.core.windows.net", |
| 252 | + "https://rmprodwcusdefaultcq.queue.core.windows.net", |
| 253 | + "https://rmprodwus3defaultcq.queue.core.windows.net", |
| 254 | + # CDN for downloading the Managed DevOps Pools agent - maps to *.prod.managedevops.microsoft.com |
| 255 | + "rm-agent.prod.manageddevops.microsoft.com" |
| 256 | + # List of control plane endpoints - maps to *.manageddevops.microsoft.com |
| 257 | + "default.ae.prod.manageddevops.microsoft.com", |
| 258 | + "default.brs.prod.manageddevops.microsoft.com", |
| 259 | + "default.cnc.prod.manageddevops.microsoft.com", |
| 260 | + "default.cus.prod.manageddevops.microsoft.com", |
| 261 | + "default.eus2.prod.manageddevops.microsoft.com", |
| 262 | + "default.gwc.prod.manageddevops.microsoft.com", |
| 263 | + "default.inc.prod.manageddevops.microsoft.com", |
| 264 | + "default.neu.prod.manageddevops.microsoft.com", |
| 265 | + "default.sea.prod.manageddevops.microsoft.com", |
| 266 | + "default.szn.prod.manageddevops.microsoft.com", |
| 267 | + "default.uks.prod.manageddevops.microsoft.com", |
| 268 | + "default.wcus.prod.manageddevops.microsoft.com", |
| 269 | + "default.wus3.prod.manageddevops.microsoft.com" |
| 270 | +) |
| 271 | +$unreachableUris = @() |
| 272 | +foreach ($uri in $azureDevOpsUris) { |
| 273 | + try { |
| 274 | + $hostName = ($uri -replace "^https?://", "") -replace "/.*", "" |
| 275 | + $connection = Test-NetConnection -ComputerName $hostName -Port 443 -WarningAction SilentlyContinue |
| 276 | + if (-not $connection.TcpTestSucceeded) { |
| 277 | + $unreachableUris += $uri |
| 278 | + } |
| 279 | + } catch { |
| 280 | + $unreachableUris += $uri |
| 281 | + } |
| 282 | +} |
| 283 | +if ($unreachableUris.Count -eq 0) { |
| 284 | + Write-Output "All Azure DevOps endpoints are reachable." |
| 285 | +} else { |
| 286 | + Write-Output "The following Azure DevOps endpoints could not be reached:" |
| 287 | + $unreachableUris | ForEach-Object { Write-Output $_ } |
| 288 | +} |
| 289 | +foreach ($uri in $managedDevOpsPoolsControlPlaneUris) { |
| 290 | + try { |
| 291 | + $hostName = ($uri -replace "^https?://", "") -replace "/.*", "" |
| 292 | + $connection = Test-NetConnection -ComputerName $hostName -Port 443 -WarningAction SilentlyContinue |
| 293 | +
|
| 294 | + if (-not $connection.TcpTestSucceeded) { |
| 295 | + $unreachableUris += $uri |
| 296 | + } |
| 297 | + } catch { |
| 298 | + $unreachableUris += $uri |
| 299 | + } |
| 300 | +} |
| 301 | +if ($unreachableUris.Count -eq 0) { |
| 302 | + Write-Output "All Azure Managed DevOps Pools endpoints are reachable." |
| 303 | +} else { |
| 304 | + Write-Output "The following Managed DevOps Pools endpoints could not be reached:" |
| 305 | + $unreachableUris | ForEach-Object { Write-Output $_ } |
| 306 | +} |
| 307 | +``` |
| 308 | + |
209 | 309 | ## Configure the Azure DevOps Agent to run behind a Proxy |
210 | 310 |
|
211 | 311 | If you configured a proxy service on your image and want your workloads running on your Managed DevOps pool to run behind this proxy, you must add the following environment variables on your image. |
|
0 commit comments