Skip to content

Commit d3df289

Browse files
authored
Update concepts-network-fabric-optionA-optionB.md
1 parent afa9ba5 commit d3df289

File tree

1 file changed

+105
-49
lines changed

1 file changed

+105
-49
lines changed

articles/operator-nexus/concepts-network-fabric-optionA-optionB.md

Lines changed: 105 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ author: jmmason70
55
ms.author: jeffreymason
66
ms.service: azure-operator-nexus
77
ms.topic: concept-article
8-
ms.date: 02/07/2025
8+
ms.date: 02/11/2025
99
---
1010

1111
# Network Fabric OptionA and OptionB
12-
***DRAFT***
1312

1413
BGP (Border Gateway Protocol) is a protocol used on the internet between routers to allow traffic to be routed between Autonomous Systems (AS). Autonomous Systems use BGP to advertise to their peers which IPs they can route to and which AS(S) they'll go through to get there. For example, an ISP (Internet Service Provider) advertises traffic to enter their network via their ingress points. They will then advertise they know how to route to the public IPs on their network, without them having to share how they do that routing internally.
1514

@@ -24,68 +23,125 @@ Option B: This option is more complex but supports IPv4, IPv6, and multicast in
2423
For more information on Multi-Autonomous Systems, see section 10 of [RFC 4364](https://www.ietf.org/rfc/rfc4364.txt).
2524

2625

27-
***Access Control Lists (ACLs)*** \
28-
ACLs (Permit & Deny) at an NNI (Network-to-Network Interface) Level protect SSH access on a Management VPN. Network Access control lists can be applied before provisioning Network Fabric. This limitation is temporary and will be removed in future release.
29-
Ingress and Egress ACLs are created before creation of NNI resources and referenced into NNI payload. When NNI resources are created, it also creates referenced ingress and egress ACLs. This activity needs to be performed before provisioning the Network Fabric.
26+
## Create a Network Fabric
3027

3128
The following steps (with examples) are used in creating and provisioning a Nexus Network Fabric.
3229

3330
1. Create Fabric
3431

35-
Create a Network Fabric with option A Properties
32+
**Create a Network Fabric with option A Properties**
3633

37-
````
38-
az networkfabric fabric create --resource-group "<NFResourceGroup>" --location "<Location>" --resource-name "<NFname>" --nf-sku "NFSKU" --fabric-version "x.x.x" --nfc-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/example-NFC" --fabric-asn 20 --ipv4-prefix "x.x.x.x/19" --rack-count 2 --server-count-per-rack 5 --ts-config "{primaryIpv4Prefix:'x.x.0.0/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:1234}" --managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31'}},workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31',primaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127',secondaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127'}}}"
39-
````
34+
```azurecli
35+
36+
az networkfabric fabric create \
37+
--resource-group "<NFResourceGroup>"
38+
--location "<Location>" \
39+
--resource-name "<NFName>" \
40+
--nf-sku "<NFSKU>" \
41+
--fabric-version "x.x.x" \
42+
--nfc-id "/subscriptions/<subscription_id>/resourceGroups/<NFResourceGroup>/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/<NFCName>" \
43+
--fabric-asn 65048 \
44+
--ipv4-prefix x.x.x.x/19 \
45+
--rack-count 4 \
46+
--server-count-per-rack 8 \
47+
--ts-config "{primaryIpv4Prefix:'x.x.0.0/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:<TS_SN>}" \
48+
--managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31'}},workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31',primaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127',secondaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127'}}}" --debug --no-wait
49+
50+
```
51+
> [!Note]
52+
> * if it's a four racks set up then the rack count would be 4
53+
> * if it's an eight rack set up then the rack count would be 8
4054
4155

