In microservices, services need to find each other. Hardcoding IPs doesn't work when instances scale up and down.
Client-side discovery: Client queries a registry (Consul, etcd, ZooKeeper) and chooses an instance.
Server-side discovery: Client calls a load balancer. The balancer queries the registry.
Kubernetes has built-in discovery via DNS. In cloud environments, service meshes (Istio, Linkerd) handle discovery automatically.