Kube-proxy需要在每一个minion结点上运行。他的作用是service的代理,负责将业务连接到service后面具体执行结点(endpoints)。
我们列一下体现kube-proxy主要设计的代码部分。
总的来说kubernetes的代码可以从cmd看进去,看每个组件的启动过程,以及提供的业务。Cmd部分组织启动进程的过程以及代码调用,具体的代码实现在pkg里面。
Kube-proxy的重点代码是pkg中的serviceConfig、endpointsConfig(在pkg/proxy/config中),每个config中的mux,以及注册到config的处理函数proxier和endpointsHandler(这两个在pkg/proxy/userspace中),还有监听服务信息的API(代码也在pkg/proxy/config中)。
在执行kube-proxy命令的时候,NewProxyServerDefault函数依次创建serviceConfig,注册proxier;创建endpointConfig,注册endpointsHandler; 创建NewSourceAPI,在这里面会启动两个channel监听service和endpoint的变化,具体代码见下段:
serviceConfig := proxyconfig.NewServiceConfig() serviceConfig.RegisterHandler(proxier)
endpointsConfig := proxyconfig.NewEndpointsConfig() endpointsConfig.RegisterHandler(endpointsHandler)
proxyconfig.NewSourceAPI( client, config.ConfigSyncPeriod, serviceConfig.Channel("api"), endpointsConfig.Channel("api"), ) |
下面是代码调用依赖。我的画图工具太差,有点难看~~