Par défaut, le pare-feu de l'hôte de Container-Optimized OS n'autorise que les connexions sortantes et n'accepte les connexions entrantes qu'à travers le service SSH. Vous pouvez voir la configuration exacte du pare-feu de l'hôte en exécutant sudo iptables -L
sur une instance de VM exécutant Container-Optimized OS.
Gardez à l'esprit que le pare-feu de l'hôte est différent des règles de pare-feu du cloud privé virtuel, qui doivent également être configurées pour que vos applications fonctionnent correctement. Consultez la page Présentation des règles de pare-feu pour plus d'informations sur les règles de pare-feu du cloud privé virtuel.
Exécuter des conteneurs dans l'espace de noms réseau par défaut de Docker
Si vous déployez un conteneur dans Container-Optimized OS qui doit être accessible sur le réseau et que vous n'utilisez pas l'option --net=host
de Docker, exécutez votre conteneur avec l'option -p
de Docker. Avec cette option, Docker configure automatiquement le pare-feu de l'hôte pour exposer votre application sur le réseau. Consultez la documentation de référence sur l'exécution de Docker pour en savoir plus sur les options d'exécution de Docker.
Dans l'exemple suivant, le conteneur nginx
sera accessible sur le réseau sur le port 80 :
docker run --rm -d -p 80:80 --name=nginx nginx
Exécuter des conteneurs dans l'espace de noms réseau de l'hôte
Si vous déployez un conteneur dans Container-Optimized OS qui doit être accessible sur le réseau et que vous utilisez l'option --net=host
de Docker, vous devez configurer explicitement le pare-feu de l'hôte vous-même.
Vous pouvez configurer le pare-feu de l'hôte avec les commandes iptables
standards. Comme avec la plupart des distributions GNU/Linux, les règles de pare-feu configurées avec les commandes iptables
ne persistent pas lors des redémarrages. Pour vous assurer que le pare-feu de l'hôte est correctement configuré à chaque démarrage, configurez le pare-feu de l'hôte dans votre configuration cloud-init
. Prenons l'exemple cloud-init
suivant :
#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
Si vous utilisez cette configuration cloud-init
avec une VM exécutant Container-Optimized OS, les comportements suivants seront appliqués à chaque démarrage :
- Le pare-feu de l'hôte est configuré pour autoriser les connexions TCP entrantes sur le port 80.
- Un conteneur
nginx
écoute le port 80 et répond aux requêtes HTTP entrantes.
Pour en savoir plus sur l'utilisation de cloud-init
dans Container-Optimized OS, consultez la page Créer et configurer des instances.