Как получить доступ к кластеру из консоли
В Комплексе реализован модуль kubectl-shturval-plugin, позволяющий получить доступ к кластерам без использования графического интерфейса Комплекса.
Модуль обеспечивает прохождение аутентификации в Комплексе и выгрузку kubeconfigs всех кластеров, доступных пользователю, или kubeconfig одного выбранного кластера;
С помощью модуля возможно формирование конфигурационного файла с заданными параметрами. Файл содержит набор требуемых параметров для аутентификации и загрузки kubeconfigs кластеров, что позволяет сократить время при повторной аутентификации. Конфигурационный файл также может быть загружен из графического интерфейса Комплекса.
Когда загружены kubeconfigs, можно управлять доступными кластерами, используя команды утилиты kubectl.
План действий:
- Загрузить и установить модуль kubectl-shturval-plugin (п. Установка модуля kubectl-shturval-plugin).
- Подготовить конфигурационный файл (п. Подготовка конфигурационного файла и аутентификация) и выполнить аутентификацию или получить доступ к кластерам без конфигурационного файла (п. Порядок действий для аутентификации без конфигурационного файла).
Установка модуля kubectl-shturval-plugin
Для установки модуля kubectl-shturval-plugin нужно выполнить следующие шаги:
- скачать бинарный файл модуля по ссылке .
Если Комплекс развернут в закрытом окружении, вместо ссылки на скачивание использовать адрес ссылки на kubectl-shturval на вашем зеркале, например https://registry-link/kubectl-shturval-2.10.0;
- проверить расположение исполняемого файла kubectl (рисунок 3):
which kubectl

Рисунок 3 ‒ Проверка расположения файла kubectl
По умолчанию исполняемый файл kubectl находится в /usr/local/bin/. Если путь расположения исполняемого файла отличен от /usr/local/bin/, следует использовать его в командах далее вместо /usr/local/bin/;
- разместить бинарный файл в одной директории с исполняемым файлом kubectl и обеспечить выдачу права на выполнение. Если название бинарного файла отличается от kubectl-shturval, переименовать при перемещении:
sudo cp /downloads/kubectl-shturval-version /usr/local/bin/kubectl-shturval && sudo chmod +x /usr/local/bin/kubectl-shturval
Вместо /downloads/kubectl-shturval-version следует указать путь до файла kubectl-shturval-version, загруженного на шаге 1);
- убедиться, что файл располагается в той же директории, что и исполняемый файл kubectl (рисунок 4):
ls /usr/local/bin/ | grep kubectl-shturval

Рисунок 4 ‒ Расположение исполняемого файла kubectl
Команды и доступные параметры модуля
Команды и доступные параметры модуля приведены в таблицах 7‒9.
Пример вызова справки команды kubectl shturval login:
kubectl shturval login -h
Результат показан на рисунке 5.

Рисунок 5 ‒ Результат выполнения команды
Примеры генерации конфигурационного файла
Для генерации конфигурационного файла нужно запустить команду kubectl shturval login genconfig, в которую необходимо подставить свои значения параметров:
- Команда генерации конфигурационного файла без заданных параметров (только со значениями по умолчанию):
kubectl shturval login genconfig
- Команда генерации конфигурационного файла с параметрами учетной записи, URL shturval-backend сервера и без проверки безопасности TLS-соединения:
kubectl shturval login genconfig --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --insecure=true --client-secret=clientsecret
Вместо "clientsecret" требуется вписать значение ключа "backend" секрета "auth-clients". Он находится в неймспейсе shturval-backend кластера управления.
Результат показан на рисунке 6.

