kube-router的源码走读

作者: 李佶澳   转载请保留:原文地址   发布时间:2017/10/13 17:28:23

说明

kube-router是一个挺有想法的项目,兼备了calico和kube-proxy的功能。

这里分析的kube-router版本是v0.0.9。

编译

kube-router developer guild很详细的介绍了编译的过程。

原理

使用ipvs,将访问service的流量分发给pod。

使用iptables、ipset实现network policy。

使用gobgp实现pod的网络。

架构

kube-router architecture中介绍了kube-router的设计,很简洁的架构。

kube-router architecture

源码

kube-router的源码很简洁,启动之后,首先创建wathcer:

func (kr *KubeRouter) Run() error {
	...
	err = kr.startApiWatchers()

startApiWatchers中,会启动pod、endpoint、networkpolicy、namespace、service、node六个wather。

这六个wathcer将监听的变化发送到`Broadcaster

func NewBroadcaster() *Broadcaster {
	return &Broadcaster{}
}

func (b *Broadcaster) Add(listener Listener) {
	b.listenerLock.Lock()
	defer b.listenerLock.Unlock()
	b.listeners = append(b.listeners, listener)
}

func (b *Broadcaster) Notify(instance interface{}) {
	b.listenerLock.RLock()
	listeners := b.listeners
	b.listenerLock.RUnlock()
	for _, listener := range listeners {
		go listener.OnUpdate(instance)
	}
}

之后创建三个controller:NetworkPolicyController、NetworkRoutingController、NetworkServicesControllers。 每个controller会监听所关心的资源的变化。

func NewNetworkServicesController(clientset *kubernetes.Clientset,\
	config *options.KubeRouterConfig) (*NetworkServicesController, error) {
	...
	nsc := NetworkServicesController{}
	...
	watchers.EndpointsWatcher.RegisterHandler(&nsc)
	watchers.ServiceWatcher.RegisterHandler(&nsc)
	...

参考

  1. kube-router
  2. kube-router developer guild
  3. kube-router architecture

限时活动,每邀请一人即返回25元!

Copyright @2011-2018 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: lijiaocn@foxmail.com,备注网站合作 友情链接: lijiaocn github.com