What problem are we trying to solve:
Certain workloads, such as databases, rely on headless services for discovery and for network operations. Headless services behave differently to normal clusterIP services. They do not do anything special, like representing a virtual IP, they just represent a convinience by which multiple pods can be associated.
Linkerd currently supports multicluster communication through headless services. This is also known as statefulset support (since most workloads that use a headless service are deployed as StatefulSets
, the resource type provides a number of different guarantees).
The problem we have is that in a lot of cases, it is cumbersome to have a lot of different headless services that need to be passed to a StatefulSet
. For example, let's say we have a cluster called source
. In this cluster we have a database called my-cool-database
. It has a service, database-cool-service
. It will be passed as a CLI value: ./my-cool-database --discover database-cool-service
.