$ kubectl cluster-info
1. Kubernetes master is running at https://10.156.0.3:6443
2. KubeDNS is running at https://10.156.0.3:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Если вы запустите kubectl cluster-info -v8
, вы увидите следующее:
Первая строка берется из вашего файла ~/.kube/config
и kubectl
просто проверяется, работает ли он, с помощью простого GET
запрос, ищущий что-то, что обязательно должно присутствовать в кластере:
I0222 11:21:18.015482 18150 round_trippers.go:416] GET https://10.156.0.3:6443/api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue
Вы можете получить результат этой команды, запустив kubectl proxy
, а затем в другой консоли:
curl http://127.0.0.1:8001/api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue
Как видно из ответа, там нет строк с главным URL.
Итак, чтобы получить значение, указанное в первой строке вывода kubectl cluster-info
, вам просто нужнопрочитайте правильную часть конфигурационного файла Kubernetes, потому что вы можете иметь несколько конфигураций кластера .
Для чтения и десериализации конфигурационного файла Kubernetes в loader.go есть функция1023 *:
// LoadFromFile takes a filename and deserializes the contents into Config object
func LoadFromFile(filename string) (*clientcmdapi.Config, error)
или другая функция в config.go :
// getConfigFromFile tries to read a kubeconfig file and if it can't, returns an error. One exception, missing files result in empty configs, not an error.
func getConfigFromFile(filename string) (*clientcmdapi.Config, error)