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

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

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

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

## Подготовка

В качестве bastion-хоста можно использовать [облачный сервер](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server). Для выполнения команд `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-хоста описаны в [отдельной статье](https://timeweb.cloud/docs/unix-guides/configuring-bastion-host). Создавать дополнительный внутренний сервер из этой инструкции для работы с Kubernetes не нужно.

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

-   у вас настроен SSH-доступ к bastion-хосту;
    
-   на bastion-хосте [установлен kubectl](https://timeweb.cloud/docs/k8s/cluster-connection/kubectl);
    
-   скачайте kubeconfig нужного кластера. Скачать файл можно во вкладке «Дашборд» в панели управления кластером. 
    

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

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

```shell
grep server ~/Downloads/kubeconfig.yaml
```

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

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

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

```bash
ssh user@public_IP
```

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

```bash
mkdir -p ~/.kube
chmod 700 ~/.kube
```

3.  Оставьте SSH-сессию открытой. В другом окне терминала на локальном компьютере скопируйте `kubeconfig` на сервер:
    

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

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

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

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

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

> [!NOTE]
> `kubeconfig` содержит учетные данные для доступа к кластеру. Файл из панели управления дает административные права. Если с кластером работают несколько человек, настройте [персональный доступ](https://timeweb.cloud/docs/k8s/access/manage-users) и используйте отдельные учетные записи на bastion-хосте.

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

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

```bash
kubectl get nodes
```

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

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