contour源码梳理
2021-11-11 16:30:44 13 举报
contour源码梳理
作者其他创作
大纲/内容
HttpProxyProcessor
doServe
tlsRouteReconciler
核心事件处理循环: 1. 等待event 2. 处理event 3. 构建新的dag,发送给 Observer
rv.visit(root)
clients.StartInformers
dag.Builder
mgr.Start
DynamicClientHandler
ResourceEventHandler
HTTPRoute
range k8s.EndpointsResources()
k8s.DynamicClientHandler
st.Send(resp)
ServiceStatusLoadBalancerWatcher
Read
e.rebuildDAG()
EnsureVirtualHost
ingresses: map
envoy client
manager.New
g.Run(context.Background())
c.Watch
validHTTPProxies
visitSecrets
dagProcessors := []dag.Processor
e.run
serve.FullCommand()
DAGKubernetesCache
RegisterAggregatedDiscoveryServiceServer
resources
cv.visit(root)
getDAGBuilder
dag := DAG{
onVirtualHost
GatewayAPIProcessor
writetrue
computeHTTPProxy
grpc stream
Service
某些资源变更触发资源重建
debugsvc.Start
computeRoutes
services: map
range b.Processors
EndpointsTranslator
eventHandler.Start()
这些k8s资源的handler都使用DynamicHandler
将配置发送到客户端
routeVisitor
构造response对象
envoy_endpoint_v3.ClusterLoadAssignment
构造 Processor 列表
所有观察类的基类
secretVisitor
service资源处理器,如果配置了EnvoyServiceNamespace,还需要namespaceFilter
DiscoveryResponse
ListenerProcessor
k8s.NewClients
informOnResource(namespace)
op := <-e.update
ServiceCluster -> envoy_endpoint_v3.ClusterLoadAssignment
setupLeadershipElection
stream
c.Update(routes)
......
等待 informer sync
contourServer
获取资源
Listener.VirtualHost、SecureVirtualHost -> envoy_route_v3.RouteConfiguration
u.OnAdd
注册给定的 xDS 协议server 到 gRPC
HTTPProxyProcessor.Run
SnapshotHandler
ClusterCache
validateCRDs
EventHandlerupdate chan
metricsvc.Start
Cache
sh.Start
OnDelete
OnChange
ExtensionServiceProcessor
传入Dag,通过processor 去修改 Dag 中的数据
r.Contents()
s.StatusUpdater.Send
读取 DAG 中的 cluster,生成 envoy_cluster_v3.Cluster
healthsvc.Start
NewTLSRouteController
xdscache.NewSnapshotHandler
EventHandler
range k8s.SecretsResources()
EndpointsTranslator.
sv.visit(root)
启动所有的 informer
e.onUpdate(op)
writeOjbect
Observer
Endpoint
<-pending
通用资源handler,Dynamic委托给Event
visitClusters
e.Builder.Build()
RegisterServer
读取 DAG 中的 secret,生成 envoy_tls_v3.Secret
OnUpdate
Builder.KubernetesCache
range k8s.IngressV1Resources()
gatewayReconciler
OnAddOnUpdateOnDelete
range k8s.DefaultResources()
DAG变更,会通知所有的 Observer,这里是多个 Observer 的组合
TLSRoute
namespaceFilter
获取资源对应的配置信息
HTTPProxy
xds.NewServer
&k8s.StatusAddressUpdater
suw.UpdateChannel
注册 api
controller.New
安装controller manager
NewHTTPRouteController
xxxTriggerRebuild
e.Observer.OnChange
Recalculate()
Gateway
管理所有的 Endpoint 和 ServiceCluster对象,重建Events,生成envoy_endpoint_v3.ClusterLoadAssignment
创建handler
clusterVisitor
gatewayapi_v1alpha1.AddToScheme
rateLimitPolicy
secret资源,使用namespaceFilter这种handler
httpRouteReconciler
这里注册多个资源监听器,当DAG变化会通知到他们
启动metric服务暴露指标给prometheus
e.StatusUpdater.Send(upd)
dag.ComposeObservers
lbsw.Start
ProxyUpdate:map
EndpointsTranslatorOnChange
HTTPProxyProcessor
Ingress
OnAdd
go-envoy-sdk
SecureVirtualHost、Cluster -> envoy_tls_v3.Secret
envoy-go sdk生成配置
httpproxies: map
SecretCache
NewGatewayClassController
grpcServer.Serve(l)
该handler主要用于生成快照s.generateNewSnapshot()
onSecureVirtualHost
IngressProcessor
Cluster、ExtensionCluster -> envoy_cluster_v3.Cluster
clients.WaitForCacheSync
main
k8s.ServicesResources
UpdateNow
Secret
addRoutes
NewGatewayController
c.commitProxy(pu)
EndpointCache
所有事件处理类的基类
NewContourServer
RouteCache
visitRoutes
发送状态StatusUpdate
构造DAG
0 条评论
下一页