code: func getNodeSecurityGroupIDForLB(compute *gophercloud.ServiceClient, network *gophercloud.ServiceClient, nodes []*v1.Node) ([]string, error) {
  	secGroupNames := sets.NewString()
  
  	for _, node := range nodes {
  		nodeName := types.NodeName(node.Name)
  		srv, err := getServerByName(compute, nodeName)
  		if err != nil {
  			return []string{}, err
  		}
  
  		// use the first node-security-groups
  		// case 0: node1:SG1  node2:SG1  return SG1
  		// case 1: node1:SG1  node2:SG2  return SG1,SG2
  		// case 2: node1:SG1,SG2  node2:SG3,SG4  return SG1,SG3
  		// case 3: node1:SG1,SG2  node2:SG2,SG3  return SG1,SG2
  		secGroupNames.Insert(srv.SecurityGroups[0]["name"].(string))
  	}
  
  	secGroupIDs := make([]string, secGroupNames.Len())
  	for i, name := range secGroupNames.List() {
  		secGroupID, err := groups.IDFromName(network, name)
  		if err != nil {
  			return []string{}, err
  		}
  		secGroupIDs[i] = secGroupID
  	}
  
  	return secGroupIDs, nil
  }
docs: // getNodeSecurityGroupIDForLB lists node-security-groups for specific nodes