2015-10-01 3 views
9

Я пытаюсь запустить веб-сервер, который использует базу данных RDS с EC2 внутри контейнера докеров.Доступ к RDS из контейнера Docker не проходит через группу безопасности?

Я установил группы безопасности, чтобы роль хоста EC2 была доступна для доступа к RDS, и если я попытаюсь получить к ней доступ с главной машины, все работает правильно.

Однако, когда я запускаю простой контейнер на хосте и пытаюсь получить доступ к RDS, он блокируется, как будто группа безопасности не пропускает ее. После кучи проб и ошибок казалось, что запросы контейнеров, похоже, не поступают с хоста EC2, поэтому брандмауэр говорит «нет».

Я смог обойти это в краткосрочной перспективе, установив --net = host на контейнер докеров, однако это нарушает множество функциональных возможностей функциональных возможностей докеров, таких как возможность отображения портов (т. Е. Теперь я необходимо убедиться, что каждый экземпляр контейнера прослушивает другой порт вручную).

Кто-нибудь нашел способ обойти это? Это кажется довольно большим ограничением для запуска контейнеров в AWS, если вы фактически используете какие-либо ресурсы AWS.

ответ

3

Выяснено, что происходит, размещая здесь, если это поможет кому-то еще.

Запросы из контейнера попадают в открытый IP-адрес RDS, а не в частный (как работают группы безопасности). Похоже, что DNS внутри контейнера докеров использовал 8.8.8.8 google dns, и это не сделало бы черную магию AWS превращения конечной точки rds в частный ip.

Так, например:

DOCKER_OPTS="--dns 10.0.0.2 -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock -g /mnt/docker" 
+7

Таким образом, проблема имеет смысл, но можете ли вы ответить на свой вопрос, как вы ее исправили? –

+0

Я также заинтересован в том, как вы исправили проблему –

+0

он, вероятно, используется амазонок DNS ... – codewandler

1

Как @adamneilson упоминает, настройки параметров Docker являются лучшим выбором. Вот как discover your Amazon DNS server on the VPC. Также раздел Enabling Docker Debug Output в Руководстве разработчика контейнера Amazon EC2. Устранение неполадок упоминает, где находится файл опций Docker.

Предполагая, что вы используете блок VPC 10.0.0.0/24, DNS будет 10.0.0.2.

Для CentOS, Red Hat и Amazon:

sed -i -r 's/(^OPTIONS=\")/\1--dns 10.0.0.2 /g' /etc/sysconfig/docker 

Для Ubuntu и Debian:

sed -i -r 's/(^OPTIONS=\")/\1--dns 10.0.0.2 /g' /etc/default/docker 
7

Да, контейнеры действительно попали в общественных IP-адресов из RDS. Но вам не нужно настраивать низкоуровневые параметры Docker, чтобы ваши контейнеры могли разговаривать с RDS. Столбец ECS и экземпляр RDS должны быть в одном VPC, а затем доступ можно настроить с помощью групп безопасности.Самый простой способ сделать это:

  1. Перейдите на страницу RDS экземпляров
  2. Выберите экземпляр DB и сверло, чтобы увидеть детали
  3. Нажмите на групповой идентификатор безопасности
  4. NAVIGATE над к Вкладка «Входящие» и выберите «Редактировать»
  5. И убедитесь, что существует правило типа MySQL/Aurora с исходным кодом.
  6. При вводе пользовательского источника просто начните вводить имя кластера ECS, а имя группы безопасности будет авто- компл eted for you

This tutorial has screenshots которые иллюстрируют, куда идти.

Полное описание: В данном руководстве особенности контейнеров из Bitnami и я работаю Bitnami. Однако мысли, выраженные здесь, являются моими собственными, а не мнением Битнами.

+0

Для чего я должен был разместить свои собственные коробки ec2, работающие на докере, а не используя ECS (по разным причинам в то время). –

Смежные вопросы