Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все инструкции
    • Подключение к узлу по SSH
    • Подключение к узлу через OS Login
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение Terraform-провайдера Kubernetes
    • Подключение внешних узлов к кластеру
    • Настройка WireGuard-шлюзов для подключения внешних узлов к кластеру
    • Настройка IPSec-шлюзов для подключения внешних узлов к кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Настройка групп безопасности
  • Настройка маршрутизации
  • Настройка WireGuard-шлюзов
  • Решение проблем
  • Ошибка при работе с пакетами docker-ce и containerd на внешнем узле
  1. Пошаговые инструкции
  2. Настройка WireGuard-шлюзов для подключения внешних узлов к кластеру

Настройка WireGuard-шлюзов для подключения внешних узлов к кластеру

Статья создана
Yandex Cloud
Обновлена 18 августа 2025 г.
  • Перед началом работы
  • Настройка групп безопасности
  • Настройка маршрутизации
  • Настройка WireGuard-шлюзов
  • Решение проблем
    • Ошибка при работе с пакетами docker-ce и containerd на внешнем узле

Сервис Yandex Managed Service for Kubernetes позволяет подключать в качестве узлов кластера Kubernetes серверы, расположенные вне Yandex Cloud. Для подключения необходимо организовать сетевую связность между удаленной сетью, в которой расположен внешний сервер, и облачной сетью, в которой находится кластер Managed Service for Kubernetes. Это можно сделать с помощью VPN.

Ниже рассматривается пример организации сетевой связности с помощью протокола WireGuard. В роли внешнего сервера выступает виртуальная машина, расположенная в другой облачной сети Yandex Cloud.

Перед началом работыПеред началом работы

  1. Создайте основную облачную сеть с тремя подсетями в разных зонах доступности.

  2. В основной сети создайте кластер Managed Service for Kubernetes с высокодоступным типом мастера.

    Для создания внешней группы узлов кластер Managed Service for Kubernetes должен работать в туннельном режиме. Он включается только при создании кластера.

  3. Установите kubectl и настройте его на работу с созданным кластером.

  4. В основной сети создайте виртуальную машину Compute Cloud с публичным IP-адресом и назовите ее VM-1. На этой ВМ будет настроен основной WireGuard-шлюз.

  5. Создайте дополнительную облачную сеть с одной подсетью.

  6. В дополнительной сети создайте виртуальную машину Compute Cloud с публичным IP-адресом и назовите ее VM-2. На этой ВМ будет настроен дополнительный WireGuard-шлюз.

Настройка групп безопасностиНастройка групп безопасности

  1. В основной сети создайте группу безопасности и назначьте ее VM-1. Добавьте в группу правила:

    Исходящий трафик
    Входящий трафик
    Описание Диапазон портов Протокол Назначение CIDR блоки
    any 0-65535 Любой CIDR 0.0.0.0/0
    Описание Диапазон портов Протокол Источник CIDR блоки
    icmp 0-65535 ICMP CIDR 0.0.0.0/0
    ssh 22 TCP CIDR 0.0.0.0/0
    wireguard 51821 UDP CIDR <публичный_адрес_VM-2>/32
    VM-2-subnet 0-65535 Любой CIDR <CIDR_подсети_VM-2>
  2. В дополнительной сети создайте группу безопасности и назначьте ее VM-2. Добавьте в группу правила:

    Исходящий трафик
    Входящий трафик
    Описание Диапазон портов Протокол Назначение CIDR блоки
    any 0-65535 Любой CIDR 0.0.0.0/0
    Описание Диапазон портов Протокол Источник CIDR блоки
    icmp 0-65535 ICMP CIDR 0.0.0.0/0
    ssh 22 TCP CIDR 0.0.0.0/0
    wireguard 51822 UDP CIDR <публичный_адрес_VM-1>/32
    k8s-VM-1-subnets 0-65535 Любой CIDR <CIDR_основной_подсети1>, <CIDR_основной_подсети2>, <CIDR_основной_подсети3>
    cluster&services 0-65535 Любой CIDR <CIDR_кластера>, <CIDR_сервисов>
  3. В группу безопасности кластера и групп узлов Managed Service for Kubernetes добавьте правило:

    Входящий трафик
    Описание Диапазон портов Протокол Источник CIDR блоки
    VM-2-subnet 0-65535 Любой CIDR <CIDR_подсети_VM-2>

Настройка маршрутизацииНастройка маршрутизации

  1. Настройте маршрутизацию для основного WireGuard-шлюза:

    1. В основной сети создайте таблицу маршрутизации и добавьте в нее статический маршрут:

      • Префикс назначения — укажите CIDR подсети, где расположена VM-2.
      • IP-адрес — укажите внутренний IP-адрес VM-1.
    2. Привяжите таблицу маршрутизации ко всем подсетям основной сети.

  2. Настройте маршрутизацию для дополнительного WireGuard-шлюза:

    1. В дополнительной сети создайте таблицу маршрутизации.

    2. Добавьте для таблицы маршрутизации статический маршрут:

      • Префикс назначения — укажите CIDR подсети, где расположена VM-1.
      • IP-адрес — укажите внутренний IP-адрес VM-2.

      Повторите этот шаг для каждой подсети основной сети.

    3. Привяжите таблицу маршрутизации к подсети, в которой расположена VM-2.

