Configs are important. You don't need a config if you are doing app-embeded openziti but they are there for you. It's basically a mechanism to add some metadata to your service.
Terminators are important but - in my experience - I never use them. I consider them an 'advanced' usage of OpenZiti and I'd recommend you get your feet really well established with OpenZiti before digging in there too too much.
Config Schema define configs. Configs are "instances" of some schema. You must declare a Config Schema in order to make a config. There are 5 configs we deploy with OpenZiti because our tunneling apps use/need them. Tunneling apps are, after all, just SDK apps. The configs are used to infofrm the intercepting tunneller what to intercept and how, and the 'server' client how to offload that traffic...
Transit Routers are routers that are not 'edge enabled'. You would deploy them to build up your mesh network bigger and provide more pathing to OpenZiti to get you to the destination faster. Also something i would say is "advanced use" of OpenZiti and it's worth getting your OpenZiti feet under you before playing with this.
These are the same question really. and YES. You MUST have a "dial" and "bind" policy somehow for every single edge-sdk service. This is easy to understand though. In a zero trust overlay network like OpenZiti you are authorizing identities. There's an identity on both sides of your connection the initiating side (often referred to as the client) and the receiving side (often referred to as the server)
You make a 'Bind' policy to authorize an identity has the ability to host/bind a service. This would be your 'server'.
You make a 'Dial' policy to authorize an identity to access the service (or dial). This would be the 'client'.
I actually just wrote up a crazy quick guide to using the golang sdk example for zitified http client/server here. You can see the last two lines are about making the bind/dial service-policies.
Hope that helps