Подключение к узлу по SSH
Чтобы подключиться к узлу кластера Managed Service for Kubernetes по SSH:
-
Добавьте публичный ключ в метаданные при создании группы узлов Managed Service for Kubernetes.
Примечание
В образах Linux, которые используются на узлах Managed Service for Kubernetes, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.
-
Настройте группы безопасности кластера Managed Service for Kubernetes.
Важно
Настройки групп безопасности могут препятствовать подключению к кластеру Managed Service for Kubernetes.
Подробнее см. в разделе Подключение к виртуальной машине по SSH.
Отдельные узлы в группах узлов — это виртуальные машины Yandex Compute Cloud с автоматически сгенерированными именами. Чтобы сконфигурировать узлы, воспользуйтесь инструкциями, приведенными ниже, или другими инструкциями по управлению группами узлов.
Внимание
Не изменяйте параметры ВМ узлов, в том числе имена, сетевые интерфейсы и SSH-ключи, с помощью интерфейсов Compute Cloud или SSH-подключения к ВМ.
Это может нарушить работу отдельных узлов, групп узлов и всего кластера Managed Service for Kubernetes.
Создайте пары ключей SSH
Подготовьте ключи для использования с вашим узлом кластера Managed Service for Kubernetes. Для этого:
-
Откройте терминал.
-
Создайте новый ключ с помощью команды
ssh-keygen
:ssh-keygen -t ed25519
После выполнения команды вам будет предложено указать имена файлов, в которые будут сохранены ключи и ввести пароль для закрытого ключа. По умолчанию используется имя
id_ed25519
, ключи создаются в директории~/.ssh
.Публичная часть ключа будет сохранена в файле с названием
<имя_ключа>.pub
.
-
Запустите
cmd.exe
илиpowershell.exe
. -
Создайте новый ключ с помощью команды
ssh-keygen
. Выполните команду:ssh-keygen -t ed25519
После выполнения команды вам будет предложено указать имя файлов, в которые будут сохранены ключи и ввести пароль для закрытого ключа. По умолчанию используется имя
id_ed25519
, ключи создаются в директорииC:\Users\<имя_пользователя>\.ssh\
.Публичная часть ключа будет сохранена в файле с названием
<имя_ключа>.pub
.
Создайте ключи с помощью приложения PuTTY:
-
Скачайте
и установите PuTTY. -
Убедитесь, что директория, куда вы установили PuTTY, присутствует в
PATH
:- Нажмите правой кнопкой на Мой компьютер. Выберите пункт Свойства.
- В открывшемся окне выберите Дополнительные параметры системы, затем Переменные среды (находится в нижней части окна).
- В разделе Системные переменные найдите
PATH
и нажмите Изменить. - В поле Значение переменной допишите путь к директории, куда вы установили PuTTY.
-
Запустите приложение PuTTYgen.
-
В качестве типа генерируемой пары выберите Ed25519. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.
-
В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.
-
Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.
-
Сохраните ключ в текстовом файле одной строкой. Для этого скопируйте открытый ключ из текстового поля в текстовый файл с названием
id_ed25519.pub
.
Приведите публичный ключ к формату метаданных
Реквизитами для подключения к узлам кластера Managed Service for Kubernetes по SSH являются имя пользователя и публичный ключ. Данные реквизиты передаются с помощью метаданных в определенном формате.
Созданный ранее публичный ключ имеет следующий формат:
<тип_ключа> <тело_публичного_ключа> <опциональный_комментарий>
Пример:
ssh-ed25519 AAAAB3NzaC***********lP1ww ed25519-key-20190412
Создайте файл с реквизитами для подключения по SSH в следующем формате:
<имя_пользователя>:<тип_ключа> <тело_публичного_ключа> <имя_пользователя>
Пример:
testuser:ssh-ed25519 AAAAB3NzaC***********lP1ww testuser
Данный формат подходит для создания и изменения группы узлов Managed Service for Kubernetes с помощью интерфейсов CLI, Terraform и API, а также для изменения группы узлов с помощью консоли управления. При создании группы узлов в консоли управления используются отдельные поля Логин и SSH-ключ.
В одном файле можно передать реквизиты для нескольких пользователей.
Пример:
testuser1:ssh-ed25519 AAAAB3NzaC***********lP1ww testuser1 testuser2:ssh-ed25519 ONEMOREkey***********avEHw testuser2
Создайте группу узлов и добавьте публичный ключ
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for Kubernetes. - Выберите кластер Managed Service for Kubernetes.
- На панели слева выберите Управление узлами.
- Нажмите кнопку Создать группу узлов.
- Задайте параметры группы узлов.
- В блоке Доступ укажите данные для доступа на узел Managed Service for Kubernetes:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла публичного ключа.
- Нажмите кнопку Создать.
Метаданные с реквизитами для подключения по SSH передаются в группу узлов Managed Service for Kubernetes в виде пар ключ=значение
.
Важно
Ключ user-data
метаданных ВМ не поддерживается для передачи пользовательских данных. Передайте параметры для подключения по SSH в ключе ssh-keys
.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать группу узлов Managed Service for Kubernetes и передать данные пользователя для подключения по SSH, выполните команду:
yc managed-kubernetes node-group create \
--name <имя_группы_узлов> \
--cluster-name <имя_кластера> \
--fixed-size <количество_узлов_в_группе> \
--network-interface security-group-ids=[<список_групп_безопасности>],subnets=<имя_подсети>,ipv4-address=nat \
--metadata-from-file ssh-keys=<путь_к_файлу_с_реквизитами>
Где --metadata-from-file
— параметр для передачи метаданных в группу узлов в виде пар ключ=значение
. Укажите в ключе ssh-keys
путь к файлу с реквизитами для подключения по SSH.
Метаданные с реквизитами для подключения по SSH передаются в группу узлов Managed Service for Kubernetes в виде пар ключ=значение
.
Важно
Ключ user-data
метаданных ВМ не поддерживается для передачи пользовательских данных. Передайте параметры для подключения по SSH в ключе ssh-keys
.
-
Создайте конфигурационный файл Terraform с описанием группы узлов Managed Service for Kubernetes согласно инструкции Создание группы узлов.
-
В описании группы узлов задайте значение ключа метаданных
ssh-keys
для параметраinstance_template.metadata
:resource "yandex_kubernetes_node_group" "<имя_группы_узлов>" { cluster_id = yandex_kubernetes_cluster.<имя_кластера>.id ... instance_template { metadata = { "ssh-keys" = file("<путь_к_файлу_с_реквизитами>") ... } ... } ... }
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
Метаданные с реквизитами для подключения по SSH передаются в группу узлов Managed Service for Kubernetes в виде пар ключ=значение
.
Важно
Ключ user-data
метаданных ВМ не поддерживается для передачи пользовательских данных. Передайте параметры для подключения по SSH в ключе ssh-keys
.
Если вы хотите передать несколько реквизитов для подключения по SSH, преобразуйте содержимое файла с реквизитами в одну строку, отделив реквизиты друг от друга последовательностью специальных символов CRLF (\r\n
). В запросе к API с телом в формате JSON нельзя использовать многострочные сообщения.
Пример преобразованных реквизитов:
testuser1:ssh-ed25519 AAAAB3NzaC***********lP1ww testuser1\r\ntestuser2:ssh-ed25519 ONEMOREkey***********avEHw testuser2
Воспользуйтесь методом REST API create для ресурса NodeGroup или вызовом gRPC API NodeGroupService/Create.
Реквизиты для подключения по SSH передаются в параметре nodeTemplate.metadata
в ключе ssh-keys
.
Подробнее о создании группы узлов Managed Service for Kubernetes и передаваемых параметрах см. на странице Создание группы узлов.
Обновите ключи группы узлов
Чтобы изменить реквизиты для подключения по SSH к группе узлов Managed Service for Kubernetes, обновите ее метаданные.
Важно
Реквизиты для подключения по SSH будут полностью перезаписаны. Вы не сможете подключиться к узлам кластера Managed Service for Kubernetes с помощью прежних реквизитов.
Важно
После изменения метаданных через консоль управленияReconciling
: все узлы в группе будут пересозданы для применения изменений.
- В консоли управления
перейдите на страницу каталога и выберите сервис Managed Service for Kubernetes. - Выберите кластер Managed Service for Kubernetes.
- На панели слева выберите Управление узлами.
- На вкладке Группы узлов выберите группу узлов, в которой вы хотите обновить реквизиты.
- На панели сверху нажмите кнопку
Редактировать. - Раскройте блок Метаданные.
- Замените текущее значение ключа
ssh-keys
на содержимое файла с реквизитами. - Нажмите кнопку Сохранить.
-
Посмотрите описание команды CLI для добавления и обновления метаданных группы узлов Managed Service for Kubernetes:
yc managed-kubernetes node-group add-metadata --help
-
Выполните команду:
yc managed-kubernetes node-group add-metadata \ --name <имя_группы_узлов> \ --metadata-from-file ssh-keys=<путь_к_файлу_с_реквизитами>
Имя группы узлов можно запросить со списком групп узлов в каталоге.
-
Откройте конфигурационный файл Terraform с описанием группы узлов Managed Service for Kubernetes.
О том, как создать такой файл, см. в разделе Создание группы узлов.
-
Измените в описании группы узлов значение ключа метаданных
ssh-keys
для параметраinstance_template.metadata
:resource "yandex_kubernetes_node_group" "<имя_группы_узлов>" { cluster_id = yandex_kubernetes_cluster.<имя_кластера>.id ... instance_template { metadata = { "ssh-keys" = file("<путь_к_файлу_с_реквизитами>") ... } ... } ... }
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform
-
Если вы хотите передать несколько реквизитов для подключения по SSH, преобразуйте содержимое файла с реквизитами в одну строку, отделив реквизиты друг от друга последовательностью специальных символов CRLF (
\r\n
). В запросе к API с телом в формате JSON нельзя использовать многострочные сообщения.Пример преобразованных реквизитов:
testuser1:ssh-ed25519 AAAAB3NzaC***********lP1ww testuser1\r\ntestuser2:ssh-ed25519 ONEMOREkey***********avEHw testuser2
-
Получите все существующие метаданные для группы узлов, воспользовавшись методом REST API get для ресурса NodeGroup, и передайте в запросе идентификатор группы узлов в параметре
nodeGroupId
.Имя группы узлов можно запросить со списком групп узлов в каталоге.
Метаданные будут перечислены в виде пар
ключ=значение
в полеnodeTemplate.metadata
ответа. -
Воспользуйтесь методом REST API update для ресурса NodeGroup и передайте в запросе:
-
Идентификатор группы узлов в параметре
nodeGroupId
. -
Параметр
updateMask
со значениемnodeTemplate.metadata
.Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
(одной строкой через запятую). -
Параметр
nodeTemplate.metadata
, в котором перечислены без изменений все существующие метаданные группы узлов в виде парключ=значение
.Для ключа
ssh-keys
замените текущее значение на созданную строку с реквизитами.Пример перечисления метаданных в параметре
-
Существующие ключи метаданных в группе узлов:
"nodeTemplate": { "metadata": { "ssh-keys": "<существующие_реквизиты_одной_строкой>", "<существующий_ключ_1>": "<существующее_значение_1>", "<существующий_ключ_2>": "<существующее_значение_2>" }, ... }
-
Ключи метаданных для передачи в запросе к API:
"nodeTemplate": { "metadata": { "ssh-keys": "<новые_реквизиты_одной_строкой>", "<существующий_ключ_1>": "<существующее_значение_1>", "<существующий_ключ_2>": "<существующее_значение_2>" } }
Внимание
Метаданные, не перечисленные в параметре
nodeTemplate.metadata
, будут удалены.После этого группа узлов временно перейдет в статус Reconciling: все узлы в группе узлов будут пересозданы для применения изменений.
-
-
Получите публичный IP-адрес узла
Чтобы подключиться к узлу кластер Managed Service for Kubernetes, укажите публичный IP-адрес узла Managed Service for Kubernetes. Его можно узнать одним из следующих способов.
- Откройте раздел Compute Cloud в каталоге, где создан ваш кластер Managed Service for Kubernetes.
- На панели слева выберите
Группы виртуальных машин. - Нажмите на группу ВМ, имя которой соответствует идентификатору группы узлов Managed Service for Kubernetes.
- В открывшемся окне перейдите на вкладку Список ВМ.
- Нажмите на ВМ, публичный адрес которой хотите узнать.
- Публичный IP-адрес указан в блоке Сеть в строке Публичный IPv4-адрес.
-
Узнайте идентификатор группы ВМ, которая соответствует группе узлов Managed Service for Kubernetes.
Идентификатор находится в столбце
INSTANCE GROUP ID
.yc managed-kubernetes node-group list
Результат:
+----------------------+----------------------+----------------+----------------------+---------------------+---------+------+ | ID | CLUSTER ID | NAME | INSTANCE GROUP ID | CREATED AT | STATUS | SIZE | +----------------------+----------------------+----------------+----------------------+---------------------+---------+------+ | cat684ojo3ir******** | cata9ertn6tc******** | test-nodegroup | cl17i6943n92******** | 2019-04-12 12:38:35 | RUNNING | 2 | +----------------------+----------------------+----------------+----------------------+---------------------+---------+------+
-
Посмотрите список узлов Managed Service for Kubernetes, которые принадлежат данной группе.
Публичный IP-адрес узла Managed Service for Kubernetes указан в столбце
IP
после символа~
.yc compute instance-group list-instances cl17i6943n92********
Результат:
+----------------------+---------------------------+--------------------------+---------------+----------------+ | INSTANCE ID | NAME | IP | STATUS | STATUS MESSAGE | +----------------------+---------------------------+--------------------------+---------------+----------------+ | ef31h24k03pg******** | cl17i6943n92********-itif | 10.0.0.27~84.201.145.251 | RUNNING [53m] | | | ef37ddhg9i7j******** | cl17i6943n92********-ovah | 10.0.0.22~84.201.149.184 | RUNNING [53m] | | +----------------------+---------------------------+--------------------------+---------------+----------------+
-
Установите kubectl
и настройте его на работу с созданным кластером. -
Выполните команду:
kubectl get nodes -o wide
Результат:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME cl17i6943n92********-itif Ready <none> 31m v1.13.3 10.0.0.27 84.201.145.251 Ubuntu 18.04.1 LTS 4.15.0-29-generic docker://18.6.2 cl17i6943n92********-ovah Ready <none> 31m v1.13.3 10.0.0.22 84.201.149.184 Ubuntu 18.04.1 LTS 4.15.0-29-generic docker://18.6.2
Публичный IP-адрес указан в столбце
EXTERNAL-IP
.
Подключитесь к узлу
Вы можете подключиться к узлу Managed Service for Kubernetes по протоколу SSH, когда он будет запущен (в статусе RUNNING
). Для этого можно использовать утилиту ssh
в Linux и macOS и программу PuTTY
В терминале выполните следующую команду, указав имя пользователя и публичный IP-адрес узла:
ssh <имя_пользователя>@<публичный_IP-адрес_узла>
Если вы передавали реквизиты для подключения по SSH при создании группы узлов с помощью консоли управления, используйте имя пользователя, которое вы указали в поле Логин.
Если вы передавали реквизиты для подключения по SSH при создании группы узлов с помощью CLI, Terraform, API или обновляли реквизиты, используйте имя пользователя, которое вы указали в файле с реквизитами для подключения по SSH.
При первом подключении к узлу Managed Service for Kubernetes может появиться предупреждение о неизвестном хосте:
The authenticity of host '130.193.40.101 (130.193.40.101)' can't be established.
ECDSA key fingerprint is SHA256:PoaSwqxRc8g6iOXtiH7ayGHpSN0MXwUfWHk********.
Are you sure you want to continue connecting (yes/no)?
Введите в терминале слово yes
и нажмите Enter.
В Windows соединение устанавливается с помощью приложения PuTTY.
- Запустите приложение Pageant.
- Нажмите правой кнопкой мыши на значок Pageant на панели задач.
- В контекстном меню выберите пункт Add key.
- Выберите сгенерированный PuTTY приватный ключ в формате
.ppk
. Если для ключа задан пароль, введите его.
- Запустите приложение PuTTY.
-
В поле Host Name (or IP address) введите публичный IP-адрес ВМ, к которой вы хотите подключиться. Укажите порт
22
и тип соединения SSH. -
Откройте в дереве слева пункт Connection - SSH - Auth.
-
Установите флаг Allow agent forwarding.
-
В поле Private key file for authentication выберите файл с приватным ключом.
-
Вернитесь в меню Sessions. В поле Saved sessions введите любое название для сессии и нажмите кнопку Save. Настройки сессии сохранятся под указанным именем. Вы сможете использовать этот профиль сессии для подключения с помощью Pageant.
-
Нажмите кнопку Open. Если вы подключаетесь к узлу Managed Service for Kubernetes в первый раз, может появиться предупреждение о неизвестном хосте:
Нажмите кнопку Да. Откроется окно терминала с предложением ввести логин пользователя, от имени которого устанавливается соединение.
Введите имя пользователя:
- Если вы передавали реквизиты для подключения по SSH при создании группы узлов с помощью консоли управления, введите имя пользователя, которое вы указали в поле Логин.
- Если вы передавали реквизиты для подключения по SSH при создании группы узлов с помощью CLI, Terraform, API или обновляли реквизиты, введите имя пользователя, которое вы указали в файле с реквизитами для подключения по SSH.
Нажмите Enter. Если все настроено верно, будет установлено соединение с сервером.
-
Если вы сохранили профиль сессии в PuTTY, в дальнейшем для установки соединения можно использовать Pageant:
- Нажмите правой кнопкой мыши на значок pageant на панели задач.
- Выберите пункт меню Saved sessions.
- В списке сохраненных сессий выберите нужную сессию.