42-
Create a Network Fabric with option B Properties
56+
**Create a Network Fabric with option B Properties**
57+
58+
```azurecli
59+
60+
az networkfabric fabric create \
61+
--resource-group "<NFResourceGroup>"
62+
--location "<Location>" \
63+
--resource-name "<NFName>" \
64+
--nf-sku "<NFSKU>" \
65+
--fabric-version "x.x.x" \
66+
--nfc-id "/subscriptions/<subscription_id>/resourceGroups/<NFResourceGroup>/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/<NFCName>" \
67+
--fabric-asn 65048 \
68+
--ipv4-prefix "x.x.x.x/19" \
69+
--ipv6-prefix "fd02:0000:7748:0140::/59" \
70+
--rack-count 8 \
71+
--server-count-per-rack 16 \
72+
--ts-config '{"primaryIpv4Prefix": "x.x.x.x/30", "secondaryIpv4Prefix": "x.x.x.x/30", "username": "'$TS_USER'", "password": "'$TS_PASSWORD'", "serialNumber": "<TS_SN>", "primaryIpv6Prefix": "fd00:0:7748:016e::/64", "secondaryIpv6Prefix": "fd00:0:7748:016f::/64"}' \
73+
--managed-network-config '{"infrastructureVpnConfiguration": {"peeringOption": "OptionB", "optionBProperties": {"routeTargets": {"exportIpv4RouteTargets": ["13979:2928504", "13979:106948"], "exportIpv6RouteTargets": ["13979:2928504", "13979:106948"], "importIpv4RouteTargets": ["13979:2928504", "13979:106947"], "importIpv6RouteTargets": ["13979:2928504", "13979:106947"]}}}, "workloadVpnConfiguration": {"peeringOption": "OptionB", "optionBProperties": {"routeTargets": {"exportIpv4RouteTargets": ["13979:2928516"], "exportIpv6RouteTargets": ["13979:2928516"], "importIpv4RouteTargets": ["13979:2928516"], "importIpv6RouteTargets": ["13979:2928516"]}}}}' --debug --no-wait
74+
75+
```
76+
> [!Note]
77+
> * if it's a four racks set up then the rack count would be 4
78+
> * if it's an eight rack set up then the rack count would be 8
4379
44-
````
45-
az networkfabric fabric create --resource-group "<NFResourceGroup>" --location "<Location>" --resource-name "<NFname>" --nf-sku "NFSKU" --fabric-version "x.x.x" --nfc-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/example-NFC" --fabric-asn 20 --ipv4-prefix x.x.x.x/19 --rack-count 2 --server-count-per-rack 5 --ts-config "{primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:'1234'}"
46-
--managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionB,optionBProperties:{routeTargets:{exportIpv4RouteTargets:['65046:10039'],exportIpv6RouteTargets:['65046:10039'],importIpv4RouteTargets:['65046:10039'],importIpv6RouteTargets:['65046:10039']}}},
47-
workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionB,optionBProperties:{routeTargets:{exportIpv4RouteTargets:['65046:10039'],exportIpv6RouteTargets:['65046:10039'],importIpv4RouteTargets:['65046:10039'],importIpv6RouteTargets:['65046:10039']}}}}"
48-
````
4980

5081
2. Create NNI ingress and egress ACLs
5182

