It is actually pretty simple to do so.
The only thing you have to do is to configure the IP's in the three nodes correctly in the local.conf file. Make sure you start the correct services on each node using the correct enable_service/disable_service parameters.
On the compute node you will generally only have the nova-compute and one neutron-agent running,
in the network node all neutron-service/agents (l3, dhcp,meta, metering,...) services
and in the controller, all nova/glance/keystone/horizon/... services.

Of course you will get some conflict error that you may need to change on the different .conf/.ini file but using the screens with ./rejoin-stack.sh, you can jump on the different services. press CTRL+C to stop the service, make your change, press the up arrow and you can restart the services and you should be fine.
This is a very gross explanation but you get the idea.
Edit your post if you have more questions :)
===================EDIT 1 ===================
In the file stachrc you will find the following services:
# This allows us to pass ``ENABLED_SERVICES``
if ! isset ENABLED_SERVICES ; then
# Keystone - nothing works without keystone
ENABLED_SERVICES=key
# Nova - services to support libvirt based openstack clouds
ENABLED_SERVICES+=,n-api,n-cpu,n-net,n-cond,n-sch,n-novnc,n-crt,n-cauth
# Glance services needed for Nova
ENABLED_SERVICES+=,g-api,g-reg
# Cinder
ENABLED_SERVICES+=,c-sch,c-api,c-vol
# Dashboard
ENABLED_SERVICES+=,horizon
# Additional services
ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat
fi
Those services are supposed to be started in a "all-in-one" node.
I can suggest you to start the following services for your tree nodes:
Controller:
keystone: key,
nova: n-api, n-cond, n-sch, n-novnc,n-crt,n-cauth,
glance: g-api,g-reg (if you want image service)
cinder: c-sch,c-api,c-vol (if you want storage)
horizon: horizon (to have the web dashboard)
utils: ,rabbit,mysql (I never used dstat and tempest)
As you want to use a network node, you want to use neutron, therefore the service n-net (nova-network) shouldn't be enabled in your controller
On your Network node:
enable service: neutron, q-srv, q-dhcp, q-l3, q-meta, q-metering
In your neutron.conf file you will have to configure what plugin you wanna use (ML2 for example) and what type and mechanism drivers you wanna use. As you gonna use devstack, you will have to configure your local.conf file to use the desired plugin and the parameters you want:
(this is a setup to use only VLAN as isolation and no tunneling mechanism)
#neutron cfg
Q_HOST=$SERVICE_HOST
Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vlan
ENABLE_TENANT_VLANS=True
ENABLE_TENANT_TUNNELS=False
ML2_VLAN_RANGES=mynetwork:100:199
PUBLIC_INTERFACE=enp6s0
# multihost devstack
MULTI_HOST=True
# Configure OVS
OVS_BRIDGE_MAPPINGS=mynetwork:br-enp4s0f4
OVS_PHYSICAL_BRIDGE=br-ex
OVS_ENABLE_TUNNELING=False
or follow that to configure afterwards the different .conf files and restart the services as I mentioned before
You can take some insight using this guide.
For the compute node, the only services you wanna start are:
n-cpu
, q-agt
(the neutron agent that
will match the requirement for your
plugin, i.e. OVS mechanism driver
with the ML2 plugin)
answer by GLaupre is very valid. If you want a sample of local.conf for controller and compute nodes look at my repo: https://github.com/affear/fakestack. Note that I am using nova-network...
Thanks affo, I can use yours samples of local.conf. Yes, I would like to create a separate network node with neutron. I suppose that the computer node has the same local.conf like your repo, now I need to separate your controler node in a controler node without nova-network and other neutron node.