Рисунок 6 ‒ Результат выполнения команды
Ваш конфигурационный файл с именем "shturval-login-plugin.yaml" и заданными параметрами будет находится в директории /root.
- Команда генерации конфигурационного файла с параметрами учетной записи, URL shturval-backend сервера, загрузкой конфигурационного файла в заданную директорию и без проверки TLS-соединения:
kubectl shturval login genconfig --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --insecure=true --client-secret=clientsecret --config-path=/mydir
Вместо "clientsecret" следует вписать значение ключа "backend" секрета "auth-clients". Он находится в неймспейсе shturval-backend кластера управления.
- Команда генерации конфигурационного файла с параметрами учетной записи URL shturval-backend сервера и с проверкой безопасности TLS- соединения (задан корневой сертификат):
kubectl shturval login genconfig --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cacert=-----BEGIN CERTIFICATE-----Содержимое в Base64-----END CERTIFICATE-----
- Команда генерации конфигурационного файла с проверкой безопасности TLS-соединения (задан путь до корневого доверенного сертификата в параметре):
kubectl shturval login genconfig --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cacert-file=/downloads/ca-cert.pem
- Команда генерации конфигурационного файла с измененными по умолчанию параметрами идентификатора клиента для внешнего сервиса аутентификации, URL-адреса сервера аутентификации и директории для загрузки kubeconfigs:
kubectl shturval login genconfig --kubeconfig=/tmp/kube/config --auth-url=keycloak.apps.ip-XX-XX-XXX-XX.shturval.link --client-id=myclient
Примеры загрузки kubeconfigs доступных кластеров, если сгенерирован конфигурационный файл
Для загрузки kubeconfigs доступных кластеров нужно запустить команду kubectl shturval login, в которую необходимо подставить свои значения параметров.
- Команда загрузки kubeconfigs доступных кластеров, если конфигурационный файл был сконфигурирован без заданных параметров (только со значениями по умолчанию):
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --insecure=true --client-secret=clientsecret
- Команда загрузки kubeconfigs доступных кластеров, если конфигурационный файл был сконфигурирован без пароля пользователя, а остальные обязательные параметры для загрузки kubeconfigs доступных кластеров заданы в конфигурационном файле:
kubectl shturval login --password='my$Password?'
- Команда загрузки kubeconfigs доступных кластеров, если конфигурационный файл включает все обязательные параметры для загрузки kubeconfigs доступных кластеров:
kubectl shturval login
Результат показан на рисунке 7.

Рисунок 7 ‒ Результат выполнения команды
- Команда загрузки kubeconfigs доступных кластеров, если в конфигурационном файле заданы все обязательные параметры для загрузки kubeconfigs доступных кластеров, и необходимо выполнить загрузку kubeconfigs с доступом другой учетной записи:
kubectl shturval login --username=myName --password='my$Password?'
Примеры загрузки kubeconfigs кластеров без конфигурационного файла
Для загрузки kubeconfigs доступных кластеров нужно запустить команду kubectl shturval login, в которую необходимо подставить свои значения параметров.
- Команда загрузки kubeconfigs кластеров с заданными обязательными параметрами учетной записи, URL shturval-backend сервера, секрета клиента для сервиса аутентификации и без проверки безопасности TLS-соединения:
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --insecure=true --client-secret=clientsecret
где вместо "myName" и "my$Password?" указать ваш логин и пароль, в "server-url" задать IP-адрес shturval-backend сервера вместо "XX-XX-XXX-XX".
Результат показан на рисунке 8.

Рисунок 8 ‒ Результат выполнения команды
- Команда загрузки kubeconfigs кластеров с заданными обязательными параметрами учетной записи, URL shturval-backend сервера, секрета клиента для сервиса аутентификации и включенной проверкой безопасности TLS- соединения (задан корневой сертификат):
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cacert=-----BEGIN CERTIFICATE-----Содержимое в Base64-----END CERTIFICATE-----
- Команда загрузки kubeconfigs кластеров с заданными обязательными параметрами учетной записи, URL shturval-backend сервера, секрета клиента для сервиса аутентификации и включенной проверкой безопасности TLS-соединения (задан путь до корневого доверенного сертификата):
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cacert-file=/downloads/ca_cer.pem
Результат показан на рисунке 9.

Рисунок 9 ‒ Результат выполнения команды
- Команда загрузки kubeconfigs кластеров с заданными обязательными параметрами, без проверки безопасности TLS-соединения, с заданной директорией для загрузки kubeconfigs доступных кластеров:
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --insecure=true --client-secret=clientsecret --kubeconfig=/tmp/kube/config
Результат показан на рисунке 10.

Рисунок 10 ‒ Результат выполнения команды
- Команда загрузки kubeconfig одного кластера с заданными обязательными параметрами аутентификации, без проверки безопасности TLS-соединения:
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cluster-name=myclustername --insecure=true
где вместо "myName" и "myPassword?" указать ваш логин и пароль, в "server-url" задать IP-адрес shturval-backend сервера вместо "XX-XX-XXX-XX".
Результат показан на рисунке 11.

Рисунок 11 ‒ Результат выполнения команды
- Команда загрузки kubeconfig одного кластера с заданными обязательными параметрами аутентификации, проверкой безопасности TLS-соединения:
kubectl shturval login --username=myName --password='my$Password?' --server-url=https://back.apps.ip-XX-XX-XXX-XX.shturval.link --client-secret=clientsecret --cluster-name=myclustername --cacert-file=/downloads/ca_cer.pem
Результат показан на рисунке 12.

