Подключение к узлу через OS Login
OS Login используется вместо SSH-ключей для доступа к виртуальным машинам Yandex Cloud через SSH. С помощью OS Login вы можете подключиться к узлам Managed Service for Kubernetes.
Отдельные узлы в группах узлов — это виртуальные машины Yandex Compute Cloud с автоматически сгенерированными именами. Чтобы сконфигурировать узлы, воспользуйтесь инструкциями, приведенными ниже, или другими инструкциями по управлению группами узлов.
Внимание
Не изменяйте параметры ВМ узлов, в том числе имена, сетевые интерфейсы и SSH-ключи, с помощью интерфейсов Compute Cloud или SSH-подключения к ВМ.
Это может нарушить работу отдельных узлов, групп узлов и всего кластера Managed Service for Kubernetes.
Настройте узел кластера, после чего подключитесь к нему одним из двух способов:
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Включите доступ через OS Login на уровне организации.
-
Включите доступ к узлам из интернета для группы узлов, содержащей узел, к которому нужно подключиться.
-
Убедитесь, что аккаунту, с которого вы подключаетесь к узлу, назначена одна из ролей:
compute.osLogin
— для доступа к узлу без прав sudo;compute.osAdminLogin
— для доступа с правами sudo.
Настройте узел
Подготовьте узел кластера к подключению:
-
Убедитесь, что для узла включен внешний доступ.
-
Активируйте доступ к узлу через OS Login, изменив способ подключения к узлам.
Примечание
После изменения способа подключения группа узлов временно перейдет в статус
Reconciling
: все узлы в группе будут пересозданы для применения изменений.Консоль управленияCLITerraformAPI-
Откройте раздел Managed Service for Kubernetes в каталоге, где находится кластер Managed Service for Kubernetes, к узлу которого нужен доступ.
-
Нажмите на имя нужного кластера Managed Service for Kubernetes.
-
Перейдите во вкладку Группы узлов.
-
Выберите нужную группу узлов.
-
Нажмите кнопку Редактировать в правом верхнем углу.
-
Выберите опцию Доступ по OS Login.
Важно
Если доступ через OS Login включен, то доступ по SSH-ключам будет невозможен.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.Чтобы включить OS Login для всех узлов в группе узлов:
-
Посмотрите описание команды CLI для добавления и обновления метаданных группы узлов Managed Service for Kubernetes:
yc managed-kubernetes node-group add-metadata --help
-
Выполните команду:
yc managed-kubernetes node-group add-metadata \ --name <имя_группы_узлов> \ --metadata enable-oslogin=true
Имя группы узлов можно запросить со списком групп узлов в каталоге.
Важно
Если доступ через OS Login включен, то доступ по SSH-ключам будет невозможен.
-
Откройте актуальный конфигурационный файл Terraform с описанием группы узлов Managed Service for Kubernetes.
О том, как создать такой файл, см. в разделе Создание группы узлов.
-
Добавьте в описание группы узлов параметр
instance_template.metadata
, или измените его, если он уже есть.Укажите в этом параметре ключ метаданных
enable-oslogin
со значениемtrue
:resource "yandex_kubernetes_node_group" "<имя_группы_узлов>" { cluster_id = yandex_kubernetes_cluster.<имя_кластера>.id ... instance_template { metadata = { "enable-oslogin" = "true" ... } ... } ... }
Важно
Если доступ через OS Login включен, то доступ по SSH-ключам будет невозможен.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
.-
Получите все существующие метаданные для группы узлов, воспользовавшись методом REST API get для ресурса NodeGroup, и передайте в запросе идентификатор группы узлов в параметре
nodeGroupId
.Имя группы узлов можно запросить со списком групп узлов в каталоге.
Метаданные будут перечислены в виде пар
ключ=значение
в полеnodeTemplate.metadata
ответа. -
Воспользуйтесь методом API update и передайте в запросе:
-
Идентификатор группы узлов в параметре
nodeGroupId
. -
Параметр
updateMask
со значениемnodeTemplate.metadata
.Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
(одной строкой через запятую). -
Параметр
nodeTemplate.metadata
, в котором перечислены без изменений все существующие метаданные группы узлов в виде парключ=значение
.Для ключа
enable-oslogin
замените текущее значение наtrue
. Если такого ключа нет, добавьте его.Важно
Если доступ через OS Login включен, то доступ по SSH-ключам будет невозможен.
Пример перечисления метаданных в параметре
-
Существующие ключи метаданных в группе узлов:
"nodeTemplate": { "metadata": { "enable-oslogin": "undefined", "<существующий_ключ_1>": "<существующее_значение_1>", "<существующий_ключ_2>": "<существующее_значение_2>" }, ... }
-
Ключи метаданных для передачи в запросе к API:
"nodeTemplate": { "metadata": { "enable-oslogin": "true", "<существующий_ключ_1>": "<существующее_значение_1>", "<существующий_ключ_2>": "<существующее_значение_2>" } }
Внимание
Метаданные, не перечисленные в параметре
nodeTemplate.metadata
, будут удалены.После этого группа узлов временно перейдет в статус Reconciling: все узлы в группе узлов будут пересозданы для применения изменений.
-
-
-
Подключитесь к узлу с помощью CLI
-
Посмотрите описание команды CLI для подключения к узлу:
yc compute ssh --help
-
Чтобы узнать имя нужного узла, получите список узлов в кластере:
yc managed-kubernetes node-group list-nodes --name <имя_группы_узлов>
Пример результата:
+----------------------+-----------------+---------------------------+-------------+--------+ | CLOUD INSTANCE | KUBERNETES NODE | RESOURCES | DISK | STATUS | +----------------------+-----------------+---------------------------+-------------+--------+ | fhmmh23ugigb******** | <имя_узла> | 4 100% core(s), 8.0 GB of | 64.0 GB ssd | READY | | RUNNING_ACTUAL | | memory | | | +----------------------+-----------------+---------------------------+-------------+--------+
-
Подключитесь к узлу:
yc compute ssh --name <имя_узла>
Подключитесь к узлу с помощью SSH
-
Экспортируйте сертификат OS Login.
Примечание
Сертификат действителен один час. По истечении этого времени для подключения к узлу экспортируйте новый сертификат.
-
Узнайте публичный адрес узла:
-
Получите идентификатор группы узлов:
yc managed-kubernetes node-group list
Результат:
+------------------------------+----------------------+-----------+----------------------+---------------------+---------+------+ | ID | CLUSTER ID | NAME | INSTANCE GROUP ID | CREATED AT | STATUS | SIZE | +------------------------------+----------------------+-----------+----------------------+---------------------+---------+------+ | <идентификатор_группы_узлов> | cato4gqs0ave******** | ng-name | cl17a1c3mbau******** | 2024-02-08 04:25:06 | RUNNING | 1 | +------------------------------+----------------------+-----------+----------------------+---------------------+---------+------+
Нужный параметр находится в столбце
ID
. -
Посмотрите список узлов Managed Service for Kubernetes, которые принадлежат этой группе:
yc compute instance-group list-instances <идентификатор_группы_узлов>
Результат:
+----------------------+---------------------------+----------------+-------------+----------------------+----------------+ | INSTANCE ID | NAME | EXTERNAL IP | INTERNAL IP | STATUS | STATUS MESSAGE | +----------------------+---------------------------+----------------+-------------+----------------------+----------------+ | fhm8nq5p7t0r******** | cl12kvrgj493rhrkimmb-**** | 84.201.156.211 | 10.128.0.36 | RUNNING_ACTUAL [25m] | | +----------------------+---------------------------+----------------+-------------+----------------------+----------------+
Публичный IP-адрес узла Managed Service for Kubernetes указан в столбце
EXTERNAL IP
.
-
-
Подключитесь к ВМ:
ssh -i <путь_к_файлу_сертификата> <логин_пользователя>@<публичный_IP-адрес_узла>
Где:
<путь_к_файлу_сертификата>
— путь к сохраненному ранее файлуIdentity
сертификата. Например:/home/user1/.ssh/yc-cloud-id-b1gia87mbaom********-orgusername
.<логин_пользователя>
— логин пользователя, заданный для этого пользователя в профиле OS Login. Логин также указывается в конце имени экспортированного сертификата OS Login. В примере выше этоorgusername
.<публичный_IP-адрес_узла>
— полученный ранее публичный адрес узла.
При первом подключении к узлу появится предупреждение о неизвестном хосте:
The authenticity of host '158.160.**.** (158.160.**.**)' can't be established. ECDSA key fingerprint is SHA256:PoaSwqxRc8g6iOXtiH7ayGHpSN0MXwUfWHk********. Are you sure you want to continue connecting (yes/no)?
Введите в терминале слово
yes
и нажмите Enter.