ServiceDiscovery

ServiceDiscovery

ServiceDiscovery 接口用于列出服务和实例列表

ac := aggregate.NewController(aggregate.Options{
    MeshHolder: e,
})
e.ServiceDiscovery = ac

aggregate Controller

pilot/pkg/serviceregistry/aggregate/controller.go

type Controller struct {
    registries []serviceregistry.Instance
    storeLock  sync.RWMutex
    meshHolder mesh.Holder
    running    bool
}

其主要包含了service registry的实例。 单个service registry结合了服务发现和用于管理异步事件的控制器的功能。

type Instance interface {
    model.Controller
    model.ServiceDiscovery

    // Provider backing this service registry (i.e. Kubernetes etc.)
    Provider() ProviderID

    // Cluster for which the service registry applies. Only needed for multicluster systems.
    Cluster() string
}

实现

kube controller

pilot/pkg/serviceregistry/kube/controller/controller.go Controller

对于kube来说直接读取servicesMap

serviceentrystore

pilot/pkg/serviceregistry/serviceentry/servicediscovery.go ServiceEntryStore

可以看到对于ServiceEntryStore从各个store里面获取ServiceEntries

Last updated

Was this helpful?