Traefik הנה מערכת reverse proxy / load balancer המבוססת קוד פתוח אשר הולכת ותופסת תאוצה היות והיא קלה להתקנה ומתממשקת ל Docker Comtainers ול Let's Encrypt בקלות ובפשטות.
במדריך זה אסביר כיצד להתקין ולהגדיר את המערכת.
לפני שנתחיל, אנא וודאו שהתקנתם docker וכן docker-compose על פי המדריך הבא.
שלב א' – התקנת traefik באמצעות docker-compose
תחילה, עלינו ליצור רשת חדשה אשר תשמש לחיבור בין ה Traefik למיקרו סרביסים שלנו, לשם כך כתבו את הפקודה הבאה:
docker network create proxy
כעת ערכו את קובץ ההגדרות של docker-compose אשר יצרתם במדריך ההתקנה של הדוקר על ידי הפקודה הבאה:
sudo nano ~/docker/docker-compose.yml
והוסיפו פנימה את הטקסט הבא:
version: "3.6"
services:
traefik:
image: traefik:latest
restart: always
domainname: domain.com
ports:
- 80:80
- 443:443
- 8080:8080
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ~/docker/traefik/traefik.toml:/traefik.toml
- ~/docker/traefik/rules.toml:/etc/traefik/rules.toml
- ~/docker/traefik/acme.json:/C
container_name: traefik
networks:
proxy:
external: true
ושמרו את הקובץ על ידי לחיצה על ctrl+x ולאחריו y ואנטר.
כעת צרו תיקיה בשם traefik תחת התיקיה של ה docker על ידי הפקודה הבאה:
mkdir ~/docker/traefik
כעת צרו בתוך התיקיה קובץ ריק בשם acme.json אשר ישמש לאחסון המידע אודות תעודות ה ssl ותנו לו
את ההרשאות המתאימות:
touch ~/docker/traefik/acme.json
chmod 600 ~/docker/traefik/acme.json
הסיבה לכך היא שאם ניתן הרשאות גבוהות יותר, המערכת תציג שגיאת אבטחה ותמנע את התקנת תעודות ה SSL.
כעת ניצור את קובץ ההגדרות הראשי של Traefik, לצורך כך צרו קובץ חדש על ידי הפקודה הבאה:
nano ~/docker/traefik/traefik.toml
והדביקו פנימה את הטקסט הבא:
logLevel = "WARN" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
#the next line will cause traefik to use http as default then https
defaultEntryPoints = ["http", "https"]
# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations
# Force HTTPS - force redirect all http to https
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
#Traefik Dashboard settings
[entryPoints.traefik]
address=":8080"
[api]
entryPoint = "traefik"
dashboard = true
address = ":8080"
# Let's encrypt configuration
[acme]
entryPoint = "https"
storage = "/acme.json"
caServer = "https://acme-v02.api.letsencrypt.org/directory"
[acme.dnsChallenge]
provider = "cloudflare"
delayBeforeCheck = 0
[[acme.domains]]
main = "*.domain.com"
# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "domain.com"
watch = true
# This will hide all docker containers that don't have explicitly
# set label to "enable"
exposedbydefault = false
Let’s Encrypt
Traefik מכילה בתוכה אינטגרציה של ACME מה שאומר בעצם שניתן לבקש באמצעותה תעודות SSL עבור השרותים מבוססי ה docker שלנו. על מנת להנפיק תעודת SSL עליך להיות בעל דומיין משלך או להשתמש בשרות כמו Duck DNS למשל.
Let's Encrypt מאפשרת הנפקת תעודת SSL בשני דרכים:
– HTTP-01
– DNS-01
בקטע הקוד הנ"ל אני מדגים שימוש בדומיין המתארח ב Cloudflare, תוך שימוש ב dnsChallenge. לצורך כך יש להוסיף לקובץ ה docker-compose.yaml את החלק הבא:
environment:
- CF_API_EMAIL=[Cloudflare Login Email]
- CF_API_KEY=[Cloudflare API Key]
וכן להוסיף רשומה עם * אשר תפנה אל ה IP שלכם בבית (אחרת תצטרכו להוסיף a record עבור כל דומיין).
ניתן להשתמש במגוון רחב של ספקיות DNS, את הרשימה המלאה ניתן למצוא כאן.
כעת, הריצו את הפקודה הבאה על מנת להתקין את הקונטיינר של Traefik. לצורך כך הריצו את הפקודות הבאות:
cd ~/docker
docker-compose up -d
פתחו את הדפדפן והקישו את כתובת השרת בצירוף פורט 8080, במידה ועשיתם הכל כראוי אתם אמורים לראות מסך שנראה כך:
כעת, נוסיף מספר שורות (תגיות) לקובץ ה docker-compose.yaml על מנת להוסיף את traefik כדומיין עם reverse proxy. לצורך כך פתחו שוב את קובץ ה docker-compose לעריכה והוסיפו את התגיות תחת הקונטיינר של traefik:
traefik:
image: traefik:latest
restart: always
domainname: ${DOMAINNAME}
ports:
- 80:80
- 443:443
- 8080:8080
networks:
- proxy
labels:
- "traefik.frontend.rule=Host:domain.com"
- "traefik.port=8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ~/docker/traefik/traefik.toml:/traefik.toml
- ~/docker/traefik/rules.toml:/etc/traefik/rules.toml
- ~/docker/traefik/acme.json:/C
container_name: traefik
networks:
proxy:
external: true
כאשר:
* החליפו את domain.com בזה שלכם.
* פורט 8080 הוא הפורט שהוגדר עבור ה dashboard של traefik.
כעת הריצו את הפקודה הבאה על מנת לבנות מחדש את הקונטיינר עם ההגדרות החדשות:
sudo docker-compose up -d
כעת תוכלו לגשת ל dashboard של traefik באמצעות הדומיין שהגדרתם. לדוגמא traefik,domain.com.
שימו לב שכעת ניתן לגשת לממשק בצורה חופשית וללא צורך בהקשם שם משתמש וסיסמה. מומלץ מאוד להגדיר שם משתמש וסיסמה על מנת לאבטח את הגישה לממשק. על מנת לעשות זאת ערכו את קובץ ה traefik.toml והחליפו את הקוד הבא:
[entryPoints.traefik]
address=":8080"
בזה:
[entryPoints.traefik]
address=":8080"
[entryPoints.traefik.auth]
[entryPoints.traefik.auth.basic]
users = [
"user:pass"
]
כאשר את שם המשתמש והסיסמה החליפו בשלכם. יש ליצור סיסמת htpasswd. על מנת לצור אותה גשו לכתובת הבאה וחוללו על פי ההוראות. את הפלט שנראה כך: user:$apr1$e9tBwTJv$WU3uZgCkey13JQ/RS3lWt0
הדביקו במקום user:pass ושמרו את הקובץ.
אתחלו את traefik ותוכלו לראות שכעת תתבקשו להקליד שם משתמש וסיסמה בכניסה.
שלב ב' – הגדרת reverse proxy עבור קונטיינרים נוספים
כפי שציינתי בתחילת המדריך, traefik מאזין לכלי הניהול בו אתם משתמשים ובאמצעות הוספת מספר תגיות לקונטיינרים שלכם, traefik תיצור את קבצי ההגדרות בצורה אוטומטית. בחלק זה של המדריך אפרט על הוספת התגיות השונות.
בחלק זה של המדריך נעשה שימוש בקונטיינר שנקרא whoami שכל תפקידו להציג דרך דפדפן מידע אודות הקונטיינר (כתובת IP, שם ועוד):
לצורך כך, הוסיפו את השורות הבאות לקובץ ה docker-compose.yaml:
whoami:
image: emilevauge/whoami
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:whoami.domain.com"
- "traefik.enable=true" – מורה ל Traefik לחשוף דרכו את whoami.
- traefik.frontend.rule – מגדיר את הדומיין לשימוש עבור השירות.
ועדכנו את הקונטיינר על ידי הפקודה הבאה:
cd ~/docker
docker-compose up -d
אם כעת תגשו לממשק ה Dashboard של Traefik תוכלו לראות שנוספו שם הגדרות של ForntEnd וכן של Backend:
File
דרך נוספת להגדיר שירותים מאחורי Traefik הוא שימוש בכללים אותם ניתן להוסיף לקובץ traefik.toml. בכללים אלה נשתמש בדרך כלל על מנת להחתין שירותים שאינם מבוססי Docker. בקוד הבא תוכלו לראות שימוש בכלל לצורך החצנת שירות pihole למשל:
[file]
[backends]
[backends.nsx]
[backends.nsx.servers.server1]
url = "http://192.168.0.253:81/admin"
[frontends.nsx]
backend = "nsx"
passHostHeader = true
[frontends.nsx.routes.example]
rule = "Host:nsx.domain.com"
בהצלחה!
Leave a Reply