הגדרת חומת האש של המארח

כברירת מחדל, חומת האש של המארח במערכת ההפעלה שמותאמת לקונטיינרים מאפשרת חיבורים יוצאים ומקבלת חיבורים נכנסים רק דרך שירות ה-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 ב-מערכת הפעלה שמותאמת לקונטיינרים זמין במאמר בנושא יצירה והגדרה של מופעים.