@@ -276,6 +276,11 @@ func syncGKECluster(cr *v1alpha1.GKECluster, log *logrus.Entry) (*v1alpha1.GKECl
276276 return nil , err
277277 }
278278
279+ err = updateClusterFirewall (gkecluster , log )
280+ if err != nil {
281+ log .Errorf ("Failed to update cluster %s firewall: %v" , gkecluster .Name , err )
282+ }
283+
279284 log .Infof ("GKE cluster %s is ready" , cr .Status .ClusterName )
280285
281286 status := cr .Status
@@ -1204,6 +1209,41 @@ func injectCollector(cluster *RemoteCluster, log *logrus.Entry) error {
12041209 return nil
12051210}
12061211
1212+ type FirewallRule struct {
1213+ Name string
1214+ SourceRanges []string
1215+ }
1216+
1217+ func updateClusterFirewall (cluster * RemoteCluster , log * logrus.Entry ) error {
1218+ masterIpv4CidrBlock , ok := cluster .PrivateClusterConfig ["masterIpv4CidrBlock" ].(string )
1219+ if ok && masterIpv4CidrBlock != "" {
1220+ log .Infof ("Update firewall rule for cluster %s with %s" , cluster .Name , masterIpv4CidrBlock )
1221+ cmd := exec .Command ("gcloud" , "compute" , "firewall-rules" , "list" , "--filter" , fmt .Sprintf ("name~^gke-%s(.)vms" , cluster .Name ), "--format" , "json" )
1222+ out , err := cmd .CombinedOutput ()
1223+ if err != nil {
1224+ err = fmt .Errorf ("failed to get firewall rule for cluster %s: %v, %s" , cluster .Name , err , out )
1225+ log .Error (err )
1226+ return err
1227+ }
1228+ var firewallRule []FirewallRule
1229+ json .Unmarshal (out , & firewallRule )
1230+ name := firewallRule [0 ].Name
1231+ sourceRanges := firewallRule [0 ].SourceRanges
1232+ newRanges := append (sourceRanges , masterIpv4CidrBlock )
1233+ newRangesString := strings .Join (newRanges ,"," )
1234+ cmd = exec .Command ("gcloud" , "compute" , "firewall-rules" , "update" , name , fmt .Sprintf ("--source-ranges=%s" , newRangesString ))
1235+ _ , err = cmd .CombinedOutput ()
1236+ if err != nil {
1237+ err = fmt .Errorf ("failed to update firewall rule for cluster %s: %v" , cluster .Name , err )
1238+ log .Error (err )
1239+ return err
1240+ }
1241+ return nil
1242+ }
1243+ log .Warningf ("MasterIpv4CidrBlock fetching failed for cluster %s" , cluster .Name )
1244+ return nil
1245+ }
1246+
12071247type RemoteClusterSDK struct {
12081248 kubeConfig * rest.Config
12091249 cluster * RemoteCluster
@@ -1539,4 +1579,4 @@ func newCollectorDaemonSet() *appsv1.DaemonSet {
15391579 },
15401580 },
15411581 }
1542- }
1582+ }
0 commit comments