پرش به محتویات

شب ۲۰: نصب Traefik با Helm

بخش ۲۰ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثال‌ها مطابق منبع با Traefik Proxy v3.7 نوشته شده‌اند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزموده‌شده یا digest مشخصی را ثابت کنید. تمرین‌ها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.

فهرست کامل دورهٔ ترافیک در ۳۰ شب

هدف‌های یادگیری

  • ساخت کلاستر آزمایشگاهی بدون تعارض و نصب chart رسمی با values بازبینی‌شده.
  • ثابت‌کردن و ثبت نسخهٔ chart و برنامه.
  • بررسی آمادگی کنترلر، RBAC، Service و دسترسی امن داشبورد.

تمرین عملی

برای کلاستر محلی موقت:

k3d cluster create traefik-lab \
  --port 80:80@loadbalancer --port 443:443@loadbalancer \
  --k3s-arg '--disable=traefik@server:0'
kubectl cluster-info --context k3d-traefik-lab
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm search repo traefik/traefik --versions | head

یک CHART_VERSION بازبینی‌شده از خروجی انتخاب کنید؛ نسخهٔ آینده یا قدیمی را کورکورانه کپی نکنید.

# values.yaml
deployment:
  replicas: 1 # Lab; use Night 24 for HA.
providers:
  kubernetesCRD:
    enabled: true
    allowCrossNamespace: false
  kubernetesIngress:
    enabled: true
    publishedService: {enabled: true}
  kubernetesGateway:
    enabled: true
ingressClass:
  enabled: true
  isDefaultClass: false
service:
  type: LoadBalancer
ports:
  web: {port: 8000, exposedPort: 80}
  websecure: {port: 8443, exposedPort: 443}
logs:
  general: {level: INFO}
  access: {enabled: true, format: json}
api: {dashboard: true}
export CHART_VERSION=REVIEWED_VERSION
kubectl create namespace traefik
helm show values traefik/traefik --version "$CHART_VERSION" > chart-defaults.yaml
helm template traefik traefik/traefik --version "$CHART_VERSION" \
  -n traefik -f values.yaml > rendered.yaml
kubectl apply --dry-run=server -f rendered.yaml
helm upgrade --install traefik traefik/traefik --version "$CHART_VERSION" \
  -n traefik -f values.yaml --wait --timeout 5m
kubectl -n traefik get deploy,pod,svc,endpointslice
kubectl -n traefik rollout status deploy/traefik
kubectl auth can-i --as=system:serviceaccount:traefik:traefik list ingressroutes.traefik.io

برای بازرسی از port-forward محدود به دستگاه محلی استفاده کنید:

kubectl -n traefik port-forward deploy/traefik 9000:8080
# Separate shell:
curl -fsS http://127.0.0.1:9000/api/overview

فهرست اعتبارسنجی

  • هیچ کنترلر ورودی داخلی یا دومی همان class را تصاحب نمی‌کند.
  • نسخهٔ chart، tag یا digest ایمیج، values، CRDها و خروجی تولیدشده ثبت شده‌اند.
  • Deployment در وضعیت Available است؛ podها آماده‌اند و EndpointSliceهای سرویس endpoint دارند.
  • نوع Service با محیط سازگار است و پورت‌های عمومی آگاهانه انتخاب شده‌اند.
  • مجوزهای ServiceAccount بازبینی شده‌اند؛ موفقیت نصب را نشانهٔ درستی آن‌ها فرض نکنید.
  • داشبورد فقط از port-forward یا مسیر محافظت‌شده قابل‌دسترسی است.

نکته‌های عیب‌یابی

  • EXTERNAL-IP سرویس LoadBalancer در انتظار است: کلاستر محلی یا bare-metal پیاده‌سازی متعادل‌کنندهٔ بار می‌خواهد؛ نگاشت پورت k3d ممکن است همچنان دسترسی بدهد.
  • pod در CrashLoopBackOff است: لاگ قبلی، آرگومان‌ها، mountها و رویدادها را بررسی کنید.
  • منبع API ناشناخته است: CRDها نصب نشده‌اند یا ناسازگارند.
  • مسیر بعداً نادیده گرفته می‌شود: مالکیت IngressClass یا GatewayClass منطبق نیست.

خودآزمایی

  1. چرا chart را جدا از ایمیج ثابت می‌کنیم؟ قالب‌ها، RBAC و CRDهای chart و فایل اجرایی برنامه رفتار نسخه‌دار مستقلی دارند.
  2. چرا مالکیت پیش‌فرض IngressClass را غیرفعال می‌کنیم؟ تا اشیای Ingress نامرتبط بی‌سروصدا تصاحب نشوند.
  3. readiness چه چیزی را ثابت می‌کند؟ pod آمادگی گزارش می‌کند؛ سلامت تمام مسیرهای خارجی را ثابت نمی‌کند.
  4. اثبات کنید: نسخهٔ انتشار، digest ایمیج، بررسی RBAC، آمادگی و دسترسی محلی API را نشان دهید.