Standardmäßig lässt die Host-Firewall von Container-Optimized OS ausgehende Verbindungen zu und akzeptiert eingehende Verbindungen nur über den SSH-Dienst. Um die genaue Konfiguration der Host-Firewall einzusehen, führen Sie sudo iptables -L
auf einer VM-Instanz aus, auf der Container-Optimized OS läuft.
Beachten Sie: Die Regeln der Host-Firewall unterscheiden sich von denen Virtual Private Cloud-Firewall, die ebenfalls konfiguriert werden müssen, damit Ihre Anwendungen ordnungsgemäß funktionieren. Weitere Informationen zu den Firewallregeln für Virtual Private Cloud finden Sie in der Übersicht über Firewallregeln.
Container im Standardnetzwerk-Namespace von Docker ausführen
Wenn Sie einen Container mit Container-Optimized OS bereitstellen, der über das Netzwerk zugänglich sein muss, und die Option --net=host
von Docker nicht verwenden, führen Sie den Container mit der Option -p
von Docker aus. Mit dieser Option konfiguriert Docker automatisch die Host-Firewall, um Ihre Anwendung im Netzwerk verfügbar zu machen. Weitere Informationen zu den Docker-Ausführungsoptionen finden Sie in der Referenz zur Docker-Ausführung.
Im folgenden Beispiel kann im Netzwerk über Port 80 auf den nginx
-Container zugegriffen werden:
docker run --rm -d -p 80:80 --name=nginx nginx
Container im Netzwerk-Namespace des Hosts ausführen
Wenn Sie einen Container mit Container-Optimized OS bereitstellen, auf den über das Netzwerk zugegriffen werden muss, und die --net=host
-Option von Docker verwenden, müssen Sie die Host-Firewall selbst explizit konfigurieren.
Sie können die Host-Firewall mit iptables
-Standardbefehlen konfigurieren. Wie bei den meisten GMD/Linux-Distributionen bleiben mit iptables
-Befehlen konfigurierte Firewallregeln auch nach einem Neustart nicht erhalten. Um sicherzustellen, dass die Host-Firewall bei jedem Start richtig konfiguriert ist, konfigurieren Sie die Host-Firewall in Ihrer cloud-init
-Konfiguration. Dazu ein Beispiel für cloud-init
:
#cloud-config
write_files:
- path: /etc/systemd/system/config-firewall.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Configures the host firewall
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- path: /etc/systemd/system/myhttp.service
permissions: 0644
owner: root
content: |
[Unit]
Description=My HTTP service
After=docker.service config-firewall.service
Wants=docker.service config-firewall.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run --rm --name=%n --net=host nginx
ExecStop=-/usr/bin/docker exec %n -s quit
runcmd:
- systemctl daemon-reload
- systemctl start myhttp.service
Die Verwendung der cloud-init
-Konfiguration mit einer VM, auf der Container-Optimized OS ausgeführt wird, löst bei jedem Start das folgende Verhalten aus:
- Die Host-Firewall ist so konfiguriert, dass über Port 80 eingehende TCP-Verbindungen zugelassen werden.
- Ein
nginx
-Container überwacht Port 80 und antwortet auf eingehende HTTP-Anfragen.
Weitere Informationen zur Verwendung von cloud-init
mit dem Container-Optimized OS finden Sie unter Instanzen erstellen und konfigurieren.