כברירת מחדל, חומת האש של המארח במערכת ההפעלה שמותאמת לקונטיינרים מאפשרת חיבורים יוצאים ומקבלת חיבורים נכנסים רק דרך שירות ה-SSH. כדי לראות את ההגדרה המדויקת של חומת האש של המארח, מריצים את הפקודה sudo iptables -L במכונה וירטואלית שמופעלת באמצעות מערכת הפעלה שמותאמת לקונטיינרים.
חשוב לזכור שחומת האש של המארח שונה מכללי חומת האש של הענן הווירטואלי הפרטי (VPC), שגם אותם צריך להגדיר כדי שהאפליקציות יפעלו בצורה תקינה. מידע נוסף על כללים של חומת אש ב-Virtual Private Cloud זמין במאמר סקירה כללית של כללים של חומת אש.
הפעלת קונטיינרים במרחב שמות הרשת שמוגדר כברירת מחדל ב-Docker
אם אתם פורסים קונטיינר ב-מערכת הפעלה שמותאמת לקונטיינרים שצריך להיות נגיש ברשת ואתם לא משתמשים באפשרות --net=host של Docker, אתם צריכים להפעיל את הקונטיינר עם האפשרות -p של Docker. במקרה הזה, Docker יגדיר אוטומטית את חומת האש של המארח כדי לחשוף את האפליקציה ברשת. מידע נוסף על האפשרויות של Docker run
בדוגמה הבאה, אפשר לגשת למאגר nginx ברשת דרך יציאה 80:
docker run --rm -d -p 80:80 --name=nginx nginx
ip6tables
הפעלת קונטיינרים במרחב שמות של הרשת של המארח
אם אתם פורסים קונטיינר ב-מערכת הפעלה שמותאמת לקונטיינרים שצריך להיות נגיש ברשת ואתם משתמשים באפשרות --net=host של Docker, אתם צריכים להגדיר בעצמכם את חומת האש של המארח.
אפשר להגדיר את חומת האש של המארח באמצעות פקודות רגילות של iptables. כמו ברוב הפצות GNU/Linux, כללי חומת האש שהוגדרו באמצעות פקודות iptables לא יישמרו אחרי הפעלה מחדש. כדי לוודא שחומת האש של המארח מוגדרת בצורה נכונה בכל הפעלה, צריך להגדיר את חומת האש של המארח בהגדרה של cloud-init. דוגמה לcloud-init:
#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
השימוש בהגדרה cloud-init עם מכונת VM שמופעלת בה מערכת הפעלה שמותאמת לקונטיינרים יגרום להתנהגויות הבאות בכל אתחול:
- חומת האש של המארח תוגדר כך שתאפשר חיבורי TCP נכנסים ביציאה 80.
- קונטיינר
nginxיאזין ביציאה 80 ויגיב לבקשות HTTP נכנסות.
מידע נוסף על שימוש ב-cloud-init ב-מערכת הפעלה שמותאמת לקונטיינרים זמין במאמר בנושא יצירה והגדרה של מופעים.