Zugriff auf RDS aus einem Docker container nicht immer durch die Sicherheit der Gruppe?
Ich bin versucht zu laufen ein webserver, der verwendet wird, eine RDS-Datenbank mit EC2 innerhalb eines docker-container.
Ich habe setup die Sicherheit Gruppen, damit die EC2-host-Rolle ist Zugriff auf das RDS und wenn ich versuche, es auf dem host-Rechner direkt funktioniert alles einwandfrei.
Jedoch, wenn ich eine einfache container auf dem host und versuchen, Zugriff auf den RDS, es wird blockiert, wenn die Sicherheit der Gruppe waren nicht so durch. Nach einer Reihe von Versuch-und-Fehler schien es, dass in der Tat die Container-Anforderungen sind nicht zu erscheinen kommen aus dem EC2-host ein, damit die firewall sagt Nein.
War ich in der Lage zu arbeiten, um dieses kurzfristig durch die Einstellung --Netto=host auf dem docker-container, aber das macht eine Menge großer docker-networking-Funktionen wie die Möglichkeit, anzeigen-ports (ie, jetzt muss ich sicherstellen, dass jede Instanz des Containers lauscht auf einem anderen port per hand).
Hat jemand einen Weg gefunden, um dieses? Es scheint wie eine ziemlich große Einschränkung zu laufen Containern in AWS, wenn man eigentlich mit allen AWS-Ressourcen.
- Wie konnte Sie verwenden
--net
zum ausführen des Behälters, wenn Sie nicht kontrollieren, wie die container laufen, alias, Sie nicht zum Thema derdocker run
Befehl?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, der Behälter traf der öffentlichen IPs von RDS. Aber Sie brauchen nicht zu Stimmen, low-level-Andockfenster-Optionen zu ermöglichen, Ihre Behälter zu sprechen RDS. Die ECS-cluster und die RDS-instance in derselben VPC und dann Zugriff kann so konfiguriert werden, durch security-Gruppen. Der einfachste Weg dies zu tun ist, um:
Dieses tutorial hat screenshots , die illustrieren, wohin Sie gehen.
Full disclosure: Dieses Lernprogramm verfügt über Container von Bitnami und ich arbeite für Bitnami. Aber die Gedanken, die hier geäußert sind meine eigenen und nicht die Meinung von Bitnami.
Herausgefunden, was Los war, hier veröffentlichen, falls es hilft jemand anderes.
Anfragen von innerhalb des Containers schlugen die öffentliche ip des RDS-eher als die privaten (die ist, wie die Gruppen arbeiten). Es sieht aus wie die DNS innerhalb des docker-container wurde mit der 8.8.8.8 google dns und das wäre nicht die AWS-schwarze Magie drehen des rds-Endpunkt in die private ip.
So zum Beispiel:
DOCKER_OPTS="--dns 172.31.0.2 --dns 8.8.8.8 --dns 8.8.4.4"
, neu starten und es funktionierte!Als @adamneilson erwähnt, die Einstellung Andockfenster-Optionen sind Ihre beste Wette. Hier ist, wie entdecken Sie Ihre Amazon-DNS-server auf dem VPC. Auch der Abschnitt Aktivieren Andockfenster Debug-Ausgabe in der Amazon EC2 Container Service Developer Guide Fehlerbehebung erwähnt, wo die Andockfenster-Optionen Datei.
Angenommen, Sie führen eine VPC-block 10.0.0.0/24 DNS 10.0.0.2.
Für CentOS, Red Hat und Amazon:
Für Ubuntu und Debian:
Die eingehende Regel für den RDS sollte festgelegt werden, um die private IP von der EC2-Instanz, anstatt die öffentliche IPv4.