Я думаю, что есть два возможных решения, которые могут помочь в вашем случае:
- Вы можете добавить
--адрес
аргумент в пользу kubectl перенаправление портов
команду с IP-адресом контейнера, выполняющего эту команду. По умолчанию, кубектл
привязывается только к локальному хосту и поэтому не работает так, как вы ожидаете (см.: Справочная документация по Kubectl).
- Все вновь запущенные контейнеры подключаются к контейнеру по умолчанию.
мост
сети, если не указано иное. Для решения вашей проблемы вы можете использовать хозяин
сети вместо мост
сеть. Как можно найти в Сеть хоста Docker документация:
Если вы используете сетевой режим хоста для контейнера, сетевой стек этого контейнера не изолирован от хоста Docker (контейнер разделяет сетевое пространство имен хоста), и контейнеру не выделяется собственный IP-адрес. .
Я кратко опишу оба решения, чтобы показать вам, как они работают.
Сначала я подготовил постгрес
:
# kubectl получить pod,svc
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
pod/postgres 1/1 Бег 0 155м
НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВОЗРАСТ
service/postgres ClusterIP 10.110.151.73 <нет> 5432/TCP 2s
Объявление 1.
Этот подход очень похож на ваш, я просто добавил --адрес
аргумент:
ПРИМЕЧАНИЕ: Я использовал контейнер с кубектл
уже установлено. Я просто хочу, чтобы вы обратили внимание на kubectl port-forward --address $(hostname -i),localhost service/postgres 2223:5432
команда.
root@kworker:~# docker run -it --name=k8s-conn-12 -p 2223:2223 -v /config:/config mattjcontainerregistry/forward:latest bash
root@31b05af956ab:/# kubectl port-forward --address $(hostname -i),localhost service/postgres 2223:5432 --kubeconfig=config
Пересылка с 127.0.0.1:2223 -> 5432
Пересылка с 172.17.0.2:2223 -> 5432
На другой вкладке терминала мы можем проверить, работает ли он:
root@kworker:~# docker exec -it k8s-conn-12 bash
root@31b05af956ab:/# psql -U postgres -h localhost -p 2223
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1), сервер 13.3 (Debian 13.3-1.pgdg100+1))
ВНИМАНИЕ: основная версия psql 12, основная версия сервера 13.
Некоторые функции psql могут не работать.
Введите "помощь" для помощи.
постгрес=#
Кроме того, мы можем сделать то же самое с хост-компьютера (из-за пределов контейнера с открытым и опубликованным портом):
root@kworker:~# psql -U postgres -h localhost -p 2223
psql (11.12 (Debian 11.12-0+deb10u1), сервер 13.3 (Debian 13.3-1.pgdg100+1))
ВНИМАНИЕ: основная версия psql 11, основная версия сервера 13.
Некоторые функции psql могут не работать.
Введите "помощь" для помощи.
постгрес=#
Объявление 2.
Этот подход требует использования хозяин сеть:
хост: для автономных контейнеров удалите сетевую изоляцию между контейнером и хостом Docker и используйте сеть хоста напрямую.
ПРИМЕЧАНИЕ: Я просто хочу, чтобы вы обратили внимание на --сеть=хост
вариант (я использовал тот же контейнер, что и раньше):
root@kworker:~# docker run -it --name=k8s-conn-12 --network=host -v /config:/config mattjcontainerregistry/forward:latest bash
root@kworker:/# служба переадресации портов kubectl/postgres 2223:5432 --kubeconfig=config
Пересылка с 127.0.0.1:2223 -> 5432
Пересылка с [::1]:2223 -> 5432
Опять же, мы можем проверить, работает ли он должным образом снаружи контейнера:
root@kworker:~# psql -U postgres -h localhost -p 2223
psql (11.12 (Debian 11.12-0+deb10u1), сервер 13.3 (Debian 13.3-1.pgdg100+1))
ВНИМАНИЕ: основная версия psql 11, основная версия сервера 13.
Некоторые функции psql могут не работать.
Введите "помощь" для помощи.
постгрес=#
Кроме того, стоит подумать, действительно ли вам нужен док-контейнер для переадресации портов. Возможно работает kubectl перенаправление портов
в фоновом режиме было бы лучше (см.: Выполнить переадресацию портов kubectl в фоновом режиме).