kubernetesdashboardbackend源码剖析

kubernetesdashboardbackend源码剖析

2023年6月30日发(作者:)

kubernetesdashboardbackend源码剖析dashboard架构主要由⼀个API handler 和 五个manager构成:API handler⽤来处理来⾃客户的http请求,不同的path路由到不同的的handler处理,使⽤的是go-restful库,五个manager是ClienManager, AuthManager, SettingManager, SystemBannerManager, IntegrationManager, 分别负责认证,系统设置, 提⽰条和集成其他组件,并且每个manager独⽴于⼀个package中, 由manager和handler两部分组成, manager负责数据处理,handler⽤来响应各⾃负责的http package 根据前端⽤户请求从api-server获取相应数据, 每个http request中都会携带⽤户的authinfo, ⽤于创建a对应的pi serverclient, 获取⽤户所需数据, 系统启动时会初始化⼀个insecureClient⽤来做⼀些⽤户⽆关的请求,例如获取k8s集群版本,初始化heapster组件等.auth package中包括所有的认证⽅⾯的处理,认证其实是交给K8S apiServer负责的,dashboard只是根据⽤户登录信息⽣成authInfo对象,加密后作为token携带在浏览器中, 即jwe协议, jwe⼦包是JWE协议的实现, 其中KeyHolder(rsaKeyHolder concrete class)⽤来管理jwe⽤到的密钥对, 将秘钥存放在kubernetes-dashboard-key-holder secrets对象中, 实时在不同dashboard实例间同步,TokenManager(jweTokenManager concrete class)⽤来管理token, 根据秘钥解密或⽣成token来进⾏权限验证, authManager 中的login method会根据login前端页⾯返回的信息获取到authInfo信息(Authenticator),然后healthCheck判断是否合法,最后利⽤tokenManager⽣成jwe token返回给⽤户,token的payload保存的就是k8s AuthInfo对象.sync package 是⽤来监视k8s资源,会定期poll指定的资源,如果资源发⽣变化会调⽤⽤户注册的回调函数,并且负责对资源的CURD操作, ⽬前只实现了监控secret, 上⾯提到的kubernetes-dashboard-key-holder secrets就是通过sync在不同dashboard间同步, poll secrets信息由SecretPoller负责, 他是会定期Get secrets对象(getSecretEvent),根据不同情况返回不同的Event,通过PollWatcher(实现了ace)中的channle传输到secretSynchronizer中,然后secretSynchronizer根据Event执⾏不同的回调函数.此外sync package中有个Overwatch对象⽤来监视注册到其中的synchronizer对象,它的基本实现就是通过channle来获取synchronizer的错误信息, 然后根据重启策略进⾏重启.查看dashboard的deploy⽂件会发现创建了kubernetes-dashboard-minimal的Role资源并绑定到了dashboard这个deployment上,Role的resourceNames为kubernetes-dashboard-key-holder及其他对象,这些对象都需要在系统初始化的时候设置完毕, 其实就是由上⾯的insecureClient进⾏的setting package是⼀些基本的设置,包括ClusterName, ItemsPerPage, AutoRefreshTimeInterval 等信息,保存在kubernetes-dashboard-settings 这个config map中,⽤户可以通过页⾯来设置,更新这个Banner package是⽤来在页⾯上显⽰⼀条banner, ⽤来提醒⽤户⼀些信息的.integration package⽤来集成显⽰其他信息,例如heapster的监控信息, 每个被集成的对象被称为⼀个integration, 并有⼀个integration Id与之对应, integrationManager其实是交给metricManager来管理integration的, metricManager会为每个integration创建⼀个对应的MetricClient获取数据, heapsterClient就是实现了上述MetricClient接⼝, 通过heapster提供的data model来访问heapster内的数据.metricsClient⼀些⽅法,如下:DownloadMetric(selectors []ResourceSelector, metricName string, cachedResources *CachedResources) MetricPromises这个函数从heapster获取数据,但是封装的⽐较抽象, 其中ResourceSelector表⽰某个特定的请求对象,例如请求deployment则其中保存了⼀些deployment metadata. metricName表⽰cpu/memory等资源类型, CachedResources⽤来表⽰⼀些⾼级对象的⼦对象,例如上⾯的deployment,因为在heapster没有直接对deployment资源的监控,只有对pod的监控, 所以⼀个deployment下所有pod的资源使⽤信息之和就是他的资源使⽤信息, 此处cachedResources就表⽰deployment中包含那些pod数组,返回值 MetricPromises包含两个Channel,分别⽤于获取metric数据和error数据,同时提供了⼀个GetMetrics⽤于从channel中获取metric数据.(如果直接看heapster还是⽐较抽象的,最好从⼀个资源请求的handler中进去,明⽩其如何使⽤之后在看其实现.)在某些handler中对资源的请求是异步进⾏的,会启动⼀个groutine,在其中调⽤client-go请求api-server,然后再通过channel返回到主线程中,在主线程中进⾏汇总返回给浏览器.resoutce/dataselect⽤于对获取的数据进⾏过滤,排序,分页等总的来说dashborad中的技术点包括但不限于: jwe, autogenerate certification, wathchover, synchronizer, heapster integration,go-restful, client-go,

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688057161a72414.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信