In Kubernetes use Service DNS — K8s creates a stable hostname that load-balances across pods automatically. In non-K8s environments use Consul for health-aware service registration and discovery. Use ConsulService to register the instance on startup and resolve healthy instances dynamically before each ClientProxy creation.
Kubernetes Service DNS — prefer for K8s deployments; zero configuration; kube-proxy handles load balancing.
Consul — use for non-K8s environments or when you need health-aware routing and canary deployments.
Register every instance on startup and deregister on graceful shutdown to keep the registry accurate.
ClientProxyFactory.create() allows dynamic client creation when the host is not known at module load time.
For gRPC in K8s, configure headless services and client-side load balancing — kube-proxy does not balance gRPC streams.