Top.Mail.Ru

Облако

Подключение к worker-нодам по SSH

В большинстве случаев для работы с кластером Managed Kubernetes достаточно kubectl. Но иногда нужен прямой доступ к worker-ноде: посмотреть системные логи kubelet или containerd, диагностировать проблемы с сетью на уровне ОС, проверить состояние дисков или отладить поведение пода, которое не воспроизводится через kubectl.

 SSH-подключение даёт полный доступ к операционной системе ноды и её инструментам — systemctl, journalctl, tcpdump, dmesg и другим. Это основной способ низкоуровневой диагностики, когда стандартных средств Kubernetes недостаточно.

В этой инструкции мы покажем, как безопасно подключиться к worker-нодам, несмотря на то что они находятся в приватной сети и недоступны из интернета напрямую.

Чтобы получить SSH-доступ к worker-нодам, необходимо создать промежуточную виртуальную машину (bastion-хост/jump-хост) в той же сети, что и кластер. Сначала вы подключаетесь по SSH к промежуточному хосту, а затем — с него к нужной worker-ноде.

Шаг 1. Узнайте сеть и подсеть кластера

Промежуточный хост должен находиться в той же сети, что и кластер. Для этого нужно узнать, какая сеть используется.

  1. Откройте личный кабинет EdgeCenter.
  2. Перейдите в раздел Managed Kubernetes.
  3. Нажмите на имя вашего кластера.
  4. В информации о кластере найдите раздел Сеть — запомните название сети и подсети.

Шаг 2. Создайте промежуточный хост

Промежуточный хост — это обычная виртуальная машина, которая будет выступать промежуточным узлом для SSH-подключения.

  1. В личном кабинете перейдите в раздел Виртуальные машины и нажмите Создать виртуальную машину.
  2. Выберите тот же регион, в котором развёрнут кластер.
  3. Выберите образ ОС — например, Ubuntu 22.04 LTS.
  4. Выберите минимальную конфигурацию — для промежуточного хоста достаточно минимальной конфигурации.
  5. В разделе Сетевой интерфейс добавьте два интерфейса:
    • Публичный интерфейс — для подключения из интернета к промежуточному хосту.
    • Приватный интерфейс — выберите ту же сеть и подсеть, что и у кластера (из шага 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-подключения из приватной подсети.

Для проверки:

  1. В личном кабинете перейдите в раздел Сеть, а затем в подраздел Файрволы.
  2. Откройте файрвол, назначенный промежуточному хосту.
  3. Убедитесь, что в Правилах входящего соединения, есть протокол TCP, порт 22.
  4. Если правила нет — добавьте его. 

Примечание: по умолчанию выбран файрвол 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_key

2. Подключитесь к промежуточному хосту с флагом -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 kubelet

Kubelet должен быть в статусе active (running).

Мы используем cookie, чтобы сайт стал лучше для вас.