Как я могу получить доступ (перенаправить) к общедоступному IP-адресу HTTP-запроса внутри сети docker compose?

Со следующей настройкой:

только контейнер YARP имеет опубликованные порты. Он правильно устанавливаетX-Forward*заголовки для использования другими контейнерами. Но, к сожалению, это адрес шлюза для создания докеров.

Когда я хочу зарегистрировать IP-адрес (общедоступного) клиента, я получаю::ffff:172.18.0.1который является IP-адресом шлюза для создания докеров. Каким-то образом мне нужно сказать докеру, чтобы он поместил общедоступный IP-адрес вX-Forward-Forзаголовок, который затем будет использоваться моим обратным прокси.

Мои контейнеры работают внутри своей сети:

      services:
  yarp:
    ...
    networks:
      - mynet

Я вижу созданную сеть:

      $ docker network ls
NETWORK ID     NAME                                      DRIVER    SCOPE
2bf19f507987   dockercompose1502733..._mynet             bridge    local

и посмотреть подробности:

      $ docker network inspect 2bf
[
  {
    "Name": "dockercompose1502733..._mynet",
    "Id": "2bf...",
    "Created": "...",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
        {
          "Subnet": "172.18.0.0/16",
          "Gateway": "172.18.0.1" // this is the address I get for public requests
        }
      ]
    },
    "Internal": false,
    "Attachable": true,
    "Ingress": false,
    "ConfigFrom": {
      "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {
      "b82645911...": {
        "Name": "YARP",
        "EndpointID": "fb1b...",
        "MacAddress": "02:42:ac:...",
        "IPv4Address": "172.18.0.10/16",
        "IPv6Address": ""
      },
      ...
    },
    "Options": {},
    "Labels": {
      "com.docker.compose.network": "mynet",
      "com.docker.compose.project": "dockercompose1502733...",
      "com.docker.compose.version": "1.29.2"
    }
  }
]

1 ответ

Вы могли бы сделатьnetwork_mode: hostдля службы обратного прокси: https://docs.docker.com/compose/compose-file/#network_mode

Однако будьте внимательны, потому что:

хост: который дает контейнеру необработанный доступ к сетевому интерфейсу хоста

Похоже, это ваше единственное решение: https://github.com/docker/roadmap/issues/157 .

Я предполагаю, что это производственная рабочая нагрузка, вам может быть лучше перейти на kubernetes, где вы, безусловно, столкнетесь с другим набором проблем :), но это не проблема, по крайней мере, с ingress-nginx я смог его настроить.

Другие вопросы по тегам