52-
Create ingress ACL
53-
54-
````
55-
az networkfabric acl create --resource-group "<NFResourceGroup>" \
56-
--location "<Location>" \
57-
--resource-name "<example-Ipv4ingressACL>" \
58-
--configuration-type "Inline" \
59-
--default-action "Permit" \
60-
--dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]" \
61-
--match-configurations "[{matchConfigurationName:'example-match',sequenceNumber:123,ipAddressType:IPv4,matchConditions:[{etherTypes:['0x1'],fragments:['0xff00-0xffff'],ipLengths:['4094-9214'],ttlValues:[23],dscpMarkings:[32],portCondition:{flags:[established],portType:SourcePort,layer4Protocol:TCP,ports:['1-20']},protocolTypes:[TCP],vlanMatchCondition:{vlans:['20-30'],innerVlans:[30]},ipCondition:{type:SourceIP,prefixType:Prefix,ipPrefixValues:['x.x.x.x/12']}}],actions:[{type:Count,counterName:'example-counter'}]}]"
62-
````
63-
64-
Create egress ACL
65-
66-
````
67-
az networkfabric acl create --resource-group "<NFResourceGroup>" \
68-
--location "<Location>" \
69-
--resource-name "<example-Ipv4egressACL>" \
70-
--configuration-type "File" \
71-
--acls-url "https://ACL-Storage-URL" --default-action "Permit" \
72-
--dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]"
73-
````
83+
**Create ingress ACL**
84+
85+
```azurecli
86+
87+
az networkfabric acl create --resource-group "<NFResourceGroup>" \
88+
--location "<Location>" \
89+
--resource-name "<example-Ipv4ingressACL>" \
90+
--configuration-type "Inline" \
91+
--default-action "Permit" \
92+
--dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]" \
93+
--match-configurations "[{matchConfigurationName:'example-match',sequenceNumber:123,ipAddressType:IPv4,matchConditions:[{etherTypes:['0x1'],fragments:['0xff00-0xffff'],ipLengths:['4094-9214'],ttlValues:[23],dscpMarkings:[32],portCondition:{flags:[established],portType:SourcePort,layer4Protocol:TCP,ports:['1-20']},protocolTypes:[TCP],vlanMatchCondition:{vlans:['20-30'],innerVlans:[30]},ipCondition:{type:SourceIP,prefixType:Prefix,ipPrefixValues:['x.x.x.x/12']}}],actions:[{type:Count,counterName:'example-counter'}]}]"
94+
95+
````
96+
97+
**Create egress ACL**
98+
99+
```azurecli
100+
101+
az networkfabric acl create --resource-group "<NFResourceGroup>" \
102+
--location "<Location>" \
103+
--resource-name "<example-Ipv4egressACL>" \
104+
--configuration-type "File" \
105+
--acls-url "https://ACL-Storage-URL" --default-action "Permit" \
106+
--dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]"
107+
108+
````
74109
75110
3. Create NNI (Network-to-NetworkInterface). Completed after the fabric create but before device update and fabric provision.
76111
77-
````
78-
az networkfabric nni create --resource-group "<NFResourceGroup>" --fabric "<NFFabric>" --resource-name "<NFNNIName>" --nni-type "CE" --is-management-type "True" --use-option-b "True" --layer2-configuration "{interfaces:['/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkDevices/example-networkDevice/networkInterfaces/example-interface'],mtu:1500}" --option-b-layer3-configuration "{peerASN:28,vlanId:501,primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',primaryIpv6Prefix:'10:2:0:124::400/127',secondaryIpv6Prefix:'10:2:0:124::402/127'}" --ingress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4ingressACL" --egress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4egressACL"
79-
````
112+
```azurecli
113+
114+
az networkfabric nni create --resource-group "<NFResourceGroup>" \
115+
--fabric "<NFFabric>" \
116+
--resource-name "<NFNNIName>" \
117+
--nni-type "CE" \
118+
--is-management-type "True" \
119+
--use-option-b "True" \
120+
--layer2-configuration "{interfaces:['/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkDevices/example-networkDevice/networkInterfaces/example-interface'],mtu:1500}" \
121+
--option-b-layer3-configuration "{peerASN:28,vlanId:501,primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',primaryIpv6Prefix:'10:2:0:124::400/127',secondaryIpv6Prefix:'10:2:0:124::402/127'}" \
122+
--ingress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4ingressACL" \
123+
--egress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4egressACL"
124+
125+
````
80126
81127
4. Update devices
82128
83-
````
84-
az networkfabric device update --resource-group "<NFResourceGroup>" --resource-name "<Network-Device-Name>" --host-name <example-device-hostname> --serial-number <NF_DEVICE_SN>
85-
````
86-
87-
5. Provision network fabric
88-
89-
````
90-
az networkfabric fabric provision --resource-group "<NFResourceGroup>" --resource-name "<NFName>"
91-
````
129+
The following command should be run for each network fabric device.
130+
131+
```azurecli
132+
133+
az networkfabric device update --resource-group "<NFResourceGroup>" \
134+
--resource-name "<Network-Device-Name>" \
135+
--host-name <example-device-hostname> \
136+
--serial-number <NF_DEVICE_SN>
137+
138+
````
139+
140+
6. Provision network fabric
141+
142+
```azurecli
143+
144+
az networkfabric fabric provision --resource-group "<NFResourceGroup>" \
145+
--resource-name "<NFName>"
146+
147+
````

0 commit comments

Comments
 (0)