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.