k8s源码分析1--kube-proxy

本文介绍了kube-proxy的作用,它作为Kubernetes集群中的节点组件,负责与apiserver交互并维护service的IP状态。通过iptables实现service的负载均衡。通过源码分析,探讨了kube-proxy的主要功能,包括参数处理、client初始化、list-watch机制以及iptables规则的更新。文章详细讲解了入口文件、参数格式化和主要功能实现的代码路径。
摘要由CSDN通过智能技术生成

kube-proxy什么鬼?(查看前的备注)

备注:楼主在边看代码边更新,所以过几个小时楼主又更新了。
看过很多文章和自己日常应用分析作出如下解释:
kube-proxy 部署在节点上,主要是为了:

  • 和k8s-apiserver交互,维持service相关的ip状态。
  • 调用系统层的工具创建service相关的链路和规则,主要是iptables,包含 使用iptables维持的负载均衡。
    解释很简单,到底是不是?接下来我们打开源码看看。

kube-proxy什么鬼?(查看代码后的功能总结)

  • 从kube-apiserver list-watch数据—informers(client-go)
  • 当查询到数据变化,更新本地的iptables(如果模式设置iptables)
  • 数据变化指的是,add/update/delete,对象是service/endpoint
  • 日志处理/事件广播/metrics/健康检查。

代码重点注意

入口

位置文件:kubernetes/cmd/kube-proxy/proxy.go

```golang
// An highlighted block
    command := app.NewProxyCommand()
	if err := command.Execute(); err != nil {
		os.Exit(1)
	}

参数格式化处理

位置文件:kubernetes/cmd/kube-proxy/app/server.go

```golang
// An highlighted block
func NewProxyCommand() *cobra.Command {...}

运行服务前的各种client初始化

位置文件:kubernetes/cmd/kube-proxy/app/server_others.go

```golang
// An highlighted block
func NewProxyServer(o *Options) (*ProxyServer, error) {}

开启协程对资源service[endpoint略]开始list-watch kube-apiserver

文件位置:kubernetes/cmd/kube-proxy/app/server.go

```golang
// An highlighted block
func (proxier *Proxier) syncProxyRules() {
	go serviceConfig.Run(wait.NeverStop)
}

开启定时器/循环执行

文件位置:kubernetes/pkg/proxy/iptables/proxier.go

```golang
// An highlighted block
func (bfr *BoundedFrequencyRunner) Loop(stop <-chan struct{}) {
	klog.V(3).Infof("%s Loop running", bfr.name)
	bfr.timer.Reset(bfr.maxInterval)
	for {
		select {
		case <-stop:
			bfr.stop()
			klog.V(3).Infof("%s Loop stopping"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值