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.