Skip to content

Commit b8caeb9

Browse files
committed
Add syncDefaultPodRanges change for Multi-networking default Param and Network
- GNP controller reads the new pod ranges from node label for default Paramset - If the pod range is not part of the default Paramset, GNP controller updates the default Paramset with the new ranges and marks default Network notReady
1 parent 202bcb4 commit b8caeb9

File tree

7 files changed

+878
-184
lines changed

7 files changed

+878
-184
lines changed

cmd/cloud-controller-manager/gkenetworkparamsetcontroller.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package main
33
import (
44
"context"
55
"fmt"
6+
"net"
67
"time"
78

89
cloudprovider "k8s.io/cloud-provider"
910
networkclientset "k8s.io/cloud-provider-gcp/crd/client/network/clientset/versioned"
1011
networkinformers "k8s.io/cloud-provider-gcp/crd/client/network/informers/externalversions"
1112
gkenetworkparamsetcontroller "k8s.io/cloud-provider-gcp/pkg/controller/gkenetworkparamset"
13+
"k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/ipam"
1214
"k8s.io/cloud-provider-gcp/providers/gce"
1315
"k8s.io/cloud-provider/app"
1416
cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
@@ -40,18 +42,50 @@ func startGkeNetworkParamsController(ccmConfig *cloudcontrollerconfig.CompletedC
4042
return nil, false, err
4143
}
4244

45+
// the CloudAllocator needs cluster cidrs for default GNP
46+
clusterCIDRs := []*net.IPNet{}
47+
if ipam.CIDRAllocatorType(ccmConfig.ComponentConfig.KubeCloudShared.CIDRAllocatorType) == ipam.CloudAllocatorType {
48+
clusterCIDRs, err = validClusterCIDR(ccmConfig.ComponentConfig.KubeCloudShared.ClusterCIDR)
49+
if err != nil {
50+
return nil, false, err
51+
}
52+
}
53+
4354
nwInfFactory := networkinformers.NewSharedInformerFactory(networkClient, 30*time.Second)
4455
nwInformer := nwInfFactory.Networking().V1().Networks()
4556
gnpInformer := nwInfFactory.Networking().V1().GKENetworkParamSets()
4657

4758
gkeNetworkParamsetController := gkenetworkparamsetcontroller.NewGKENetworkParamSetController(
59+
controllerCtx.InformerFactory.Core().V1().Nodes(),
4860
networkClient,
4961
gnpInformer,
5062
nwInformer,
5163
gceCloud,
5264
nwInfFactory,
65+
clusterCIDRs,
5366
)
5467

5568
go gkeNetworkParamsetController.Run(1, controllerCtx.Stop, controllerCtx.ControllerManagerMetrics)
5669
return nil, true, nil
5770
}
71+
72+
// validClusterCIDR process CIDR form config and validates the cluster CIDR
73+
// with stack type and returns a list of typed cidrs and error
74+
func validClusterCIDR(clusterCIDRFromFlag string) ([]*net.IPNet, error) {
75+
// failure: bad cidrs in config
76+
clusterCIDRs, dualStack, err := processCIDRs(clusterCIDRFromFlag)
77+
if err != nil {
78+
return nil, err
79+
}
80+
81+
// failure: more than one cidr but they are not configured as dual stack
82+
if len(clusterCIDRs) > 1 && !dualStack {
83+
return nil, fmt.Errorf("len of ClusterCIDRs==%v and they are not configured as dual stack (at least one from each IPFamily", len(clusterCIDRs))
84+
}
85+
86+
// failure: more than cidrs is not allowed even with dual stack
87+
if len(clusterCIDRs) > 2 {
88+
return nil, fmt.Errorf("len of clusters is:%v > more than max allowed of 2", len(clusterCIDRs))
89+
}
90+
return clusterCIDRs, nil
91+
}

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
572572
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
573573
sigs.k8s.io/controller-tools v0.12.0 h1:TY6CGE6+6hzO7hhJFte65ud3cFmmZW947jajXkuDfBw=
574574
sigs.k8s.io/controller-tools v0.12.0/go.mod h1:rXlpTfFHZMpZA8aGq9ejArgZiieHd+fkk/fTatY8A2M=
575+
sigs.k8s.io/controller-tools v0.13.0 h1:NfrvuZ4bxyolhDBt/rCZhDnx3M2hzlhgo5n3Iv2RykI=
576+
sigs.k8s.io/controller-tools v0.13.0/go.mod h1:5vw3En2NazbejQGCeWKRrE7q4P+CW8/klfVqP8QZkgA=
575577
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
576578
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
577579
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=

pkg/controller/gkenetworkparamset/BUILD

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,20 @@ go_library(
1111
visibility = ["//visibility:public"],
1212
deps = [
1313
"//pkg/controllermetrics",
14+
"//pkg/util/node",
1415
"//providers/gce",
1516
"//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud",
1617
"//vendor/github.com/hashicorp/go-multierror",
1718
"//vendor/google.golang.org/api/compute/v1:compute",
19+
"//vendor/k8s.io/api/core/v1:core",
1820
"//vendor/k8s.io/apimachinery/pkg/api/errors",
1921
"//vendor/k8s.io/apimachinery/pkg/api/meta",
2022
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:meta",
2123
"//vendor/k8s.io/apimachinery/pkg/labels",
2224
"//vendor/k8s.io/apimachinery/pkg/util/runtime",
2325
"//vendor/k8s.io/apimachinery/pkg/util/wait",
26+
"//vendor/k8s.io/client-go/informers/core/v1:core",
27+
"//vendor/k8s.io/client-go/listers/core/v1:core",
2428
"//vendor/k8s.io/client-go/tools/cache",
2529
"//vendor/k8s.io/client-go/util/workqueue",
2630
"//vendor/k8s.io/cloud-provider-gcp/crd/apis/network/v1:network",
@@ -31,6 +35,8 @@ go_library(
3135
"//vendor/k8s.io/component-base/metrics/legacyregistry",
3236
"//vendor/k8s.io/component-base/metrics/prometheus/controllers",
3337
"//vendor/k8s.io/klog/v2:klog",
38+
"//vendor/k8s.io/utils/net",
39+
"//vendor/k8s.io/utils/strings/slices",
3440
],
3541
)
3642

@@ -39,14 +45,19 @@ go_test(
3945
srcs = ["gkenetworkparamset_controller_test.go"],
4046
embed = [":gkenetworkparamset"],
4147
deps = [
48+
"//pkg/util/node",
4249
"//providers/gce",
4350
"//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta",
4451
"//vendor/github.com/onsi/gomega",
4552
"//vendor/github.com/onsi/gomega/types",
4653
"//vendor/google.golang.org/api/compute/v1:compute",
54+
"//vendor/k8s.io/api/core/v1:core",
4755
"//vendor/k8s.io/apimachinery/pkg/api/errors",
4856
"//vendor/k8s.io/apimachinery/pkg/api/meta",
4957
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:meta",
58+
"//vendor/k8s.io/client-go/informers",
59+
"//vendor/k8s.io/client-go/kubernetes/fake",
60+
"//vendor/k8s.io/client-go/tools/cache",
5061
"//vendor/k8s.io/cloud-provider-gcp/crd/apis/network/v1:network",
5162
"//vendor/k8s.io/cloud-provider-gcp/crd/client/network/clientset/versioned/fake",
5263
"//vendor/k8s.io/cloud-provider-gcp/crd/client/network/informers/externalversions",

0 commit comments

Comments
 (0)