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?