From 1f09c1ddce30ba5339da0581096d6432e69265b6 Mon Sep 17 00:00:00 2001 From: Qi Ni Date: Tue, 21 May 2024 15:23:22 +0800 Subject: [PATCH] fix: Ensure vnet ID will be attached to backend pool in local service reconciliation loops --- .../azure_loadbalancer_backendpool.go | 38 ++++++++++++++----- pkg/provider/azure_local_services_test.go | 4 ++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/pkg/provider/azure_loadbalancer_backendpool.go b/pkg/provider/azure_loadbalancer_backendpool.go index bd63ed3958..992059b7fa 100644 --- a/pkg/provider/azure_loadbalancer_backendpool.go +++ b/pkg/provider/azure_loadbalancer_backendpool.go @@ -388,13 +388,21 @@ func newBackendPoolTypeNodeIP(c *Cloud) BackendPool { return &backendPoolTypeNodeIP{c} } +func (az *Cloud) getVnetResourceID() string { + rg := az.ResourceGroup + if len(az.VnetResourceGroup) > 0 { + rg = az.VnetResourceGroup + } + return fmt.Sprintf( + "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s", + az.SubscriptionID, + rg, + az.VnetName, + ) +} + func (bi *backendPoolTypeNodeIP) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, _, _, clusterName, lbName string, backendPool network.BackendAddressPool) error { isIPv6 := isBackendPoolIPv6(pointer.StringDeref(backendPool.Name, "")) - vnetResourceGroup := bi.ResourceGroup - if len(bi.VnetResourceGroup) > 0 { - vnetResourceGroup = bi.VnetResourceGroup - } - vnetID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s", bi.SubscriptionID, vnetResourceGroup, bi.VnetName) var ( changed bool @@ -425,10 +433,6 @@ func (bi *backendPoolTypeNodeIP) EnsureHostsInPool(service *v1.Service, nodes [] lbBackendPoolName := bi.getBackendPoolNameForService(service, clusterName, isIPv6) if strings.EqualFold(pointer.StringDeref(backendPool.Name, ""), lbBackendPoolName) && backendPool.BackendAddressPoolPropertiesFormat != nil { - backendPool.VirtualNetwork = &network.SubResource{ - ID: &vnetID, - } - if backendPool.LoadBalancerBackendAddresses == nil { lbBackendPoolAddresses := make([]network.LoadBalancerBackendAddress, 0) backendPool.LoadBalancerBackendAddresses = &lbBackendPoolAddresses @@ -792,6 +796,22 @@ func newBackendPool(lb *network.LoadBalancer, isBackendPoolPreConfigured bool, p } func (az *Cloud) addNodeIPAddressesToBackendPool(backendPool *network.BackendAddressPool, nodeIPAddresses []string) bool { + vnetID := az.getVnetResourceID() + if backendPool.BackendAddressPoolPropertiesFormat != nil { + if backendPool.VirtualNetwork == nil || + backendPool.VirtualNetwork.ID == nil { + backendPool.VirtualNetwork = &network.SubResource{ + ID: &vnetID, + } + } + } else { + backendPool.BackendAddressPoolPropertiesFormat = &network.BackendAddressPoolPropertiesFormat{ + VirtualNetwork: &network.SubResource{ + ID: &vnetID, + }, + } + } + if backendPool.LoadBalancerBackendAddresses == nil { lbBackendPoolAddresses := make([]network.LoadBalancerBackendAddress, 0) backendPool.LoadBalancerBackendAddresses = &lbBackendPoolAddresses diff --git a/pkg/provider/azure_local_services_test.go b/pkg/provider/azure_local_services_test.go index 34cfd8e8e3..57d1231958 100644 --- a/pkg/provider/azure_local_services_test.go +++ b/pkg/provider/azure_local_services_test.go @@ -27,6 +27,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/stretchr/testify/assert" + "go.uber.org/mock/gomock" v1 "k8s.io/api/core/v1" @@ -397,6 +398,9 @@ func getTestBackendAddressPoolWithIPs(lbName, bpName string, ips []string) netwo ID: pointer.String(fmt.Sprintf("/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Network/loadBalancers/%s/backendAddressPools/%s", lbName, bpName)), Name: pointer.String(bpName), BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ + VirtualNetwork: &network.SubResource{ + ID: pointer.String("/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet"), + }, Location: pointer.String("eastus"), LoadBalancerBackendAddresses: &[]network.LoadBalancerBackendAddress{}, },