Рисунок 12 ‒ Результат выполнения команды
Подготовка конфигурационного файла и аутентификация
Из интерфейса командной строки
Если модуль "kubectl-shturval-plugin" установлен, можно сгенерировать конфигурационный файл с необходимым набором параметров. Для этого требуется:
- запустить команду
kubectl shturval login genconfig, в которую необходимо подставить свои значения параметров; - убедиться, что конфигурационный файл подготовлен:
cat /root/shturval-login-plugin.yaml
Результат показан на рисунке 13.

Рисунок 13 ‒ Результат выполнения команды
- выполнить команду
kubectl shturval loginдля загрузки kubeconfigs доступных кластеров, в которую подставить свои значения параметров.
Следует обратить внимание, что данные параметров, которые указываются в команде kubectl shturval login будут иметь приоритет перед значениями этих же параметров конфигурационного файла shturval-login-plugin.yaml. При этом значения параметров конфигурационного файла не будут перезаписаны.
Из графического интерфейса для одного кластера
Для подготовки конфигурационного файла и аутентификации из графического интерфейса для одного кластера нужно выполнить следующие действия:
- для скачивания конфигурационного файла перейти в ваш кластер и нажать стрелку справа от имени пользователя. Выбрать "Скачать config" для shturval-login-plugin (рисунок 14). Начнется загрузка файла shturval-login-plugin.yaml.

Рисунок 14 ‒ Загрузка config
Пример shturval-login-plugin.yaml:
auth-url: auth.apps.ip-XX-XX-XX-XX.shturval.link
client-id: backend
client-secret: qz86fkqkb
cacert: |
-----BEGIN CERTIFICATE-----
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
A1UEBhMCVVMxFjAUBgNpFQUWw==
-----END CERTIFICATE-----
username: username
cluster-name: clustername
kubeConfig: clustername.conf
server-url: back.apps.ip-XX-XX-XX-XX.shturval.link
Следует обратить внимание, что в конфигурационном файле путь расположения загруженного kubeconfig кластера изменен. Kubeconfig кластера будет загружен в директорию, где выполняются команды, и с именем, соответствующим названию кластеру.
- поместить полученный конфигурационный файл в папку
/root:
mv /downloads/shturval-login-plugin.yaml /root/shturval-login-plugin.yaml
где /downloads/shturval-login-plugin.yaml ‒ путь до загруженного из графического интерфейса shturval-login-plugin.yaml;
- выполнить команду для загрузки kubeconfig кластера, обязательно указав пароль вашей учетной записи в параметре "--password".
Пример загрузки kubeconfig кластера со значениями загруженного конфигурационного файла:
kubectl shturval login --password='my$Password?'
- переместить kubeconfig кластера в папку
~/.kubeи переименовать файл в config:
mv /root/clustername.conf ~/.kube/config
где /root/clustername.conf ‒ путь до kubeconfig кластера, загруженного на предыдущем шаге.
Из графического интерфейса для нескольких кластеров
Для подготовки конфигурационного файла и аутентификации из графического интерфейса для нескольких кластеров нужно выполнить следующие действия:
- из графического интерфейса можно скачать конфигурационный файл, чтобы загрузить kubeconfigs всех доступных пользователю кластеров;
- на главной странице Комплекса нажать стрелку справа от имени пользователя и выбрать "Скачать config shturval-login-plugin для всех кластеров" (рисунок 15). Начнется загрузка файла shturval-login-plugin.yaml.

