Назад |
Перейти на главную страницу
Docker + IPv6 - что лучше?
Я хочу создать службы с поддержкой IPv6 с помощью Docker, которые могут подключаться к хостам v6 во внешней сети и могут быть доступны из внешней сети v6. Я действительно смущен всем этим прямо сейчас, поэтому я хочу услышать о лучших практиках использования IPv6 с Docker. Вот что я сейчас думаю:
По умолчанию в конфигурации Docker отключен IPv6, и все созданные контейнеры используют только IPv4. С адресами v4 мы предполагаем, что:
Все контейнеры имеют NAT и случайные IP-адреса из частных подсетей. Транспорт извне в контейнер отсутствует.
Если нам нужно, чтобы какая-то служба была доступна во внешней сети, мы делаем сопоставление портов через -p
флаг. Чтобы получить доступ к сервису извне, нам нужно подключиться к внешнему адресу сервера Docker.
А что насчет v6? Что ж, с v6 мы предполагаем, что каждый IP-адрес является публично маршрутизируемым. Это означает, что контейнеры больше не привязаны к NAT и напрямую доступны для внешней сети. Все как должно быть. Но у меня все больше и больше вопросов ...
- Если мы говорим о сервере с фиксированным IPv6-адресом, мы можем выделить некоторый блок v6 для использования в контейнерах. В моем случае у меня / 64, я выделил его для докера. Он работает, контейнеры могут достигать целей IPv6, контейнеры могут быть доступны напрямую извне. Но как насчет ноутбука, на котором я фактически разрабатываю эти службы, а затем развертываю их на сервере? Этот ноутбук перемещается из сети в сеть, из одной подсети v6 в другую и, что наиболее важно, в места, где v6 недоступен. Должен ли я использовать для этого блок ULA и каким-то образом настроить NAT-подобную конфигурацию, чтобы они достигли внешних целей IPv6? Конечно, в этом случае меня интересует только связь между контейнером и внешними устройствами, мне не нужно, чтобы они были доступны вне моего ноутбука.
- Должен ли конечный пользователь обращаться к контейнеру напрямую по его IPv6-адресу? Если это так, я должен определить статический IP-адрес в docker-compose.yml и настройте цепочку FORWARD ip6tables, чтобы открыть необходимые порты контейнера для внешнего. В таком случае я должен поддерживать разные docker-compose.yml для сервера и ноутбука использовать разные статические адреса? Если я решу поделиться своими услугами с кем-то, кому на самом деле наплевать на v6 и кто использует настройку докеров по умолчанию, я должен поддерживать третью конфигурацию Compose без v6? В v4 такой проблемы нет, поскольку мы просто сопоставляем необходимые порты и позволяем Docker творить чудеса.
- Если я использую статические адреса v6, я предполагаю, что мне следует использовать предопределенные сети? Что-то вроде:
networks:
app_net:
external:
name: appnet
Может быть, мне стоит изучить автоконфигурацию IP и динамический DNS, что-то вроде разрешения обновления DNS при изменении внутреннего IP-адреса? nsupdate например.
Или я должен отказаться от всей этой идеи с помощью прямого обмена данными по IPv6 и просто продолжить отображение портов?
Какой у вас опыт с этим?