EventHandlers事件处理器
configcontroller
根据ConfigStores生成configstorecache
注册configstore
ingress类型
s.ConfigStores = append(s.ConfigStores,
ingress.NewController(s.kubeClient, s.environment.Watcher, args.RegistryOptions.KubeOptions))文件类型
store := memory.Make(collections.Pilot)
configController := memory.NewController(store)
err := s.makeFileMonitor(args.RegistryOptions.FileDir, args.RegistryOptions.KubeOptions.DomainSuffix, configController)
if err != nil {
return err
}
s.ConfigStores = append(s.ConfigStores, configController)CRD类型
known := knownCRDs(client.Ext())
for _, s := range out.schemas.All() {
// From the spec: "Its name MUST be in the format <.spec.name>.<.spec.group>."
name := fmt.Sprintf("%s.%s", s.Resource().Plural(), s.Resource().Group())
if _, f := known[name]; f {
var i informers.GenericInformer
var err error
if s.Resource().Group() == "networking.x-k8s.io" {
i, err = client.ServiceApisInformer().ForResource(s.Resource().GroupVersionResource())
} else {
i, err = client.IstioInformer().ForResource(s.Resource().GroupVersionResource())
}
if err != nil {
return nil, err
}
out.kinds[s.Resource().GroupVersionKind()] = createCacheHandler(out, s, i)
} else {
scope.Warnf("Skipping CRD %v as it is not present", s.Resource().GroupVersionKind())
}
}XDS类型
k8s类型
EventHandler
即事件处理器用于接收配置类型的配置更新事件,initRegistryEventHandlers 用于handler的注册,根据不同类型istio中包含以下不同的handler
serviceHandler - ServiceController
configHandler - configController
workloadEntryHandler - configController
serviceEntryHandler - configController
serviceHandler
serviceHandler函数如下,当收到服务变化时进行全量更新
configHandler
configHandler 收到新的事件后会将事件加入pushchannel以待推送更新到client
对于以下类型的资源更新将触发configHandler
变化则推送一次XDS
以ingress为例
service handler
传入serviceentry来决定是否推送
Last updated
Was this helpful?