I use swarm env on rancher , and create stack by docker-compose.yml rancher-compose.yml ,
must I set overlay network for cross host communication by myself ?
No, you need not set overlay network. When you launch your first container, Rancher downloads and launches its network agent container. That network agent container will take care of multi host networking for you. It uses IPsec to do that. You must have port 500 and 4500 open for it to operate.
But the links cannot link to other service , Now I have to use EXPOSE port .
As pointed out by @Adaikal_Raj, the overlay networking is taken care automatically.
As per: http://docs.rancher.com/rancher/latest/en/rancher-compose/
Linking Services
In Rancher, all services within an environment are DNS resolvable so linking services explicitly is not required, unless you would like to use a specific alias for DNS resolution.
Can the Rancher Internal DNS Service work in Swarm Environments ?