2015-10-01 18 views
9

Próbuję uruchomić serwer sieci Web, który używa bazy danych RDS z EC2 w kontenerze dokowania.Uzyskiwanie dostępu do usługi RDS z poziomu kontenera Docker nie przechodzącego przez grupę zabezpieczeń?

Skonfigurowałem grupy zabezpieczeń, aby rola hosta EC2 mogła uzyskiwać dostęp do usługi RDS i jeśli spróbuję uzyskać do niego dostęp z komputera hosta, wszystko działa poprawnie.

Jednak, gdy uruchomię prosty kontener na hoście i spróbuję uzyskać dostęp do RDS, zostanie on zablokowany, tak jakby grupa zabezpieczeń nie przepuszczała go. Po serii prób i błędów wydawało się, że rzeczywiście żądania kontenerów nie pochodzą z hosta EC2, więc firewall mówi "nie".

Byłem w stanie obejść to na krótką metę, ustawiając - net = host na kontenerze docker, jednak to przełamuje wiele wspaniałych funkcjonalności sieci dokowania, takich jak możliwość mapowania portów (tj. Teraz ja należy upewnić się, że każde wystąpienie kontenera nasłuchuje na innym porcie ręcznie).

Czy ktoś znalazł sposób na obejście tego? Wydaje się, że dość dużym ograniczeniem jest uruchamianie kontenerów w AWS, jeśli faktycznie korzystasz z zasobów AWS.

Odpowiedz

3

Wyliczyłem, co się dzieje, zamieszczając tutaj na wypadek, gdyby pomógł komuś innemu.

Żądania z wnętrza kontenera trafiały do ​​publicznego adresu IP RDS, a nie do prywatnego (tak działają grupy zabezpieczeń). Wygląda na to, że DNS w kontenerze Docker korzystał z google dns 8.8.8.8 i nie zrobiłby czarnej magii AWS zamieniając punkt końcowy rds na prywatny ip.

Tak na przykład:

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

Problem ma sens, ale czy możesz podać odpowiedź, jak to naprawiłeś? –

+0

Jestem także zainteresowany tym, jak naprawiłeś problem. –

+0

prawdopodobnie użył Amazonów DNS ... – codewandler

1

Jak @adamneilson wspomina, ustawiania opcji dokowane są najlepszym. Oto jak wykonać discover your Amazon DNS server on the VPC. Również sekcja Enabling Docker Debug Output w Podręczniku programisty usług kontenerowych Amazon EC2 Rozwiązywanie problemów wspomina, gdzie znajduje się plik opcji Docker.

Zakładając, że korzystasz z bloku VPC 10.0.0.0/24, DNS będzie wynosił 10.0.0.2.

Dla CentOS, Red Hat i Amazon:

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

dla Ubuntu i Debiana:

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

Tak, pojemniki mają trafić na publiczne adresy IP RDS. Nie trzeba jednak dostrajać opcji Docker niskiego poziomu, aby kontenery mogły komunikować się z RDS. Klaster ECS i instancja RDS muszą być w tym samym VPC, a następnie dostęp można skonfigurować za pomocą grup zabezpieczeń.Najprostszym sposobem na to jest:

  1. przejdź do strony RDS instancji
  2. Wybierz instancję DB i wiercić się, aby zobaczyć szczegóły
  3. Kliknij na id grupy zabezpieczeń
  4. Poruszanie się do Karta Inbound i wybierz opcję Edytuj
  5. Upewnij się, że istnieje reguła typu MySQL/Aurora ze źródłem Custom
  6. Po wprowadzeniu niestandardowego źródła, po prostu zacznij wpisywać nazwę klastra ECS, a nazwa grupy zabezpieczeń będzie automatycznie compl dla ciebie

This tutorial has screenshots które ilustrują, gdzie iść.

Pełne ujawnienie: W tym samouczku są dostępne pojemniki z Bitnami i pracuję dla Bitnami. Jednak wyrażone tutaj myśli są moje, a nie opinia Bitnami.

+0

Za to, co jest warte, miałem hostowanie własnych skrzynek ec2 z systemem dokujacym zamiast korzystania z ECS (z różnych powodów w tym czasie). –

Powiązane problemy