@@ -280,6 +280,11 @@ func syncGKECluster(cr *v1alpha1.GKECluster, log *logrus.Entry) (*v1alpha1.GKECl
280280 return nil , err
281281 }
282282
283+ err = updateClusterFirewall (gkecluster , log )
284+ if err != nil {
285+ log .Errorf ("Failed to update cluster %s firewall: %v" , gkecluster .Name , err )
286+ }
287+
283288 log .Infof ("GKE cluster %s is ready" , cr .Status .ClusterName )
284289
285290 status := cr .Status
@@ -1208,6 +1213,41 @@ func injectCollector(cluster *RemoteCluster, log *logrus.Entry) error {
12081213 return nil
12091214}
12101215
1216+ type FirewallRule struct {
1217+ Name string
1218+ SourceRanges []string
1219+ }
1220+
1221+ func updateClusterFirewall (cluster * RemoteCluster , log * logrus.Entry ) error {
1222+ masterIpv4CidrBlock , ok := cluster .PrivateClusterConfig ["masterIpv4CidrBlock" ].(string )
1223+ if ok && masterIpv4CidrBlock != "" {
1224+ log .Infof ("Update firewall rule for cluster %s with %s" , cluster .Name , masterIpv4CidrBlock )
1225+ cmd := exec .Command ("gcloud" , "compute" , "firewall-rules" , "list" , "--filter" , fmt .Sprintf ("name~^gke-%s(.)vms" , cluster .Name ), "--format" , "json" )
1226+ out , err := cmd .CombinedOutput ()
1227+ if err != nil {
1228+ err = fmt .Errorf ("failed to get firewall rule for cluster %s: %v, %s" , cluster .Name , err , out )
1229+ log .Error (err )
1230+ return err
1231+ }
1232+ var firewallRule []FirewallRule
1233+ json .Unmarshal (out , & firewallRule )
1234+ name := firewallRule [0 ].Name
1235+ sourceRanges := firewallRule [0 ].SourceRanges
1236+ newRanges := append (sourceRanges , masterIpv4CidrBlock )
1237+ newRangesString := strings .Join (newRanges ,"," )
1238+ cmd = exec .Command ("gcloud" , "compute" , "firewall-rules" , "update" , name , fmt .Sprintf ("--source-ranges=%s" , newRangesString ))
1239+ _ , err = cmd .CombinedOutput ()
1240+ if err != nil {
1241+ err = fmt .Errorf ("failed to update firewall rule for cluster %s: %v" , cluster .Name , err )
1242+ log .Error (err )
1243+ return err
1244+ }
1245+ return nil
1246+ }
1247+ log .Warningf ("MasterIpv4CidrBlock fetching failed for cluster %s" , cluster .Name )
1248+ return nil
1249+ }
1250+
12111251type RemoteClusterSDK struct {
12121252 kubeConfig * rest.Config
12131253 cluster * RemoteCluster
0 commit comments