Поддержите нашу команду в рейтинге работодателей на hh.ru
Вход/ Регистрация

Подключение к кластеру через bastion-хост

Кластер Kubernetes можно использовать без публичных IP-адресов на мастер-нодах. Это повышает безопасность кластера, поскольку ноды недоступны напрямую из интернета. Для управления таким кластером можно использовать bastion-хост — облачный сервер с публичным IP, подключенный к приватной сети кластера.

Вы подключаетесь к bastion-хосту по SSH и управляете кластером с помощью kubectl. Запросы к API кластера идут по приватной сети, поэтому открывать API в интернет для такого подключения не требуется.

Подготовка

В качестве bastion-хоста можно использовать облачный сервер. Для выполнения команд kubectl при небольшом количестве одновременных SSH-сеансов достаточно минимальной конфигурации. Серверу нужен публичный IP, чтобы вы могли подключаться к нему из интернета.

Кластер и bastion-хост должны находиться в одной приватной сети. Это позволит bastion-хосту обращаться к API кластера по приватному адресу, без выхода в интернет.

Выбор сети зависит от того, создан ли уже кластер:

  • Если кластер уже создан, используйте его приватную сеть. При создании bastion-хоста выберите ту же локацию и подключите сервер к этой сети.

  • Если вы создаете инфраструктуру с нуля, сначала создайте приватную сеть, затем выберите ее при создании bastion-хоста и на этапе настройки сети нового кластера.

Например, в сети 192.168.0.0/24 bastion-хост может иметь приватный IP 192.168.0.10, а API кластера — адрес 192.168.0.20. Bastion будет обращаться к API по этому адресу. Важно выбрать именно одну и ту же приватную сеть: размещения сервера и кластера в одной локации недостаточно.

Создание приватной сети и bastion-хоста описаны в отдельной статье. Создавать дополнительный внутренний сервер из этой инструкции для работы с Kubernetes не нужно.

Перед подключением также убедитесь, что:

  • у вас настроен SSH-доступ к bastion-хосту;

  • на bastion-хосте установлен kubectl;

  • скачайте kubeconfig нужного кластера. Скачать файл можно во вкладке «Дашборд» в панели управления кластером. 

В примерах файл kubeconfig находится по пути ~/Downloads/kubeconfig.yaml. Замените путь на свой.

Проверьте адрес API в kubeconfig. На локальном компьютере выполните:

    
grep server ~/Downloads/kubeconfig.yaml

В поле server должен быть указан приватный IP API кластера, например https://192.168.0.20:6443.

Перенос kubeconfig на bastion-хост

  1. Подключитесь к bastion-хосту с локального компьютера:

    
ssh user@public_IP
  1. На bastion-хосте создайте каталог для конфигурации и установите для него права:

    
mkdir -p ~/.kube chmod 700 ~/.kube
  1. Оставьте SSH-сессию открытой. В другом окне терминала на локальном компьютере скопируйте kubeconfig на сервер:

    
scp ~/Downloads/kubeconfig.yaml user@public_IP:~/.kube/timeweb-cluster.yaml

Используйте того же пользователя, под которым создали каталог. Конфигурация будет сохранена в файл ~/.kube/timeweb-cluster.yaml в его домашнем каталоге.

  1. Вернитесь в окно с SSH-сессией, переименуйте файл в config и выдайте права на чтение и запись только его владельцу:

    
mv -i ~/.kube/timeweb-cluster.yaml ~/.kube/config chmod 600 ~/.kube/config

Файл ~/.kube/config используется kubectl по умолчанию, поэтому указывать путь к нему в командах не потребуется. Если такой файл уже существует, mv -i запросит подтверждение замены. Сохраните существующую конфигурацию под другим именем, если она вам нужна.

kubeconfig содержит учетные данные для доступа к кластеру. Файл из панели управления дает административные права. Если с кластером работают несколько человек, настройте персональный доступ и используйте отдельные учетные записи на bastion-хосте.

Проверка подключения

На bastion-хосте в том же SSH-сеансе выполните:

    
kubectl get nodes

Если команда вернула список нод, подключение настроено. Дальнейшие команды kubectl выполняйте в этом же SSH-сеансе.

Если команда завершается по тайм-ауту, проверьте приватную сеть и адрес API в поле server. Если на bastion-хосте ограничен исходящий трафик, разрешите исходящее TCP-соединение к приватному IP API на порт 6443. При ошибке Unauthorized убедитесь, что используется kubeconfig нужного кластера с действительными учетными данными.

Была ли статья полезна?
Ваш ответ поможет улучшить документацию
Пока нет комментариев