That isn't really a canonical spine-and-leaf network, at least not as typically conceived in current networks.
Take your diagram and delete the core nodes and all of their connections. One pair of leaves can be set aside as border leaves, meaning that they're responsible for external connectivity. In truth for most implementations there's no particular reason a given set of leaves can't both host end-node connectivity and provide external links, but this can vary.
The basic reason for this is that a given leaf has more bandwidth to every other leaf than does any given spine. Spines should be incredibly simple in their configuration and do little more than provide connectivity between leaves.
So.. this changes some of your questions, but I'll try to address them:
- The cores go away. Generally speaking there will be some kind of L3 connectivity between the spines and leaves. It could be static routes, but almost never will. It realistically needs to be a protocol that can support equal cost multipathing (ECMP) for greater than 2 nodes - which, in any kind of sane practice, means either an IGP or BGP. Both can be valid choices and, indeed, for several popular options both are used simultaneously (iBGP + an IGP).
- Leaf and spine communication needs to be L3. You may use an L2 overlay (i.e. VXLAN-EVPN) to provide L2 as a service, but the fundamental premise of spine-leaf is the use of something that is capable of ECMP - which, again, is not native L2. Even L2-only protocols like Cisco's FabricPath are actually encapsulations (in the FP case it's a mac-in-mac encapsulation that's using IS-IS to advertise nodes and associated addresses). In the EVPN case, VXLAN is used as a MAC-in-UDP encapsulation while BGP provides mapping between a given tenant's MAC and IP addresses and an associated endpoint.
There's also the case of L3 hosts that's a valid spine-leaf design. In this instance either the leaves are just advertising local networks (i.e. no L2 mobility between leaves, or leaf-pairs) or the hosts themselves advertise the local addresses of VM's, containers or loopbacks. In practice this means a bunch of /32's (or /128's if you're v6) being pushed via local subnets on the various leaves.