kube-router的源码走读

作者:李佶澳  更新时间:2017/10/28 12:09:34

  项目    kubernetes    刷新

目录

说明

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

站长微信(朋友圈有精华,一般不闲聊)

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  李佶澳的博客  小鸟笔记  软件手册  编程手册  运营手册  爱马影视  网络课程  奇技淫巧  课程文档  精选文章  发现知识星球  百度搜索 谷歌搜索