> Why does separate dns server need? Could kube-dns be used?
kube-dns is actually a separate dns server as well. Openshift's DNS implementation resolves some of the scalability issues kube-dns has and is preferred
1. when you setup your cluster, you will have some node that running a router pod,and you need have a subdomain for your cluster, for example, you cluster will use product.example.com
, so you need the DNS server setting forward the request with this DNS name prefix product.example.com
to the router node.
2. Assume create a project named test, and you deploy an app to the openshift cluster, you need create a route  for external access, after you do that, the url you can be access is by test.product.example.com
. when you access the your app from outside, the general flow will be:
1. public dns server redirect you to your DNS server
2. Your dns server forward your request to one of the node which have openshift router pod deployed
3. the router pod(it's running haproxy by default) will forward the request to the running pods
Hope this can help you. :)