istio: pilot-discovery源码调用图
2021-04-14 10:17:51 30 举报
Pilot-discovery是Istio中用于发现服务实例并进行负载均衡的组件。它通过定期发送探测请求来检测可用的服务实例,并将这些信息存储在本地的Envoy代理中。当有流量需要路由到某个服务时,Envoy代理会从Pilot-discovery获取该服务的实例列表,并根据配置的策略进行负载均衡。此外,Pilot-discovery还支持动态更新服务实例的信息,以便在服务实例发生变化时能够及时更新路由规则。总之,Pilot-discovery是Istio中非常重要的一个组件,它为整个服务网格提供了强大的负载均衡能力。
作者其他创作
大纲/内容
initMeshHandlers
<- s.pushChannel
bootstrap.NewServer(serverArgs)
s.certController.Run(stop)
HandleUpstream
crdclient.New
initControllers
findGenerator
pushFn(实际调用s.Push)
cl.queue.Push
共注册了三个大类资源的处理函数
初始化envoy资源生成器
s.httpsServer.ListenAndServeTLS
开始
NewServiceDiscovery
initServiceControllers
initMeshNetworks
configaggregate.MakeCache
configController.RegisterEventHandler
pushQueue
initRegistryEventHandlers
httpServer.Serve
依次执行所有注册的handler
pushEv := <-con.pushChannel
queue.Dequeue()
incrementEvent
doSendPushes
workloadentry.NewController
s := &Server
discoveryServer.Start(stop)
pilot/pkg/xds/ads.go
防抖处理
wh.Run
启动所有注册的组件
knownCRDs
AddFunc
DeleteFunc
Stream
根据资源类型找到对应的生成器
s.XDSServer.ConfigUpdate(pushReq)
client.pushChannel <- pushEv
k8s-all-resources
serviceEntryHandler
inject.NewWebhook
chiron.NewWebhookController
initDiscoveryService
req.Merge
取出队列中的数据
whServer.Run(stop)
serviceControllers.Run
patcher.Run
s.pushQueue.Enqueue
事件推送到客户端的pushQueue中
gvk.WorkloadEntry
configHandler
注册事件
s.Generators[v3.ClusterType] = &CdsGenerator{Server: s}\ts.Generators[v3.ListenerType] = &LdsGenerator{Server: s}\ts.Generators[v3.RouteType] = &RdsGenerator{Server: s}
统一推送
s.configController.Run
pushConnection
Generate
initKubeClient
gvk.ServiceEntry
DiscoveryServer
startPush
initMeshConfiguration
initConfigSources
事件放入channels.pushChannel <- req
BuildClusters
makeKubeConfigController
workloadEntryHandler
从channel取出xDS事件
xds.NewDiscoveryServer
memory.NewController
s.startFuncs
pkg/istio-agent/xds_proxy.go
s.pushQueue
gen.Generate
initSidecarInjector
grpcServer.Serve
加入队列中
Informer().AddEventHandler
消费
UpdateFunc
s.pushChannel
newConnection
conn.stream.Send
AppendServiceHandler(serviceHandler)
initK8SConfigStore
sendPushes
h1s.Serve(s.HTTP2Listener)
pushChannel
MessageToAny
s.pushXds
client.pushChannel
封装成事件
h.handlers
mc.InitSecretController(stop)
推送xDS
aggregate.NewController
生成envoy配置
pushEv := &Event{pushRequest: push...}
注册事件处理函数
gateway.NewController
NewForSchemas
createCacheHandler
onEvent
s.XDSServer.Start
e := &model.Environment
StreamAggregatedResources
CdsGenerator.Generate
waitForCacheSync
secureGrpcServer.Serve
initGenerators
initConfigValidation
webhooks.NewWebhookCertPatcher
initCertController
con.send
AdsPushAll
initConfigController
debounce
initKubeRegistry
handleUpdates
0 条评论
下一页