Рисунок 15 ‒ Загрузка файла shturval-login-plugin.yaml
Пример shturval-login-plugin.yaml:
auth-url: auth.apps.ip-XX-XX-XX-XX.shturval.link
client-id: backend
client-secret: qz86fkqkb
cacert: |
-----BEGIN CERTIFICATE-----
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
A1UEBhMCVVMxFjAUBgNpFQUWw==
-----END CERTIFICATE-----
username: username
kubeConfig: all-clusters.conf
server-url: back.apps.ip-XX-XX-XX-XX.shturval.link
Следует обратить внимание, что в конфигурационном файле путь расположения загруженных kubeconfigs кластеров изменен. kubeconfigs кластеров будут загружены в файл all-clusters.conf директории, где выполняются команды.
- поместить полученный конфигурационный файл в папку
/root:
mv /downloads/shturval-login-plugin.yaml /root/shturval-login-plugin.yaml
где /downloads/shturval-login-plugin.yaml ‒ путь до загруженного из графического интерфейса shturval-login-plugin.yaml;
- выполнить команду для загрузки kubeconfigs кластеров, обязательно указав пароль учетной записи в параметре "--password".
Пример загрузки kubeconfigs кластеров со значениями загруженного конфигурационного файла:
kubectl shturval login --password='my$Password?'
- переместить kubeconfigs кластеров в папку
~/.kubeи переименовать файл в config:
mv /root/all-clusters.conf ~/.kube/config
где /root/all-clusters.conf ‒ путь до kubeconfigs кластеров.
Порядок действий для аутентификации без конфигурационного файла
Загрузка kubeconfigs кластеров
- После установки модуля "kubectl-shturval-plugin" выполнить подключение к Комплексу с обязательными параметрами аутентификации. При необходимости сконфигурировать дополнительные параметры и выполнить команду
kubectl shturval login, в которую подставить свои значения параметров.
В результате выполнения команды kubectl shturval login:
- будет пройдена аутентификация в Комплексе;
- kubeconfigs всех доступных кластеров будут загружены в файл config директории
/root/.kube(если директория не была переопределена);
- после загрузки kubeconfigs получить список контекстов кластеров, которыми можно управлять:
kubectl config get-contexts
Результат показан на рисунке 16.

Рисунок 16 ‒ Результат выполнения команды
- настроить контекст в kubectl для управления требуемым кластером:
kubectl config use-context context-name
где вместо "context-name" указать имя необходимого контекста.
Результат показан на рисунке 17.

Рисунок 17 ‒ Результат выполнения команды
- убедиться, что контекст верно настроен:
kubectl config current-context
Результат показан на рисунке 18.

