Mengonfigurasi firewall host

Secara default, firewall host Container-Optimized OS mengizinkan koneksi keluar dan menerima koneksi masuk hanya melalui layanan SSH. Anda dapat melihat konfigurasi firewall host yang tepat dengan menjalankan sudo iptables -L di instance VM yang menjalankan Container-Optimized OS.

Perhatikan bahwa firewall host berbeda dengan aturan firewall Virtual Private Cloud, yang juga harus dikonfigurasi agar aplikasi Anda berfungsi dengan benar. Lihat Ringkasan Aturan Firewall untuk mempelajari lebih lanjut aturan firewall Virtual Private Cloud.

Menjalankan container di namespace jaringan default Docker

Jika Anda men-deploy container di Container-Optimized OS yang harus dapat diakses melalui jaringan dan Anda tidak menggunakan opsi --net=host Docker, jalankan container dengan opsi -p Docker. Dengan opsi ini, Docker akan otomatis mengonfigurasi firewall host untuk mengekspos aplikasi Anda di jaringan. Lihat referensi run Docker untuk mempelajari opsi run Docker lebih lanjut.

Dalam contoh berikut, penampung nginx akan dapat diakses di jaringan pada port 80:

docker run --rm -d -p 80:80 --name=nginx nginx

Menjalankan container di namespace jaringan host

Jika Anda men-deploy container di Container-Optimized OS yang harus dapat diakses melalui jaringan dan Anda menggunakan opsi --net=host Docker, Anda harus mengonfigurasi firewall host secara eksplisit.

Anda dapat mengonfigurasi firewall host dengan perintah iptables standar. Seperti sebagian besar distribusi GNU/Linux, aturan firewall yang dikonfigurasi dengan perintah iptables tidak akan tetap ada saat memulai ulang. Untuk memastikan firewall host dikonfigurasi dengan benar pada setiap booting, konfigurasikan firewall host dalam konfigurasi cloud-init Anda. Perhatikan contoh cloud-init berikut:

#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

Menggunakan konfigurasi cloud-init ini dengan VM yang menjalankan OS yang Dioptimalkan Container akan menghasilkan perilaku berikut pada setiap booting:

  • Firewall host akan dikonfigurasi untuk mengizinkan koneksi TCP masuk di port 80.
  • Penampung nginx akan memproses port 80 dan merespons permintaan HTTP yang masuk.

Lihat Membuat dan mengonfigurasi instance untuk mempelajari lebih lanjut cara menggunakan cloud-init di Container-Optimized OS.