- they're moving "legacy" infrastructure off EC2 or similar onto Kubernetes and their service discovery stack is already in place. They end up bypassing cluster IPs and dealing directly with pod IPs. - they're starting with Istio or something similar from the get go because the native service discovery is hard to grok and leaves out a lot of the nice things that Istio gets you for free (once you've set it up)
There's lots of overlap, but I've not heard of anyone making a strong argument for the native service discovery.
Native service discovery works a lot better than using pod IPs, which are intended to be transient.
A standard ClusterIp service includes DNS records by default and it's good enough for simple use cases.
I've seen plenty of those from smaller startups.
If you need pod-direct accessibility, the StatefulSet headless service feature will give each pod a unique DNS name and auto-update it when the pod IPs change.
That said, legacy migration into Kubernetes was WAY Oversold by some.
Why the heck are they even using Kubernetes then? Just deploy a bunch of docker containers with the autorestart flag.
This is terrible design.
It allows you to use kubernetes manifest to centrally control policies such as: - Canary load balancing (pushing a certain percentage of the traffic to a canary release) - TLS Mutual Authentication - Retries with exponential backoff - Circuit breakers - Instrumenting your traffic for distributed tracing (e.g. with Jaeger) - Adding your own custom HTTP headers
All of that is transparent to your microservice. This comes instead of having to repeat the service mesh logic that does everything above in each microservice. From the microservice 's perspective they're just sending simple traffic without implementing retries, circuit breakers, HTTPS or instrumentation. Istio takes care of all the rest using sidecars and and ingress controllers.