There are three different ways to upload custom images.
You need to have the OpenStack-CLI installed and configured.
After sourcing the openrc.sh you can easily upload your own image and use it right after, like this:
glance --os-image-api-version 1 image-create --progress --is-public False --disk-format=qcow2 \ --container-format=bare --property architecture=x86_64 --name="Debian Stretch" \ --location https://cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-amd64.qcow2
It is also possible to upload images with heat.
An example can look like this:
heat_template_version: 2016-04-08 description: Simple template to upload an image resources: glance_image: type: OS::Glance::Image properties: container_format: bare disk_format: qcow2 name: Debian Stretch location: https://cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-amd64.qcow2
Further information can be found here.
This overview contains a list of standard images sources.