diff --git a/.cr.yaml b/.cr.yaml deleted file mode 100644 index 67aac3e..0000000 --- a/.cr.yaml +++ /dev/null @@ -1,4 +0,0 @@ -owner: KubelanCloud -git-repo: kks-provider-plugin -pages-branch: gh-pages -pages-index-path: index.yaml diff --git a/charts/kks-provider-plugin/Chart.yaml b/charts/kks-provider-plugin/Chart.yaml index 6277e37..2ffa43a 100644 --- a/charts/kks-provider-plugin/Chart.yaml +++ b/charts/kks-provider-plugin/Chart.yaml @@ -1,18 +1,17 @@ apiVersion: v2 name: kks-provider-plugin -description: Combined Kloud provider plugin chart (LoadBalancer + CSI) for kks clusters +description: Combined Kloude provider plugin chart (LoadBalancer + CSI) for kks clusters type: application -version: 1.2.5 -appVersion: "1.1.2" +version: 1.2.6 +appVersion: "1.2.0" kubeVersion: ">=1.28.0-0" -home: https://github.com/KubelanCloud/kks-provider-plugin +home: https://git.kloude.ir/kloude/kks-provider-plugin sources: - - https://github.com/KubelanCloud/kks-provider-plugin + - https://git.kloude.ir/kloude/kks-provider-plugin keywords: - - provider - loadbalancer - csi - storage - - kloud + - kloude maintainers: - - name: Kloud Team + - name: Kloude Tech Team diff --git a/pkg/kloudlb/controller/controller.go b/pkg/kloudlb/controller/controller.go index 3be6861..86db668 100644 --- a/pkg/kloudlb/controller/controller.go +++ b/pkg/kloudlb/controller/controller.go @@ -171,9 +171,10 @@ func (c *Controller) sync(ctx context.Context, key string) error { } lb, err := c.lbClient.Allocate(ctx, provisioner.AllocateRequest{ - Namespace: namespace, - Name: name, - Ports: ports, + Namespace: namespace, + Name: name, + Ports: ports, + LoadBalancerSourceRanges: serviceLoadBalancerSourceRanges(svc), }) if err != nil { return err @@ -279,6 +280,24 @@ func servicePortsToAllocateRules(svc *corev1.Service) ([]provisioner.AllocatePor return out, nil } +func serviceLoadBalancerSourceRanges(svc *corev1.Service) []string { + if svc == nil || len(svc.Spec.LoadBalancerSourceRanges) == 0 { + return nil + } + out := make([]string, 0, len(svc.Spec.LoadBalancerSourceRanges)) + for _, item := range svc.Spec.LoadBalancerSourceRanges { + trimmed := strings.TrimSpace(item) + if trimmed == "" { + continue + } + out = append(out, trimmed) + } + if len(out) == 0 { + return nil + } + return out +} + func containsString(items []string, target string) bool { for _, item := range items { if item == target { diff --git a/pkg/kloudlb/controller/ports_test.go b/pkg/kloudlb/controller/ports_test.go index 15b6364..9fdf4cf 100644 --- a/pkg/kloudlb/controller/ports_test.go +++ b/pkg/kloudlb/controller/ports_test.go @@ -45,3 +45,20 @@ func TestServicePortsToAllocateRulesRejectsNoPorts(t *testing.T) { t.Fatal("expected error for empty ports") } } + +func TestServiceLoadBalancerSourceRanges(t *testing.T) { + svc := &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "web"}, + Spec: corev1.ServiceSpec{ + LoadBalancerSourceRanges: []string{"203.0.113.0/24", " 198.51.100.8/32 ", ""}, + }, + } + + ranges := serviceLoadBalancerSourceRanges(svc) + if len(ranges) != 2 { + t.Fatalf("ranges count = %d, want 2", len(ranges)) + } + if ranges[0] != "203.0.113.0/24" || ranges[1] != "198.51.100.8/32" { + t.Fatalf("unexpected ranges: %#v", ranges) + } +} diff --git a/pkg/lb/provisioner/types.go b/pkg/lb/provisioner/types.go index 7bc0ed0..35ea6ce 100644 --- a/pkg/lb/provisioner/types.go +++ b/pkg/lb/provisioner/types.go @@ -9,9 +9,10 @@ type LoadBalancer struct { } type AllocateRequest struct { - Namespace string `json:"namespace"` - Name string `json:"name"` - Ports []AllocatePortRule `json:"ports,omitempty"` + Namespace string `json:"namespace"` + Name string `json:"name"` + Ports []AllocatePortRule `json:"ports,omitempty"` + LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty"` } type AllocatePortRule struct {