kubelet获取pod ip
k8s v1.19.0
pod ip不是由cni告诉kubelet的,而是kubelet pleg基于nsenter进入network namespace+ip命令查询网卡得到。
pkg/kubelet/pleg/generic.go
Start -> relist -> updateCache(更新本地缓存,供其他流程使用)->
pkg/kubelet/kuberuntime/kuberuntime_manager.go
GetPodStatus(从最新pause容器获取pod ip)->
vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go
RuntimeServiceServer接口中PodSandboxStatus方法
pkg/kubelet/dockershim/docker_sandbox.go
PodSandboxStatus方法
pkg/kubelet/dockershim/docker_sandbox.go
getIPs方法
pkg/kubelet/dockershim/docker_sandbox.go
getIPsFromPlugin方法
pkg/kubelet/dockershim/network/plugins.go
GetPodNetworkStatus方法
pkg/kubelet/dockershim/network/kubenet/kubenet_linux.go
GetPodNetworkStatus方法
pkg/kubelet/dockershim/network/plugins.go
GetPodIPs方法
pkg/kubelet/dockershim/network/plugins.go
getOnePodIP方法
通过nsenter进入容器网络namespace后,通过ip命令查询网卡ip。