Облако
Подключение к worker-нодам по SSH
В большинстве случаев для работы с кластером Managed Kubernetes достаточно kubectl. Но иногда нужен прямой доступ к worker-ноде: посмотреть системные логи kubelet или containerd, диагностировать проблемы с сетью на уровне ОС, проверить состояние дисков или отладить поведение пода, которое не воспроизводится через kubectl.
SSH-подключение даёт полный доступ к операционной системе ноды и её инструментам — systemctl, journalctl, tcpdump, dmesg и другим. Это основной способ низкоуровневой диагностики, когда стандартных средств Kubernetes недостаточно.
В этой инструкции мы покажем, как безопасно подключиться к worker-нодам, несмотря на то что они находятся в приватной сети и недоступны из интернета напрямую.
Что понадобится
- Действующий кластер Managed Kubernetes
- SSH-ключ, который был указан при создании кластера
- Доступ к личному кабинету EdgeCenter с правами на создание виртуальных машин
Подключение через промежуточный хост
Чтобы получить SSH-доступ к worker-нодам, необходимо создать промежуточную виртуальную машину (bastion-хост/jump-хост) в той же сети, что и кластер. Сначала вы подключаетесь по SSH к промежуточному хосту, а затем — с него к нужной worker-ноде.
Шаг 1. Узнайте сеть и подсеть кластера
Промежуточный хост должен находиться в той же сети, что и кластер. Для этого нужно узнать, какая сеть используется.
- Откройте личный кабинет EdgeCenter.
- Перейдите в раздел Managed Kubernetes.
- Нажмите на имя вашего кластера.
- В информации о кластере найдите раздел Сеть — запомните название сети и подсети.
Шаг 2. Создайте промежуточный хост
Промежуточный хост — это обычная виртуальная машина, которая будет выступать промежуточным узлом для SSH-подключения.
- В личном кабинете перейдите в раздел Виртуальные машины и нажмите Создать виртуальную машину.
- Выберите тот же регион, в котором развёрнут кластер.
- Выберите образ ОС — например, Ubuntu 22.04 LTS.
- Выберите минимальную конфигурацию — для промежуточного хоста достаточно минимальной конфигурации.
- В разделе Сетевой интерфейс добавьте два интерфейса:
-
- Публичный интерфейс — для подключения из интернета к промежуточному хосту.
- Приватный интерфейс — выберите ту же сеть и подсеть, что и у кластера (из шага 1).
6. В разделе SSH-ключ укажите тот же SSH-ключ, который использовался при создании кластера.
Примечание: использование одного и того же ключа упрощает подключение. Вы также можете использовать другой ключ для bastion-хоста, но тогда для подключения к worker-нодам нужно будет переносить приватный ключ кластера на bastion-хост или использовать SSH Agent Forwarding.
7. Задайте имя виртуальной машине — например, bastion-mkaas.
8. Нажмите Создать виртуальную машину.
9. Дождитесь, пока виртуальная машина перейдёт в статус Включён.
10. Запишите публичный IP-адрес промежуточного хоста — он отображается в столбце «IP адрес» в списке виртуальных машин.
Шаг 3. Узнайте приватные IP-адреса worker-нод
Приватные IP-адреса worker-нод можно узнать через kubectl.
Убедитесь, что kubectl настроен для работы с вашим кластером (см. статью «Подключиться к кластеру Managed Kubernetes»). Выполните команду:
kubectl get nodes -o wide
В выводе найдите столбец INTERNAL-IP — это приватные адреса нод. Запишите адрес нужной worker-ноды.
Пример вывода:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE worker-node-01 Ready <none> 5d v1.31.x 10.0.0.15 <none> Ubuntu 22.04 worker-node-02 Ready <none> 5d v1.31.x 10.0.0.16 <none> Ubuntu 22.04
Шаг 4. Настройте файрвол
Убедитесь, что файрвол, назначенный bastion-хосту, разрешает входящий SSH-трафик (TCP-порт 22). Если вы используете файрвол default, правило для SSH обычно уже настроено.
Также убедитесь, что файрвол worker-нод (указанный при создании пула кластера) разрешает входящие SSH-подключения из приватной подсети.
Для проверки:
- В личном кабинете перейдите в раздел Сеть, а затем в подраздел Файрволы.
- Откройте файрвол, назначенный промежуточному хосту.
- Убедитесь, что в Правилах входящего соединения, есть протокол TCP, порт 22.
- Если правила нет — добавьте его.
Примечание: по умолчанию выбран файрвол default, где уже разрешен входящий трафик по ICMP-, TCP- (SSH) и RDP-протоколам.
Шаг 5. Подключитесь к промежуточному хосту
Linux
Откройте терминал и выполните:
ssh -i /path/to/private_key username@<BASTION_PUBLIC_IP>Где:
- /path/to/private_key — путь к приватному SSH-ключу (файл без расширения .pub).
- username — имя пользователя ОС на bastion-хосте (обычно совпадает с названием ОС, например ubuntu
- <BASTION_PUBLIC_IP> — публичный IP-адрес промежуточного хоста.
Пример:
ssh -i ~/.ssh/id_rsa ubuntu@185.12.30.45
Windows
Используйте приложение PuTTY. Укажите публичный IP-адрес промежуточного хоста в поле «Host Name», порт 22, тип подключения — SSH. В разделе Connection → SSH → Auth → Credentials укажите путь к приватному ключу в формате .ppk.
Примечание: если приватный ключ в формате .pem, конвертируйте его в .ppk с помощью PuTTYgen.
Шаг 6. Подключитесь к worker-ноде с промежуточного хоста
После подключения к промежуточному хосту выполните SSH-подключение к worker-ноде по приватному IP-адресу.
Вариант A. Копирование ключа на промежуточный хост
1. Скопируйте приватный SSH-ключ на bastion-хост с локальной машины:
scp -i /path/to/private_key /path/to/private_key username@<BASTION_PUBLIC_IP>:~/.ssh/cluster_key 2. На промежуточном хосте установите права на ключ:
chmod 600 ~/.ssh/cluster_key
3. Подключитесь к worker-ноде:
ssh -i ~/.ssh/cluster_key ubuntu@<WORKER_PRIVATE_IP>
Где <WORKER_PRIVATE_IP> — приватный IP-адрес worker-ноды из шага 3.
Внимание: хранение приватного ключа на промежуточном хосте менее безопасно. Используйте этот вариант, только если SSH Agent Forwarding недоступен.
Вариант B. SSH Agent Forwarding (рекомендуется)
SSH Agent Forwarding позволяет использовать ключ с локального компьютера без копирования его на промежуточный хост.
1. На локальном компьютере добавьте ключ в SSH-агент:
eval $(ssh-agent)
ssh-add /path/to/private_key2. Подключитесь к промежуточному хосту с флагом -A:
ssh -A -i /path/to/private_key username@<BASTION_PUBLIC_IP>3. С промежуточного хоста подключитесь к worker-ноде (ключ передаётся автоматически):
ssh ubuntu@<WORKER_PRIVATE_IP>Вариант C. SSH ProxyJump (одной командой)
Этот способ позволяет подключиться к worker-ноде одной командой с локального компьютера, используя промежуточный хост как транзитный узел.
ssh -J username@<BASTION_PUBLIC_IP> -i /path/to/private_key ubuntu@<WORKER_PRIVATE_IP>Пример:
ssh -J ubuntu@185.12.30.45 -i ~/.ssh/id_rsa ubuntu@10.0.0.15Чтобы не вводить длинную команду каждый раз, добавьте конфигурацию в файл ~/.ssh/config:
Host bastion
HostName <BASTION_PUBLIC_IP>
User ubuntu
IdentityFile ~/.ssh/id_rsa
Host worker-*
User ubuntu
IdentityFile ~/.ssh/id_rsa
ProxyJump bastion
Host worker-01
HostName 10.0.0.15
Host worker-02
HostName 10.0.0.16После этого подключение к worker-ноде выполняется одной короткой командой:
ssh worker-01Проверка подключения
После успешного подключения к worker-ноде выполните команду:
hostnameВывод должен содержать имя worker-ноды. Также можно проверить, что вы находитесь на ноде кластера:
sudo systemctl status kubeletKubelet должен быть в статусе active (running).