Предположим, что существует служба с именем "SVC", работающая в пространстве имен NS в кластере kubernetes. Мне нужно извлечь его IP (т. Е. ClusterIP)
Я мог бы написать некоторый код (ниже), который работает, но я думаю, что этот подход не должен быть принят. Поскольку этот код будет вызываться часто, загрузка конфигурации каждый раз является пустой тратой. Как мне лучше это сделать:
namespace := "NS"
serviceName := "SVC"
clusterIP := ""
kubeconfig := filepath.Join(
os.Getenv("HOME"), ".kube", "config",
)
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
fmt.Println("BuildConfigFromFlags Failed")
return string(""), err
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
fmt.Println("NewForConfig Failed")
return string(""), err
}
svcList, err := clientset.CoreV1().Services(namespace).List(metav1.ListOptions{
FieldSelector: "metadata.name=" + serviceName,
})
//fmt.Printf("kubecofig: %s\n",kubeconfig)
//fmt.Printf("config: %#v", config)
//fmt.Printf("nameSpaceList: %#v", svcList)
for _, svc := range svcList.Items {
clusterIP = svc.Spec.ClusterIP
break
}
fmt.Printf("Service IP: %s", clusterIP)
Есть ли способ, которым я могу написать краткий код, подобный этому, и получить желаемый результат. Если есть способ использовать "& corev1.service", кто-нибудь может сказать, пожалуйста, как?