شب ۱۱: نصب Traefik روی Docker Swarm¶
بخش ۱۱ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثالها مطابق منبع با Traefik Proxy v3.7 نوشته شدهاند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزمودهشده یا digest مشخصی را ثابت کنید. تمرینها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.
فهرست کامل دورهٔ ترافیک در ۳۰ شب
هدفهای یادگیری¶
- استقرار Traefik بهعنوان سرویس Swarm با ارائهدهنده و محل برچسب درست.
- انتشار پورتهای ورودی و اتصال سرویسهای مسیریابیشده به یک overlay.
- اعتبارسنجی وضعیت مطلوب، taskها و ترافیک.
تمرین عملی¶
docker info --format '{{.Swarm.LocalNodeState}}'
# Disposable lab only, if inactive:
docker swarm init --advertise-addr MANAGER_IP
docker network create --driver=overlay --attachable traefik-public
# swarm.yml
services:
traefik:
image: traefik:v3.7
command:
- --providers.swarm=true
- --providers.swarm.exposedbydefault=false
- --providers.swarm.network=traefik-public
- --entrypoints.web.address=:80
- --api.dashboard=true
- --ping=true
- --accesslog=true
ports:
- target: 80
published: 80
protocol: tcp
mode: ingress
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks: [traefik-public]
deploy:
placement:
constraints: [node.role == manager]
labels:
traefik.enable: "true"
traefik.http.routers.dashboard.rule: "Host(`dashboard.swarm.example.test`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
traefik.http.routers.dashboard.service: api@internal
traefik.http.services.traefik.loadbalancer.server.port: "8080"
whoami:
image: traefik/whoami:v1.11
networks: [traefik-public]
deploy:
replicas: 2
labels:
traefik.enable: "true"
traefik.http.routers.whoami.rule: "Host(`whoami.swarm.example.test`)"
traefik.http.routers.whoami.entrypoints: web
traefik.http.services.whoami.loadbalancer.server.port: "80"
networks:
traefik-public:
external: true
docker stack config -c swarm.yml > rendered-swarm.yml
docker stack deploy --prune -c swarm.yml edge
docker stack services edge
docker service ps edge_traefik --no-trunc
docker service logs --since 5m edge_traefik
curl -fsS --resolve whoami.swarm.example.test:80:127.0.0.1 \
http://whoami.swarm.example.test/
فهرست اعتبارسنجی¶
- task مربوط به Traefik روی manager موردنظر در وضعیت
Runningاست. - تمام برچسبهای مسیر در تنظیمات تولیدشده زیر
deploy.labelsقرار دارند. - هر دو سرویس در
traefik-publicمشترکاند. - پورت پشتصحنه صریح است، حتی اگر ایمیج فقط یک پورت expose کند.
- Whoami از طریق تمام گرههای ورودی موردنظر پاسخ 200 میدهد.
- داشبورد بدون احراز هویت رها نشده است؛ پیش از استفادهٔ واقعی احراز هویت شب ۰۸ را از طریق فایل یا config اضافه کنید.
نکتههای عیبیابی¶
docker stack deployکلیدهای پشتیبانینشدهٔ Compose را نادیده میگیرد؛ همیشهdocker stack configو هشدارها را بررسی کنید.- مسیریاب غایب است:
deploy.labels، برچسب فعالسازی، انتخاب ارائهدهنده و دسترسی به API مدیر را بررسی کنید. - درخواست فقط به بعضی گرهها میرسد: routing mesh، فایروال، دسترسپذیری گره و حالت انتشار پورت را بررسی کنید.
- خطای 502 پشتصحنه: عضویت overlay و پورت صریح سرویس را بررسی کنید.
خودآزمایی¶
- چرا بهجای
docker compose upازdocker stack deployاستفاده میکنیم؟ سرویسهای Swarm را میسازد و معنایdeployرا اجرا میکند. - کدام ارائهدهنده در نسخهٔ ۳ سرویسهای Swarm را کشف میکند؟
swarm. - چرا برچسب داشبورد پورت پشتصحنهٔ صوری دارد؟ کشف Swarm حتی برای مسیریابی به
api@internalانتظار پورت سرویس دارد. - اثبات کنید: گرهٔ task، حالت انتشار پورت، عضویت overlay و یک مسیر موفق را نشان دهید.