in pkg/providers/instance/instance.go [286:336]
func (p *DefaultProvider) newNetworkInterfaceForVM(opts *createNICOptions) armnetwork.Interface {
var ipv4BackendPools []*armnetwork.BackendAddressPool
for _, poolID := range opts.BackendPools.IPv4PoolIDs {
ipv4BackendPools = append(ipv4BackendPools, &armnetwork.BackendAddressPool{
ID: &poolID,
})
}
skuAcceleratedNetworkingRequirements := scheduling.NewRequirements(
scheduling.NewRequirement(v1alpha2.LabelSKUAcceleratedNetworking, v1.NodeSelectorOpIn, "true"))
enableAcceleratedNetworking := false
if err := opts.InstanceType.Requirements.Compatible(skuAcceleratedNetworkingRequirements); err == nil {
enableAcceleratedNetworking = true
}
nic := armnetwork.Interface{
Location: lo.ToPtr(p.location),
Properties: &armnetwork.InterfacePropertiesFormat{
IPConfigurations: []*armnetwork.InterfaceIPConfiguration{
{
Name: &opts.NICName,
Properties: &armnetwork.InterfaceIPConfigurationPropertiesFormat{
Primary: lo.ToPtr(true),
PrivateIPAllocationMethod: lo.ToPtr(armnetwork.IPAllocationMethodDynamic),
LoadBalancerBackendAddressPools: ipv4BackendPools,
},
},
},
EnableAcceleratedNetworking: lo.ToPtr(enableAcceleratedNetworking),
EnableIPForwarding: lo.ToPtr(false),
},
}
if opts.NetworkPlugin == consts.NetworkPluginAzure && opts.NetworkPluginMode != consts.NetworkPluginModeOverlay {
// AzureCNI without overlay requires secondary IPs, for pods. (These IPs are not included in backend address pools.)
// NOTE: Unlike AKS RP, this logic does not reduce secondary IP count by the number of expected hostNetwork pods, favoring simplicity instead
for i := 1; i < int(opts.MaxPods); i++ {
nic.Properties.IPConfigurations = append(
nic.Properties.IPConfigurations,
&armnetwork.InterfaceIPConfiguration{
Name: lo.ToPtr(fmt.Sprintf("ipconfig%d", i)),
Properties: &armnetwork.InterfaceIPConfigurationPropertiesFormat{
Primary: lo.ToPtr(false),
PrivateIPAllocationMethod: lo.ToPtr(armnetwork.IPAllocationMethodDynamic),
},
},
)
}
}
return nic
}