Рисунок 18 ‒ Результат выполнения команды
Следует использовать команды kubectl для управления кластером указанного контекста.
Загрузка kubeconfig одного кластера
После установки модуля "kubectl-shturval-plugin" можно загрузить kubeconfig одного кластера. Для этого следует выполнить следующие действия:
- выполнить подключение к Комплексу с обязательными параметрами аутентификации и заданным именем кластера в значении параметра "--cluster-name". При необходимости сконфигурировать дополнительные параметры, выполнить команду
kubectl shturval login, в которую подставить свои значения для параметров.
В результате выполнения команды kubectl shturval login будет:
- пройдена аутентификация в Комплексе;
- kubeconfig указанного кластера загружен в файл config директории
/root/.kube(если директория по умолчанию не была переопределена в параметре — "kubeconfig");
- после загрузки kubeconfig проверить на какой контекст настроен kubectl:
kubectl config current-context
Следует использовать команды kubectl для управления кластером текущего контекста.
Аутентификация с kubeconfig кластера
После скачивания kubeconfig кластера clustername.conf из графического интерфейса Комплекса нужно выполнить аутентификацию с kubeconfig в интерфейсе командной строки:
- проверить список файлов папки
~/.kube.
- Если в папке нет файла config, то поместить скачанный kubeconfig в папку
~/.kubeи переименовать файл в config. Проверить расположение файла config.
Поместить в ~/.kube и переименовать clustername.conf
mv /downloads/clustername.conf ~/.kube/config
Проверить расположение config
ls ~/.kube/ | grep config
где /downloads/clustername.conf ‒ путь до загруженного из графического интерфейса clustername.conf.
- Если в
~/.kubeуже существует файл config с kubeconfig от другого кластера, то выполнить один из способов:- Первый способ: Перезаписать его данные новым kubeconfig кластера.
- Второй способ: Экспортировать переменную "KUBECONFIG", чтобы указать путь до нового kubeconfig кластера. В этом случае данные kubeconfig другого кластера останутся в файле config.
Команда обновления данных config:
Поместить в ~/.kube и переименовать clustername.conf
mv /downloads/clustername.conf ~/.kube/config
где /downloads/clustername.conf ‒ путь до загруженного из графического интерфейса clustername.conf.
Команда экспорта переменной:
export KUBECONFIG=/root/.kube/clustername.conf
где вместо /root/.kube/clustername.conf указать путь до kubeconfig кластера.
- проверить доступ к кластеру, используя команды kubectl для управления кластером.
Пример:
Тестовое подключение к кластеру
kubectl cluster-info
Вывести список узлов кластера
kubectl get nodes
Если возникли ошибки доступа в кластер, можно найти способ решения проблемы в п. Действия в случае типовых ошибок доступа
Действия в случае типовых ошибок доступа
- Ошибка недействительности токена (access token)
E1202 11:06:00.839825 3042497 memcache.go:265]
couldn't get current server API group list: the server has asked for the client to provide credentials
...
error: You must be logged in to the server (the server has asked for the client to provide credentials)
Решение:
- из графического интерфейса Комплекса повторно скачать kubeconfig кластера;
- выполнить шаги п. Аутентификация с kubeconfig кластера или с помощью модуля "kubectl-shturval-plugin" (п. Установка модуля kubectl-shturval-plugin) загрузить повторно kubeconfig кластера.
- Некорректный сертификат в kubeconfig кластера
Может возникнуть в случае, если в kubeconfig содержится сертификат от другого кластера:
Unable to connect to the server: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
Решение:
- из графического интерфейса Комплекса повторно скачать kubeconfig кластера;
- выполнить шаги п. Аутентификация с kubeconfig кластера или с помощью модуля "kubectl-shturval-plugin" (п. Установка модуля kubectl-shturval-plugin) загрузить повторно kubeconfig кластера.
- Ошибка экспорта kubeconfig кластера
E1216 16:19:13.703968 7159 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
...
E1216 16:19:13.707804 7159 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
The connection to the server localhost:8080 was refused ‒ did you specify the right host or port?
Решение:
Экспортировать kubeconfig в папку ~/.kube. Если имя файла kubeconfig кластера отличается от config, переименовать файл kubeconfig кластера:
Поместить в ~/.kube и переименовать clustername.conf
mv /downloads/clustername.conf ~/.kube/config
Проверить расположение config
ls ~/.kube/ | grep config
где /downloads/clustername.conf ‒ путь до расположения kubeconfig кластера.
- Ошибка синхронизации времени
Unable to connect to the server: tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2023-12-16T16:30:28+03:00 is before 2024-12-16T09:14:38Z
Решение:
Необходимо включить синхронизацию по протоколу Network Time Protocol (NTP). Перейти к инструкции синхронизации времени для различных операционных систем (ОС) и выполнить синхронизацию. Если в ОС установлен один из сервисов NTP ‒ timesyncd, ntpd, Chrony, можно использовать команду timedatectl для настройки синхронизации времени:
Проверить запущен ли сервис NTP
timedatectl timesync-status
Установить синхронизацию с сервисом NTP
timedatectl set-ntp on
Проверить настройки даты и времени
timedatectl
Пример при включенной синхронизации времени:
Local time: Tue 2024-12-17 13:07:44 MSK
Universal time: Tue 2024-12-17 10:07:44 UTC
RTC time: Tue 2024-12-17 10:07:43
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
- Ошибка в работе OIDC
Данная ошибка может возникнуть в случаях:
- невалидного CA-сертификата;
- недоступности кластера управления;
- отсутствия у пользователя необходимых прав на выполнение действий в кластере.
error: You must be logged in to the server (Unauthorized)
Действия:
Получить логи контейнера kube-apiserver на каждом Master-узле, чтобы убедиться в валидности СА-сертификата.
Команда получения логов контейнера kube-apiserver:
crictl logs $(crictl ps | awk '/kube-apiserver/ {print $1}')
Если на Master-узле получена ошибка, то причина ошибки в невалидном СА-сертификате. Пример ответа ошибки:
E1216 14:14:01.209890 1 authentication.go:73] "Unable to authenticate the request" err="[invalid bearer token, oidc: authenticator not initialized]"
E1216 14:14:06.695653 1 oidc.go:304] oidc authenticator: initializing plugin: Get "https://auth.apps.ip-xx-xx-xx-xx.shturval.link/.well-known/openid-configuration": tls: failed to verify certificate: x509: certificate signed by unknown authority
Решение:
- Если ошибка из-за СА-сертификата, то получить валидный СА-сертификат, добавить данные сертификата на Master-узлы в
/etc/ssl/certs/oidc.crt. СА-сертификат содержится в Configmap root-ca неймспейса cert-manager в вашем кластере. При отсутствии доступа к Configmap root-ca обратиться за получением валидного СА-сертификата к администратору кластера. - Если проблема не с СА-сертификатом, обратиться к администратору Комплекса для уточнения доступности кластера управления.
- Если сертификат валидный и кластер управления доступен, то у вас недостаточно прав для действий в кластере. Следует запросить у администратора кластера расширение прав.
- Отсутствие доступа к API-серверу
Данная ошибка может возникнуть в случае, если API-сервер не работает, перезапускается или заблокирован.
The connection to the server ХХХ.ХХХ.ХХХ.ХХХ:6443 was refused ‒ did you specify the right host or port?
Действия:
- обратиться к администратору Комплекса или кластера для выяснения причин перезапуска или отказа в работе API-сервера.