Основная команда нашего клиента использует kubeconfig с аутентификацией client-go, выполняя скрипт python для получения токена. Все они используют Mac. Я использую Windows с mingw64. Как бы я ни пытался указать путь к этому скрипту: прямые слеши с буквой диска между слешами или классический стиль Windows (даже если он присутствует в PATH), даже если я помещаю скрипт в тот же каталог, что и файл конфигурации kube, и не указываю никакого пути, я получаю Unable to connect to the server: getting credentials: exec: executable <our script name> not found
. Я могу выполнить этот скрипт без указания пути к нему из CLI. Я просто пытаюсь kubectl get pods
. Соответствующий user:
фрагмент:
- name: someName
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- --creds
- '%userprofile%\path\to\credentials.properties'
command: path\to\script
env: null
Вопрос: как указать исполняемый файл в разделе exec kubeconfig в Windows?
решение1
Kubernetes client-go уже имеет вспомогательные методы для аутентификации с использованием kubeconfig. Он содержит два варианта с хорошими примерами:
Я бы рекомендовал использовать два встроенных вспомогательных метода вместо создания пользовательского варианта. Возможно, вам захочется добавить аргумент, чтобы можно было переключаться между ними, например, использовать внекластерный метод при локальном запуске в Windows и внутрикластерный метод, когда приложение (если ваш код является приложением?) работает как служба в кластере.
решение2
Документации по использованию kubeconfig под Windows очень мало, поэтому методом проб и ошибок, а также с небольшой помощью комментария @mdaniel я пришел к следующему решению:
Я создал пакетный файл Windows, содержащий одну строку:
@python <path-to-script> %*
и сослался на этот файл с полным путем command:
в exec:
.
Мне пришлось использовать его, %*
потому что скрипт Python принимает параметры.
@
не позволяет Windows выводить эту команду в консоль при запуске пакетной обработки.
Я не смог этого сделать, command: <path-to-python>\python <path-to-script>
потому что Kubernetes все равно жаловался, что не может найти исполняемый файл с таким именем.
Также, в качестве примечания, если вы используете переменные среды Windows, такие как %userprofile%
kubeconfig, на них необходимо ссылаться в одинарных кавычках.