Subnet Delegationを理解するための前提
delegationはPaaS serviceにsubnet内でservice-specific resource/configurationを作る権限を与える。 委任先serviceはNetwork Intent Policyを使い、動作を壊す構成変更をPUT時に拒否できる。
NSG、UDR、service endpoint、共有/専用subnet可否、最小subnet sizeはserviceごとに異なる。 delegated subnetではPrivate Endpointを配置できないため、同一subnetへ役割を詰め込まない。
delegation解除前にservice instanceを残したまま削除・再利用しようとすると依存関係で失敗しやすい。 capacityはAzure予約5 IPに加えてserviceのscale-out/upgrade bufferを見込んで設計する。
Control plane と data plane
仕組みと設計上の意味
delegationは「serviceへsubnetを明け渡す」機能ではなく、Azure Resource Manager上の明示的な許可契約。
serviceが要求するNetwork Intent Policyは、NSG/UDR等の不整合をdeployment/update時に防ぐためのguardrailとして働く。
delegation可能service名は固定値ではなくplatform更新で増減するため、実装直前にPortal/CLIで利用可能値とservice documentationを確認する。
同じsubnetに複数serviceを置けるか、VM/VMSSと共存できるかはdelegation targetごとのcontractで決まる。
Packet / decision path
source→destinationを1本のflowとして固定し、名前解決・routing・security・NAT/service processing・return pathを必要な範囲で順に確認する。
- 対象serviceのnetwork integration要件を確認する。
- 必要なsubnet sizeと同居可否を決める。
- delegation、NSG、UDR、DNS、service endpointの組み合わせをcontrol planeで確認する。
- service deployment後にeffective route/securityとservice healthを確認する。
- 削除/移行時はservice dependencyを外してからdelegationを解除する。
設計判断
| 判断点 | 推奨 | 理由 |
|---|---|---|
| 専用subnetか | serviceが専用を要求/推奨するなら専用化 | 将来のpolicy衝突とIP枯渇を避ける |
| NSG/UDR | serviceが明示的にsupportする範囲だけ適用 | generic network policyよりservice要件を優先 |
| IP size | 最大scale + maintenance/upgrade bufferで確保 | small subnetは拡張時に停止要因になる |
| Private Endpoint | 別subnetへ分離 | delegated subnetとの排他を避ける |
確認手順
Azure Portal
- VNet → Subnets → Delegation、NSG、Route table、Available IPを確認。
- 対象PaaS側のNetworking画面で選択subnetとintegration stateを照合。
- 変更後はdeployment healthと代表通信を別々に確認。
Evidence contract
az network vnet subnet show -g <rg> --vnet-name <vnet> -n <subnet> --query "{prefix:addressPrefix,delegations:delegations,routeTable:routeTable.id,nsg:networkSecurityGroup.id}" -o jsonc
az network vnet subnet list -g <rg> --vnet-name <vnet> -o table$vnet = Get-AzVirtualNetwork -ResourceGroupName <rg> -Name <vnet>
$vnet.Subnets | Select Name,AddressPrefix,Delegations,RouteTable,NetworkSecurityGroup
障害切り分け
| 症状 | 疑う点 | 証拠 | 次の確認 |
|---|---|---|---|
| deploymentがPUTで拒否 | delegation/service policy不一致 | Activity Log + subnet delegation | service-specific requirementsを再確認 |
| scale-out失敗 | subnet IP不足 | subnet prefixとservice instance数 | larger/new subnetへ移行計画 |
| 通信だけ失敗 | NSG/UDR/DNSの問題 | effective state + DNS result | delegationとreachabilityを切り分け |
| subnet削除不可 | service/delegation dependency残存 | resource dependencies | serviceを先にdetach/delete |
変更・rollback
- 変更前にdelegation/NSG/UDR/subnet prefixをexportする。
- service移行はnew subnetへparallel deploymentできるか確認してからcutoverする。
- rollbackはdelegationだけ戻すのではなくservice instanceとDNS/routeもbefore stateへ戻す。
- IP capacity不足をrollbackで解決しようとせず、address planを修正する。