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 pada instance VM yang menjalankan Container-Optimized OS.

Perlu diingat 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 Anda dengan opsi -p Docker. Dengan opsi ini, Docker akan otomatis mengonfigurasi firewall host untuk mengekspos aplikasi Anda di jaringan. Baca Referensi run Docker untuk mempelajari lebih lanjut opsi run Docker.

Pada 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 pada Container-Optimized OS yang harus dapat diakses melalui jaringan dan menggunakan opsi --net=host Docker, Anda harus mengonfigurasi sendiri 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 dipertahankan meskipun dilakukan reboot. Untuk memastikan bahwa firewall host dikonfigurasi dengan benar setiap kali booting, konfigurasikan firewall host di 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

Penggunaan konfigurasi cloud-init ini dengan VM yang menjalankan Container-Optimized OS akan menghasilkan perilaku berikut di setiap booting:

  • Firewall host akan dikonfigurasi untuk mengizinkan koneksi TCP masuk pada 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.