Настройка WireGuard-шлюзовНастройка WireGuard-шлюзов

  1. Настройте основной WireGuard-шлюз:

    1. Подключитесь к VM-1 по SSH.

    2. Установите WireGuard:

      sudo apt update && sudo apt install wireguard
      
    3. Сгенерируйте и сохраните ключи шифрования:

      wg genkey | sudo tee vm1_private.key | wg pubkey | sudo tee vm1_public.key > /dev/null
      wg genkey | sudo tee vm2_private.key | wg pubkey | sudo tee vm2_public.key > /dev/null
      

      В текущей директории будут созданы четыре файла:

      • vm1_private.key — содержит закрытый ключ шифрования для VM-1.
      • vm1_public.key — содержит открытый ключ шифрования для VM-1.
      • vm2_private.key — содержит закрытый ключ шифрования для VM-2.
      • vm2_public.key — содержит открытый ключ шифрования для VM-2.
    4. Создайте конфигурационный файл wg0.conf:

      sudo nano /etc/wireguard/wg0.conf
      
    5. Добавьте в него конфигурацию:

      [Interface]
      PrivateKey = <содержимое_файла_vm1_private.key>
      Address = 10.0.0.1/32
      ListenPort = 51821
      
      PreUp = sysctl -w net.ipv4.ip_forward=1
      
      [Peer]
      PublicKey = <содержимое_файла_vm2_public.key>
      Endpoint = <публичный_адрес_VM-2>:51822
      AllowedIPs = <CIDR_подсети_VM-2>, 10.0.0.2/32
      PersistentKeepalive = 15
      

      Подробнее о параметрах конфигурации.

      Сохраните изменения и закройте файл.

    6. Примените конфигурацию:

      sudo systemctl restart wg-quick@wg0
      
  2. Настройте дополнительный WireGuard-шлюз:

    1. Подключитесь к VM-2 по SSH.

    2. Установите WireGuard:

      sudo apt update && sudo apt install wireguard
      
    3. Создайте конфигурационный файл wg0.conf:

      sudo nano /etc/wireguard/wg0.conf
      
    4. Добавьте в него конфигурацию:

      [Interface]
      PrivateKey = <содержимое_файла_vm2_private.key>
      Address = 10.0.0.2/32
      ListenPort = 51822
      
      PreUp = sysctl -w net.ipv4.ip_forward=1
      
      [Peer]
      PublicKey = <содержимое_файла_vm1_public.key>
      Endpoint = <публичный_адрес_VM-1>:51821
      AllowedIPs = <CIDR_основной_подсети1>, <CIDR_основной_подсети2>, <CIDR_основной_подсети3>, 10.0.0.1/32
      PersistentKeepalive = 15
      

      Подробнее о параметрах конфигурации.

      Сохраните изменения и закройте файл.

    5. Примените конфигурацию:

      sudo systemctl restart wg-quick@wg0
      
  3. Проверьте статус соединения на обеих ВМ:

    sudo wg show
    

    latest handshake в выводе команды означает, что соединение установлено:

    ...
    latest handshake: 3 seconds ago
    ...
    
  4. Настройте MTU на обеих ВМ:

    ETH_NIC=eth0
    sudo iptables -t mangle -A FORWARD -i ${ETH_NIC} -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
    sudo iptables -t mangle -A FORWARD -o ${ETH_NIC} -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
    echo "net.ipv4.ip_no_pmtu_disc = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p /etc/sysctl.conf
    

    Важно

    Если оставить значение MTU по умолчанию, возможны потери сетевого трафика.

  5. Подключите VM-2 к кластеру Managed Service for Kubernetes в качестве внешнего узла.

Решение проблемРешение проблем

Ошибка при работе с пакетами и на внешнем узлеОшибка при работе с пакетами docker-ce и containerd на внешнем узле

Чтобы диагностировать и исправить ошибку:

  1. Посмотрите список служб, которые работают некорректно:

    sudo systemctl --failed
    

    Результат:

    UNIT LOAD ACTIVE SUB DESCRIPTION
    docker.socket loaded failed failed Docker Socket for the API
    LOAD = Reflects whether the unit definition was properly loaded.
    ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
    SUB = The low-level unit activation state, values depend on unit type.
    1 loaded units listed.
    
  2. Проверьте состояние docker.socket:

    sudo systemctl status docker.socket
    

    Результат:

    docker.socket - Docker Socket for the API
    Loaded: loaded (/lib/systemd/system/docker.socket; disabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Tue 2024-02-10 09:53:37 UTC; 6s ago
    Triggers: ● docker.service
    Listen: /run/docker.sock (Stream)
    CPU: 1ms
    Feb 10 09:53:37 ext-node systemd[1]: Starting Docker Socket for the API...
    Feb 10 09:53:37 ext-node systemd[7052]: docker.socket: Failed to resolve group docker: No such process
    Feb 10 09:53:37 ext-node systemd[1]: docker.socket: Control process exited, code=exited, status=216/GROUP
    Feb 10 09:53:37 ext-node systemd[1]: docker.socket: Failed with result 'exit-code'.
    Feb 10 09:53:37 ext-node systemd[1]: Failed to listen on Docker Socket for the API.
    
  3. Посмотрите ошибки в системных логах:

    sudo journalctl -xe
    

    Результат:

    ...
    Feb 10 09:56:40 ext-node maintainer[19298]: E: Sub-process /usr/bin/dpkg returned an error code (1)
    ...
    
  4. Переустановите пакеты и исправьте ошибки:

    sudo apt install -f
    
  5. Когда установщик спросит, что делать с файлом config.toml, введите N, чтобы оставить текущую версию файла.

Была ли статья полезна?

Предыдущая
Подключение внешних узлов к кластеру
Следующая
Настройка IPSec-шлюзов для подключения внешних узлов к кластеру
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»