Skip to content

Commit 322b2fe

Browse files
authored
Merge pull request kubernetes#88533 from bowen5/cross-tenant-network-resource
[UseNetworkResourceInDifferentTenant] Fix bug of setting incorrect subscription id on azure network resource clients.
2 parents 20f4b11 + 23340d7 commit 322b2fe

File tree

3 files changed

+103
-4
lines changed

3 files changed

+103
-4
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/azure.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ func (az *Cloud) configAzureClients(
556556
vmssVMClientConfig.Authorizer = multiTenantServicePrincipalTokenAuthorizer
557557
}
558558

559-
// If uses network resources in different AAD Tenant, update Authorizer for network resources client config
559+
// If uses network resources in different AAD Tenant, update SubscriptionID and Authorizer for network resources client config
560560
if networkResourceServicePrincipalToken != nil {
561561
networkResourceServicePrincipalTokenAuthorizer := autorest.NewBearerAuthorizer(networkResourceServicePrincipalToken)
562562
routeClientConfig.Authorizer = networkResourceServicePrincipalTokenAuthorizer
@@ -565,6 +565,13 @@ func (az *Cloud) configAzureClients(
565565
loadBalancerClientConfig.Authorizer = networkResourceServicePrincipalTokenAuthorizer
566566
securityGroupClientConfig.Authorizer = networkResourceServicePrincipalTokenAuthorizer
567567
publicIPClientConfig.Authorizer = networkResourceServicePrincipalTokenAuthorizer
568+
569+
routeClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
570+
subnetClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
571+
routeTableClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
572+
loadBalancerClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
573+
securityGroupClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
574+
publicIPClientConfig.SubscriptionID = az.Config.NetworkResourceSubscriptionID
568575
}
569576

570577
// Initialize all azure clients based on client config

staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (az *Cloud) getAvailabilitySetID(resourceGroup, availabilitySetName string)
9898
func (az *Cloud) getFrontendIPConfigID(lbName, rgName, fipConfigName string) string {
9999
return fmt.Sprintf(
100100
frontendIPConfigIDTemplate,
101-
az.SubscriptionID,
101+
az.getNetworkResourceSubscriptionID(),
102102
rgName,
103103
lbName,
104104
fipConfigName)
@@ -108,7 +108,7 @@ func (az *Cloud) getFrontendIPConfigID(lbName, rgName, fipConfigName string) str
108108
func (az *Cloud) getBackendPoolID(lbName, rgName, backendPoolName string) string {
109109
return fmt.Sprintf(
110110
backendPoolIDTemplate,
111-
az.SubscriptionID,
111+
az.getNetworkResourceSubscriptionID(),
112112
rgName,
113113
lbName,
114114
backendPoolName)
@@ -118,12 +118,20 @@ func (az *Cloud) getBackendPoolID(lbName, rgName, backendPoolName string) string
118118
func (az *Cloud) getLoadBalancerProbeID(lbName, rgName, lbRuleName string) string {
119119
return fmt.Sprintf(
120120
loadBalancerProbeIDTemplate,
121-
az.SubscriptionID,
121+
az.getNetworkResourceSubscriptionID(),
122122
rgName,
123123
lbName,
124124
lbRuleName)
125125
}
126126

127+
// getNetworkResourceSubscriptionID returns the subscription id which hosts network resources
128+
func (az *Cloud) getNetworkResourceSubscriptionID() string {
129+
if az.Config.UsesNetworkResourceInDifferentTenant() {
130+
return az.NetworkResourceSubscriptionID
131+
}
132+
return az.SubscriptionID
133+
}
134+
127135
func (az *Cloud) mapLoadBalancerNameToVMSet(lbName string, clusterName string) (vmSetName string) {
128136
vmSetName = strings.TrimSuffix(lbName, InternalLoadBalancerNameSuffix)
129137
if strings.EqualFold(clusterName, vmSetName) {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ limitations under the License.
1919
package azure
2020

2121
import (
22+
"fmt"
2223
"strconv"
2324
"testing"
2425

@@ -29,6 +30,11 @@ import (
2930
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3031
)
3132

33+
const (
34+
networkResourceTenantID = "networkResourceTenantID"
35+
networkResourceSubscriptionID = "networkResourceSubscriptionID"
36+
)
37+
3238
func TestIsMasterNode(t *testing.T) {
3339
if isMasterNode(&v1.Node{}) {
3440
t.Errorf("Empty node should not be master!")
@@ -416,3 +422,81 @@ func TestGetFrontendIPConfigName(t *testing.T) {
416422
assert.Equal(t, c.expected, ipconfigName, c.description)
417423
}
418424
}
425+
426+
func TestGetFrontendIPConfigID(t *testing.T) {
427+
ctrl := gomock.NewController(t)
428+
defer ctrl.Finish()
429+
az := GetTestCloud(ctrl)
430+
431+
testGetLoadBalancerSubResourceID(t, az, az.getFrontendIPConfigID, frontendIPConfigIDTemplate)
432+
}
433+
434+
func TestGetBackendPoolID(t *testing.T) {
435+
ctrl := gomock.NewController(t)
436+
defer ctrl.Finish()
437+
az := GetTestCloud(ctrl)
438+
439+
testGetLoadBalancerSubResourceID(t, az, az.getBackendPoolID, backendPoolIDTemplate)
440+
}
441+
442+
func TestGetLoadBalancerProbeID(t *testing.T) {
443+
ctrl := gomock.NewController(t)
444+
defer ctrl.Finish()
445+
az := GetTestCloud(ctrl)
446+
447+
testGetLoadBalancerSubResourceID(t, az, az.getLoadBalancerProbeID, loadBalancerProbeIDTemplate)
448+
}
449+
450+
func testGetLoadBalancerSubResourceID(
451+
t *testing.T,
452+
az *Cloud,
453+
getLoadBalancerSubResourceID func(string, string, string) string,
454+
expectedResourceIDTemplate string) {
455+
cases := []struct {
456+
description string
457+
loadBalancerName string
458+
resourceGroupName string
459+
subResourceName string
460+
useNetworkResourceInDifferentTenant bool
461+
expected string
462+
}{
463+
{
464+
description: "resource id should contain NetworkResourceSubscriptionID when using network resources in different subscription",
465+
loadBalancerName: "lbName",
466+
resourceGroupName: "rgName",
467+
subResourceName: "subResourceName",
468+
useNetworkResourceInDifferentTenant: true,
469+
},
470+
{
471+
description: "resource id should contain SubscriptionID when not using network resources in different subscription",
472+
loadBalancerName: "lbName",
473+
resourceGroupName: "rgName",
474+
subResourceName: "subResourceName",
475+
useNetworkResourceInDifferentTenant: false,
476+
},
477+
}
478+
479+
for _, c := range cases {
480+
if c.useNetworkResourceInDifferentTenant {
481+
az.NetworkResourceTenantID = networkResourceTenantID
482+
az.NetworkResourceSubscriptionID = networkResourceSubscriptionID
483+
c.expected = fmt.Sprintf(
484+
expectedResourceIDTemplate,
485+
az.NetworkResourceSubscriptionID,
486+
c.resourceGroupName,
487+
c.loadBalancerName,
488+
c.subResourceName)
489+
} else {
490+
az.NetworkResourceTenantID = ""
491+
az.NetworkResourceSubscriptionID = ""
492+
c.expected = fmt.Sprintf(
493+
expectedResourceIDTemplate,
494+
az.SubscriptionID,
495+
c.resourceGroupName,
496+
c.loadBalancerName,
497+
c.subResourceName)
498+
}
499+
subResourceID := getLoadBalancerSubResourceID(c.loadBalancerName, c.resourceGroupName, c.subResourceName)
500+
assert.Equal(t, c.expected, subResourceID, c.description)
501+
}
502+
}

0 commit comments

Comments
 (0)