I am trying to understand endpoint creation for pods. In func (d *Daemon) createEndpoint(), d.fetchK8sMetadataForEndpoint() will fetch pod and its labels: `
func (d *Daemon) fetchK8sMetadataForEndpoint(nsName, podName string) (*slim_corev1.Pod, []slim_corev1.ContainerPort, labels.Labels, labels.Labels, map[string]string, error) {
ns, p, err := d.endpointMetadataFetcher.Fetch(nsName, podName)
if err != nil {
return nil, nil, nil, nil, nil, err
}
containerPorts, lbls, annotations, err := k8s.GetPodMetadata(ns, p)
if err != nil {
return nil, nil, nil, nil, nil, err
}
k8sLbls := labels.Map2Labels(lbls, labels.LabelSourceK8s)
identityLabels, infoLabels := labelsfilter.Filter(k8sLbls)
return p, containerPorts, identityLabels, infoLabels, annotations, nil
}
How this function fetches pod in case of cached and uncached methods? It searches for pod from same node only or it can find pod from kubeapi server? any extra config (to cilium install) needed to fetch pod from kubeapi server?
I have traced down the code till cilium/pkg/k8s/watcher/pod.go. It seems to fetch pod details from local store?