در این آموزش مدیریت دامنه پشت CDN را با kubectl خودکار می‌کنیم: فایل کانفیگ را آماده می‌کنیم، کانفیگ دامنه را دریافت می‌کنیم و همان دامنه را با kubectl edit به‌روز می‌کنیم.

اگر به‌روزرسانی را با درخواست HTTP می‌خواهیم، آموزش مدیریت دامنه خود را با API خودکار کنید را دنبال می‌کنیم.

ترتیب کار:

flowchart LR
  stepKube(["۱. دانلود کانفیگ"])
  stepToken(["۲. ساخت توکن"])
  stepGet(["۳. دریافت CDN"])
  stepEdit(["۴. ویرایش کانفیگ"])
  stepCheck(["۵. بررسی صحت"])
  stepKube --> stepToken --> stepGet --> stepEdit --> stepCheck

پیش‌نیازها

  • دامنه یا زیردامنه پشت CDN ستون — آموزش‌ها
  • دسترسی به پنل اوشن برای ساخت توکن سرویس IAM و مشاهده‌ی نام فضای کاری
  • kubectl روی همین سیستم — در صورت نبود، از صفحه رسمی نصب kubectl نصب می‌کنیم

مراحل

  1. فایل کانفیگ را از kubeconfig ستون دانلود و در $HOME/kubeconfig ذخیره می‌کنیم:
curl -fsSL -o "$HOME/kubeconfig" \
  https://edge.sotoon.ir/kubeconfig
  1. وارد پروفایل و بخش توکن‌ها می‌شویم. روی افزودن توکن کلیک می‌کنیم و با تعیین نام و تاریخ انقضا، توکن سرویس IAM را می‌سازیم.
  2. مقدار توکن را کپی و به‌صورت امن نگهداری می‌کنیم؛ این مقدار پس از ایجاد توکن، دوباره نمایش داده نمی‌شود.

امنیت توکن

هر شخصی که به توکن دسترسی داشته باشد، می‌تواند از طرف ما روی محصولات تغییر ایجاد کند. توکن را در مخزن عمومی یا لاگ قرار نمی‌دهیم.

  1. در فایل دانلودشده، عبارت <bepa-token> را با توکن سرویس IAM جایگزین می‌کنیم. context این فایل sotoon است.
  2. فایل حاوی توکن را به مسیر پیش‌فرض منتقل می‌کنیم:
mkdir -p "$HOME/.kube"
mv "$HOME/kubeconfig" "$HOME/.kube/config"

فایل kubeconfig

این دستور فایل پیش‌فرض $HOME/.kube/config را جایگزین می‌کند. اگر به کلاستر دیگری وصل هستیم، ابتدا از آن فایل نسخه نگه می‌داریم. فایل دانلودشده را در مخزن قرار نمی‌دهیم.

  1. از فضاهای کاری نام فضای کاری را برمی‌داریم. این مقدار در ستون نام است و با شناسه‌ی فضای کاری (WorkspaceUUID) فرق دارد. در دستورها آن را به‌جای <NAMESPACE> می‌گذاریم.
  2. فهرست CDNهای فضای کاری را دریافت می‌کنیم:
kubectl --context sotoon \
  --namespace <NAMESPACE> \
  get cdns
  1. در خروجی، ردیفی را که ستون HOSTNAME آن دامنه مورد نظر است پیدا می‌کنیم و مقدار ستون NAME را به‌جای <NAME> می‌گذاریم:
kubectl --context sotoon \
  --namespace <NAMESPACE> \
  get cdns/<NAME> -o yaml

پارامتر <NAME>

<NAME> همان metadata.name آبجکت CDN است، نه لزوما نام دامنه.

خروجی، کانفیگ فعلی همان CDN است. تعریف فیلدهای spec در CDN and DNS (v2.1) است. الگوی آدرس Canonical در لبه (Edge) آمده است.

  1. همان کانفیگ را ویرایش می‌کنیم:
kubectl --context sotoon \
  --namespace <NAMESPACE> \
  edit cdns/<NAME>

ادیتور

کانفیگ به‌صورت پیش‌فرض در vim باز می‌شود. برای استفاده از nano، پیش از این دستور export EDITOR=nano را اجرا می‌کنیم.


بررسی صحت

همان CDN را دوباره دریافت می‌کنیم:

kubectl --context sotoon \
  --namespace <NAMESPACE> \
  get cdns/<NAME> -o yaml

در خروجی باید spec.hostname دامنه مورد نظر و spec.canonicalHostname با الگوی <hash>.cdn.edge.sotoon.ir دیده شود. اگر در مرحله‌ی ویرایش فیلدی را عوض کرده‌ایم، همان مقدار باید در این خروجی باشد.

اگر خروجی مطابق انتظار نیست:

  • اگر پاسخ Unauthorized است، جایگزینی <bepa-token> با توکن سرویس IAM و معتبر بودن توکن را بررسی می‌کنیم.
  • اگر پاسخ NotFound است، <NAMESPACE> را با نام فضای کاری و <NAME> را با metadata.name همان CDN مقایسه می‌کنیم.
  • چند دقیقه برای انتشار روی لبه‌ها صبر می‌کنیم و دوباره همان دستور را اجرا می‌کنیم.

ادامه مسیر