Я пытаюсь запускать службы в контейнерах внутри облачного провайдера. Я хотел бы, чтобы контейнерные приложения аутентифицировались на локальном сервере LDAP, который (в настоящее время) доступен через туннель SSH в облако. Туннель доступен на хост-машине докера на 127.0.0.1:6636
.
Можно ли получить доступ к контейнерам 127.0.0.1:6636
на хост-машине, например через какую-то конфигурацию прокси или iptables?
Я могу заставить работать туннель, если установлю GatewayPorts=yes
в хозяйской sshd_config
и использовать docker run --add-host
добавить хозяина docker0
IP в /etc/hosts
в контейнере, но это означает, что туннель доступен на всех интерфейсах. Я предположительно могу заблокировать доступ к туннелю к docker0
интерфейс, но я бы предпочел, чтобы туннель был только на интерфейсе обратной связи.
Я не хочу использовать --net=host
, потому что я хочу использовать связывание контейнеров.
Cloud |
|
+------------------+ | +--------+ +----------+
| Host Tunnel | | | Tunnel | | Tunnel |
| O-------------------------------O Target |
| +-----------+ | | | | Host | +----------+
| | Container |--+ | | +--------+
| +-----------+ | |
+------------------+ | Premises
|
Вы можете передать IP-адрес интерфейса docker0 вашего хоста в качестве переменной среды и подключиться к серверу LDAP. Например, на хосте:
$ ip addr show docker0
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 10.1.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::60e4:ffff:fe97:1308/64 scope link
valid_lft forever preferred_lft forever
$ DOCKERADDR=$(ip addr show docker0 | grep inet\ | awk '{print $2}' | cut -d/ -f1)
$ docker run -it -e DOCKERADDR=${DOCKERADDR} image
Внутри контейнера вы можете подключиться к $ {DOCKERADDR}: 6636
примечание: на coreos у вас уже есть эти переменные в вашей среде, если вы . /etc/environment
: COREOS_PUBLIC_IPV4
и COREOS_PRIVATE_IPV4