Skip to content

Commit bb3e042

Browse files
committed
feat: support privateendpoint
1 parent 9670cd9 commit bb3e042

17 files changed

+313
-180
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,5 @@ replace (
163163
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.26.0
164164
k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.26.0
165165
k8s.io/sample-controller => k8s.io/sample-controller v0.26.0
166+
sigs.k8s.io/cloud-provider-azure => ../cloud-provider-azure
166167
)

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -850,8 +850,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
850850
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
851851
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33 h1:LYqFq+6Cj2D0gFfrJvL7iElD4ET6ir3VDdhDdTK7rgc=
852852
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33/go.mod h1:soWkSNf2tZC7aMibXEqVhCd73GOY5fJikn8qbdzemB0=
853-
sigs.k8s.io/cloud-provider-azure v1.26.1-0.20221220090543-dea11d70f108 h1:Kg/IISal/+xjLdJITsxLY5OydOM3/bMxSRu34Jyhn78=
854-
sigs.k8s.io/cloud-provider-azure v1.26.1-0.20221220090543-dea11d70f108/go.mod h1:7ksoxa026xKQGAc0HYGk1ksucEweJnwxXiuk3krfP4c=
855853
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
856854
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
857855
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=

pkg/blob/blob.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ const (
9292
vnetNameField = "vnetname"
9393
subnetNameField = "subnetname"
9494
accessTierField = "accesstier"
95+
networkEndpointTypeField = "networkendpointtype"
9596
mountPermissionsField = "mountpermissions"
9697
useDataPlaneAPIField = "usedataplaneapi"
9798

@@ -122,6 +123,8 @@ const (
122123
pvNameMetadata = "${pv.metadata.name}"
123124

124125
VolumeID = "volumeid"
126+
127+
defaultStorageEndPointSuffix = "core.windows.net"
125128
)
126129

127130
var (

pkg/blob/controllerserver.go

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,14 @@ import (
3636
"sigs.k8s.io/blob-csi-driver/pkg/util"
3737
azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache"
3838
"sigs.k8s.io/cloud-provider-azure/pkg/metrics"
39+
"sigs.k8s.io/cloud-provider-azure/pkg/provider"
3940
azure "sigs.k8s.io/cloud-provider-azure/pkg/provider"
4041
)
4142

43+
const (
44+
privateEndpoint = "privateendpoint"
45+
)
46+
4247
// CreateVolume provisions a volume
4348
func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
4449
if err := d.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
@@ -69,7 +74,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
6974
}
7075
var storageAccountType, subsID, resourceGroup, location, account, containerName, containerNamePrefix, protocol, customTags, secretName, secretNamespace, pvcNamespace string
7176
var isHnsEnabled, requireInfraEncryption *bool
72-
var vnetResourceGroup, vnetName, subnetName, accessTier string
77+
var vnetResourceGroup, vnetName, subnetName, accessTier, networkEndpointType, storageEndpointSuffix string
7378
var matchTags, useDataPlaneAPI bool
7479
// set allowBlobPublicAccess as false by default
7580
allowBlobPublicAccess := pointer.Bool(false)
@@ -135,7 +140,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
135140
case serverNameField:
136141
// no op, only used in NodeStageVolume
137142
case storageEndpointSuffixField:
138-
// no op, only used in NodeStageVolume
143+
storageEndpointSuffix = v
139144
case vnetResourceGroupField:
140145
vnetResourceGroup = v
141146
case vnetNameField:
@@ -144,6 +149,8 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
144149
subnetName = v
145150
case accessTierField:
146151
accessTier = v
152+
case networkEndpointTypeField:
153+
networkEndpointType = v
147154
case mountPermissionsField:
148155
// only do validations here, used in NodeStageVolume, NodePublishVolume
149156
if v != "" {
@@ -201,6 +208,10 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
201208
}
202209

203210
enableHTTPSTrafficOnly := true
211+
createPrivateEndpoint := false
212+
if strings.EqualFold(networkEndpointType, privateEndpoint) {
213+
createPrivateEndpoint = true
214+
}
204215
accountKind := string(storage.KindStorageV2)
205216
var (
206217
vnetResourceIDs []string
@@ -209,15 +220,17 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
209220
if protocol == NFS {
210221
isHnsEnabled = pointer.Bool(true)
211222
enableNfsV3 = pointer.Bool(true)
212-
// set VirtualNetworkResourceIDs for storage account firewall setting
213-
vnetResourceID := d.getSubnetResourceID(vnetResourceGroup, vnetName, subnetName)
214-
klog.V(2).Infof("set vnetResourceID(%s) for NFS protocol", vnetResourceID)
215-
vnetResourceIDs = []string{vnetResourceID}
216-
if err := d.updateSubnetServiceEndpoints(ctx, vnetResourceGroup, vnetName, subnetName); err != nil {
217-
return nil, status.Errorf(codes.Internal, "update service endpoints failed with error: %v", err)
218-
}
219223
// NFS protocol does not need account key
220224
storeAccountKey = false
225+
if !createPrivateEndpoint {
226+
// set VirtualNetworkResourceIDs for storage account firewall setting
227+
vnetResourceID := d.getSubnetResourceID(vnetResourceGroup, vnetName, subnetName)
228+
klog.V(2).Infof("set vnetResourceID(%s) for NFS protocol", vnetResourceID)
229+
vnetResourceIDs = []string{vnetResourceID}
230+
if err := d.updateSubnetServiceEndpoints(ctx, vnetResourceGroup, vnetName, subnetName); err != nil {
231+
return nil, status.Errorf(codes.Internal, "update service endpoints failed with error: %v", err)
232+
}
233+
}
221234
}
222235

223236
if strings.HasPrefix(strings.ToLower(storageAccountType), "premium") {
@@ -235,6 +248,14 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
235248
return nil, status.Errorf(codes.InvalidArgument, err.Error())
236249
}
237250

251+
if strings.TrimSpace(storageEndpointSuffix) == "" {
252+
if d.cloud.Environment.StorageEndpointSuffix != "" {
253+
storageEndpointSuffix = d.cloud.Environment.StorageEndpointSuffix
254+
} else {
255+
storageEndpointSuffix = defaultStorageEndPointSuffix
256+
}
257+
}
258+
238259
accountOptions := &azure.AccountOptions{
239260
Name: account,
240261
Type: storageAccountType,
@@ -254,6 +275,9 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
254275
VNetName: vnetName,
255276
SubnetName: subnetName,
256277
AccessTier: accessTier,
278+
CreatePrivateEndpoint: createPrivateEndpoint,
279+
StorageType: provider.StorageTypeBlob,
280+
StorageEndpointSuffix: storageEndpointSuffix,
257281
}
258282

259283
var accountKey string
@@ -263,7 +287,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
263287
if v, ok := d.volMap.Load(volName); ok {
264288
accountName = v.(string)
265289
} else {
266-
lockKey := fmt.Sprintf("%s%s%s%s%s", storageAccountType, accountKind, resourceGroup, location, protocol)
290+
lockKey := fmt.Sprintf("%s%s%s%s%s%v", storageAccountType, accountKind, resourceGroup, location, protocol, createPrivateEndpoint)
267291
// search in cache first
268292
cache, err := d.accountSearchCache.Get(lockKey, azcache.CacheReadTypeDefault)
269293
if err != nil {
@@ -292,6 +316,10 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
292316
}
293317
}
294318

319+
if createPrivateEndpoint {
320+
setKeyValueInMap(parameters, serverNameField, fmt.Sprintf("%s.blob.%s", accountName, storageEndpointSuffix))
321+
}
322+
295323
accountOptions.Name = accountName
296324
if len(secrets) == 0 && useDataPlaneAPI {
297325
if accountKey == "" {

vendor/modules.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1210,7 +1210,7 @@ k8s.io/utils/trace
12101210
## explicit; go 1.17
12111211
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client
12121212
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client
1213-
# sigs.k8s.io/cloud-provider-azure v1.26.1-0.20221220090543-dea11d70f108
1213+
# sigs.k8s.io/cloud-provider-azure v1.26.1-0.20221220090543-dea11d70f108 => ../cloud-provider-azure
12141214
## explicit; go 1.19
12151215
sigs.k8s.io/cloud-provider-azure/pkg/auth
12161216
sigs.k8s.io/cloud-provider-azure/pkg/azureclients
@@ -1307,3 +1307,4 @@ sigs.k8s.io/yaml
13071307
# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.26.0
13081308
# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.26.0
13091309
# k8s.io/sample-controller => k8s.io/sample-controller v0.26.0
1310+
# sigs.k8s.io/cloud-provider-azure => ../cloud-provider-azure

vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/azure_vmclient.go

Lines changed: 27 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/interface.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient/interface.go

Lines changed: 8 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_common.go

Lines changed: 24 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)