Подключите код go из Kubernetes к внешнему кластеру Kubernetes - PullRequest
1 голос
/ 27 сентября 2019

Оператору, который я создаю, нужно поговорить с другими кластерами Kubernetes, есть ли рекомендации по выполнению этого из оператора, работающего в Kubernetes?

Используя пакет k8s.io/client-go/tools/clientcmd, который я могу вызватьBuildConfigFromFlags метод передачи masterURL и местоположение kubeconfig.Это хорошо работает за пределами Kubernetes, но можно ли сделать какие-либо предположения относительно местоположения kubeconfig в Kubernetes?Или следует использовать какой-нибудь другой API?

В качестве примечания: я использую Client API controller-runtime для общения с Kubernetes.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Из "Программирование Kubernetes", изд.Орейли (который я предлагаю прочитать):

"При запуске двоичного файла внутри модуля в кластере кублет автоматически подключает учетную запись службы в контейнер по адресу /var/run/secrets/kubernetes.io./ serviceaccount. Он заменяет только что упомянутый файл kubeconfig и может быть легко преобразован в rest.Config с помощью метода rest.InClusterConfig (). "

Необходимая конфигурация берется с этой строкой:

cfg, err := rest.InClusterConfig()

Посмотрите на код здесь:

https://github.com/programming-kubernetes/cnat/blob/master/cnat-client-go/main.go

0 голосов
/ 27 сентября 2019

Оператор kubernetes - это, в конце концов, модуль, работающий внутри Kubernetes.Ответ Никола Бена - правильный путь, если вы хотите получить доступ к API текущего кластера K8S.

Тем не менее, вы говорите, что вашему оператору «необходимо общаться с другими Kubernetes кластерами»(мой акцент), и то, что он работает локально.

Затем, один простой подход - создать ConfigMap, содержащий файл kubeconfig, и смонтировать его в известное место в модуле оператора.Тогда вы можете просто использовать это так же, как вы делаете это локально.

...