تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نصب و پیکربندی Ingress Controller با استفاده از Ambassador


۳ اردیبهشت ۱۴۰۴

مدیریت ارکستراسیون کانتینرها معمولاً نیاز به مسیریابی ترافیک خارجی به برنامه‌های درون یک کلاستر Kubernetes را دارد. یکی از اجزای اساسی که این چالش را حل می‌کند، Ingress Controller است. این کنترلر به عنوان دروازه‌ای میان درخواست‌های خارجی و برنامه‌های داخلی عمل کرده و دسترسی خارجی به سرویس‌های در حال اجرا روی کلاستر را به روشی مؤثر مدیریت می‌کند.

در این آموزش از لیارا، یاد خواهید گرفت که چگونه از Ambassador Edge Stack Ingress (AES) استفاده کنید. همچنین، نحوه استقرار و پیکربندی خودکار گواهی‌های TLS برای هاست‌های خود و مسیریابی ترافیک به برنامه‌های بک‌اند را انجام خواهید داد.

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری

آنچه در ادامه خواهید خواند:

  • پیش نیاز ها
  • مرحله اول: نصب Ambassador Edge Stack
  • مرحله دوم: Listener برای Ambassador Edge Stack
  • مرحله سوم: Host ها برای Ambassador Edge Stack
  • مرحله چهارم: پیکربندی DNS برای Ambassador Edge Stack
  • مرحله پنجم: تست عملکرد Ambassador Edge Stack
  • مرحله ششم: پیکربندی مسیر /quote/ برای سرویس quote
  • مرحله هفتم: بررسی عملکرد و صحت نهایی تنظیمات
  • سوالات متداول
  • جمع بندی

پیش نیاز ها

برای تکمیل و انجام این آموزش به موارد زیر نیاز خواهید داشت.

  • یک Git client برای کلون کردن Starter Kit
  • Helm برای مدیریت نسخه‌ها و به‌روزرسانی‌های Ambassador Edge Stack
  • Doctl برای تعامل با API
  • Kubectl برای مدیریت و تعامل با Kubernetes
  • Curl برای تست برنامه‌های نمونه بک‌اند

نکته قابل توجه: لازم است که doctl و kubectl به کلاستر Kubernetes متصل شده باشند.

نصب و راه‌اندازی Kubernetes روی سرور فیزیکی (بدون مجازی‌سازی)
نصب و راه‌اندازی Kubernetes روی سرور فیزیکی

مرحله اول: نصب Ambassador Edge Stack

در مرحله اول، Ambassador Edge Stack با استفاده از Helm بر روی کلاستر DOKS نصب می‌شود، پس باید در ابتدا مخزن (repository) Starter Kit را کلون کنید و بعد وارد دایرکتوری آن شوید.

git clone https://github.com/digitalocean/Kubernetes-Starter-Kit-Developers.git

cd Kubernetes-Starter-Kit-Developers

بعد از آن که Helm مربوط به Ambassador را اضافه کردید، به سراغ فهرست چارت‌ها بروید و آن را بررسی کنید.

helm repo add datawire https://app.getambassador.io

helm repo update datawire

helm search repo datawire

خروجی باید به صورت زیر باشد.

NAME                            CHART VERSION   APP VERSION     DESCRIPTION
datawire/ambassador             6.9.4           1.14.3          A Helm chart for Datawire Ambassador
datawire/ambassador-operator    0.3.0           v1.3.0          A Helm chart for Kubernetes
datawire/edge-stack             7.3.2           2.2.2           A Helm chart for Ambassador Edge Stack
datawire/emissary-ingress       7.3.2           2.2.2           A Helm chart for Emissary Ingress
datawire/telepresence           2.6.5           2.6.5           A chart for deploying the server-side component...

چارتی که در این آموزش از لیارا استفاده کرده‌ایم، datawire/edge-stack است که با نصب آن، Ambassador Edge Stack روی کلاستر Kubernetes راه‌اندازی می‌شود.

قبل از نصب Ambassador Edge Stack نسخه‌ی 2.x، باید کلاستر Kubernetes به شیوه‌ای پیکربندی شود که از منابع پیکربندی getambassador.io/v3alpha1 و getambassador.io/v2 پشتیبانی کند. برای این کار، دستور زیر را اجرا کنید.

kubectl apply -f https://app.getambassador.io/yaml/edge-stack/2.3.0/aes-crds.yaml

در نسخه 2.x از Ambassador Edge Stack، به صورت خودکار یک Deployment در فضای نام (namespace) به نام emissary-system با عنوان edge-stack-apiext اضافه می‌شود. این قسمت، نقش توسعه‌دهنده‌ی سرور API را دارد و وظیفه‌ی تبدیل منابع سفارشی (CRDs) بین نسخه‌های v3alpha1 و v2 را برعهده دارد. این Deployment باید همیشه فعال و در حال اجرا باشد.

در مرحله بعد، فایل ambassador-values-v7.3.2.yaml را که در مسیر زیر در مخزن Starter Kit قرار دارد، با استفاده از یک ویرایشگر متن که ما پیشنهاد می‌کنیم ترجیحاً با قابلیت بررسی فرمت YAML باشد را باز و آن را با دقت بررسی کنید.

code 03-setup-ingress-controller/assets/manifests/ambassador-values-v7.3.2.yaml

اگر هدف فقط حفظ تنظیمات موجود Load Balancer، از جمله DNS و پیکربندی های دیگر است، نیاز است که فایل ambassador-values-v7.3.2.yaml را ویرایش کنید و annotation مربوط به Load Balancerr قبلی را در آن اضافه کنید. اما در همین فایل هم می‌توان قابلیت Proxy Protocol را در بخش modules فعال کرد.

Ambassador Edge Stack با استفاده از Helm نصب می‌شود، در این فرآیند، یک namespace اختصاصی به نام ambassador نیز ایجاد می‌شود.

HELM_CHART_VERSION="7.3.2"

helm install edge-stack datawire/edge-stack --version "$HELM_CHART_VERSION" \
    --namespace ambassador \
    --create-namespace \
    -f "03-setup-ingress-controller/assets/manifests/ambassador-values-v${HELM_CHART_VERSION}.yaml"

برای بررسی وضعیت نصب Ambassador می‌توانید از دستور زیر استفاده کنید.

helm ls -n ambassador

خروجی این دستور باید مشابه به نمونه زیر باشد.

NAME         NAMESPACE   REVISION  UPDATED                                STATUS      CHART               APP VERSION
edge-stack   ambassador  1         2022-02-03 09:56:55.80197 +0200 EET   deployed    edge-stack-7.3.2   2.2.2

در این قسمت باید منابع Kubernetes ساخته شده برای فضای نام (namespace) ambassador بررسی کنید.

توجه داشته باشید که منابع deployment و replicaset باید در وضعیت درستی باشند و همچنین منبع LoadBalancer باید یک IP خارجی اختصاص داده شده داشته باشد.

برای انجام این کار، دستور زیر را وارد کنید.

kubectl get all -n ambassador

خروجی این دستور مانند خروجی زیر است.

NAME READY STATUS RESTARTS AGE
pod/edge-stack-5bdc64f9f6-hhwdc 1/1 Running 0 6m14s
pod/edge-stack-5bdc64f9f6-xz9jl 1/1 Running 0 6m14s
pod/edge-stack-agent-bcdd8ccc8-m9blv 1/1 Running 0 6m14s
pod/edge-stack-redis-64b7c668b9-69c5p 1/1 Running 0 6m14s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/edge-stack LoadBalancer 10.245.189.240 68.183.252.190 80:30323/TCP,443:30510/TCP 6m14s
service/edge-stack-admin ClusterIP 10.245.170.181 8877/TCP,8005/TCP 6m14s
service/edge-stack-redis ClusterIP 10.245.205.49 6379/TCP 6m14s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/edge-stack 2/2 2 2 6m14s
deployment.apps/edge-stack-agent 1/1 1 1 6m14s
deployment.apps/edge-stack-redis 1/1 1 1 6m14s
NAME DESIRED CURRENT READY AGE
replicaset.apps/edge-stack-5bdc64f9f6 2 2 2 6m14s
replicaset.apps/edge-stack-agent-bcdd8ccc8 1 1 1 6m14s
replicaset.apps/edge-stack-redis-64b7c668b9 1 1 1 6m14s

در این خروجی، باید به چند نکته توجه کنید.

  • Pods باید در حالت Running باشند و تعداد آن‌ها باید به درستی در ستون READY نمایش داده شود.
  • منابع deployment باید در حالت AVAILABLE قرار داشته باشند.
  • منبع LoadBalancer باید یک IP خارجی (در ستون EXTERNAL-IP) به ان اختصاص داده باشد.

برای اینکه بتوانید وضعیت تمامی منابع Load Balancer مشاهده و بررسی کنید، دستور زیر را وارد کنید.

doctl compute load-balancer list --format IP,ID,Name,Status

خروجی این دستور مشابه به نمونه زیر خواهد بود و باید منبع Load Balancer جدیدی را که در حالت فعال است داشته باشد.

IP                 ID                                      Name                                Status
68.183.252.190     0471a318-a98d-49e3-aaa1-ccd855831447    acdc25c5cfd404fd68cd103be95af8ae    active
آموزش نحوه راه‌اندازی کلاستر K3s Kubernetes در اوبونتو 22.04
نحوه راه‌اندازی کلاستر K3s Kubernetes در اوبونتو

مرحله دوم: Listener برای Ambassador Edge Stack

منبع Listener (CRD) تعیین می‌کند که Ambassador Edge Stack باید بر روی چه پورتی از شبکه باشد و از کدام هاست‌ها برای پردازش درخواست‌ها استفاده کند.

نمونه‌ای از پیکربندی Listener:

apiVersion: getambassador.io/v3alpha1
kind: Listener
metadata:
  name: http-listener
spec:
  port: 8080
  protocol: HTTPS
  securityModel: XFP
  hostBinding:
    namespace:
      from: ALL

نکته‌های قابل توجه:

  • port: پورتی که Ambassador باید روی آن منتظر درخواست‌ها باشد.
  • protocol: پروتکلی که باید استفاده شود (HTTP یا HTTPS).
  • protocolStack: امکان تنظیم دقیق پروتکل‌های لایه‌ای.
  • securityModel: نحوه تشخیص امن یا ناامن بودن درخواست.
  • hostBinding: مشخص می‌کند کدام Hostها به این Listener مرتبط باشند.

پیشنهاد می‌شود همیشه از مدل امنیتی XFP استفاده کنید. این مدل در صورت وجود X-Forwarded-Proto درخواست‌ها را به صورت خودکار از HTTP به HTTPS هدایت می‌کند.

دستورهای لازم برای ایجاد Listener

ابتدا به مسیر مخزن کلون‌شده بروید. برای کار دستور زیر را وارد کنید.

cd Kubernetes-Starter-Kit-Developers

سپس تغییرات مربوطه را اعمال کنید.

kubectl apply -f 03-setup-ingress-controller/assets/manifests/ambassador/ambassador_listener.yaml

برای بررسی وضعیت Listener

kubectl describe listener.getambassador.io
راهنمای استفاده از Nessus برای اسکن آسیب‌ پذیری‌ها در Ubuntu 22.04
Nessus برای اسکن آسیب‌ پذیری‌ها

مرحله سوم: Host ها برای Ambassador Edge Stack

منبع هاست، وظیفه مدیریت گواهی‌های TLS را دارد و با استفاده از ACME (مانند Let’s Encrypt) به صورت خودکار گواهی‌ها را دریافت و تمدید می‌کند.

یک نمونه از پیکربندی Host به عنوان مثال.

apiVersion: getambassador.io/v3alpha1
kind: Host
metadata:
  name: echo-host
  namespace: ambassador
spec:
  hostname: echo.starter-kit.online
  acmeProvider:
    email: echo@gmail.com
  tlsSecret:
    name: tls2-cert
  requestPolicy:
    insecure:
      action: Redirect
      additionalPort: 8080

برای اعمال تنظیمات Host ها دستور زیر استفاده کنید.

cd Kubernetes-Starter-Kit-Developers

kubectl apply -f 03-setup-ingress-controller/assets/manifests/ambassador/echo_host.yaml

kubectl apply -f 03-setup-ingress-controller/assets/manifests/ambassador/quote_host.yaml

برای بررسی وضعیت Host ها از دستور زیر بهره ببرید.

kubectl get hosts -n ambassador

خروجی‌ای مانند زیر را مشاهده خواهید مرد که نشان‌دهنده وضعیت درخواست گواهی است.

NAME         HOSTNAME                   STATE     PHASE COMPLETED      PHASE PENDING              AGE
echo-host    echo.starter-kit.online    Pending   ACMEUserRegistered   ACMECertificateChallenge   3s
همین حالا، فایل‌های خودتون رو در فضایی سریع، پایدار و مقیاس‌پذیر ذخیره کنید.
✅ سازگار با Amazon S3 ✅ عملکرد بالا ✅۲.۵ گیگ فضای رایگان
خرید فضای ذخیره‌سازی ابری
موارد امنیتی بسیار مهم برای حفاظت از سرور مجازی
حفاظت از سرور مجازی

مرحله چهارم: پیکربندی DNS برای Ambassador Edge Stack

در این مرحله باید رکوردهای DNS را تنظیم کنید.

برای ساخت دامنه دستور زیر را وارد کنید.

doctl compute domain create starter-kit.online

سپس، IP را فعال کنید.

kubectl get svc -n ambassador

در خروجی به EXTERNAL-IP دقت کنید.

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)
edge-stack   LoadBalancer   10.245.189.240   68.183.252.190    80:30323/TCP,443:30510/TCP

رکوردهای A را ایجاد کنید.

doctl compute domain records create starter-kit.online --record-type "A" --record-name "echo" --record-data "68.183.252.190" --record-ttl "30"

doctl compute domain records create starter-kit.online --record-type "A" --record-name "quote" --record-data "68.183.252.190" --record-ttl "30"

رکوردهای دامنه را بررسی کنید:

doctl compute domain records list starter-kit.online

خروجی باید به صورت زیر باشد.

ID           Type    Name     Data                    TTL
164171801    A       echo     68.183.252.190          30
164171809    A       quote    68.183.252.190          30
Gitea چیست؟ میزبانی بدون دردسر سورس کد سازمانی
Gitea

مرحله پنجم: تست عملکرد Ambassador Edge Stack

بعد از پیکربندی Listener , Host و DNS، وقت آن است بررسی کنیم که آیا Ambassador Edge Stack به درستی درخواست‌های ورودی را مدیریت می‌کند یا خیر.

بررسی مسیر /backend/

مسیر /backend/ سرویسی به نام echo-server دارد که در کلاستر روت (root) می‌شود. این مسیر در فایل mappings.yaml تعریف شده است.

محتوای قابل مشاهده فایل.

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: echo-backend
spec:
  hostname: echo.starter-kit.online
  prefix: /backend/
  service: echo-service.default

برای اعمال این تغییرات باید دستور زیر را وارد کرد.

cd Kubernetes-Starter-Kit-Developers

kubectl apply -f 03-setup-ingress-controller/assets/manifests/ambassador/mappings.yaml

برای اینکه بتوانید وضعیت منابع Mapping را بررسی کنید از دستور زیر استفاده کنید.

kubectl get mappings -n ambassador

خروجی مشابه زیر را مشاهده خواهید کرد.

NAME           PREFIX      SERVICE                 HOSTNAME                 TLS
echo-backend   /backend/   echo-service.default    echo.starter-kit.online  true

تست با مرورگر یا curl

حال اگه دامنه‌ها (مانند echo.starter-kit.online) درست به IP اشاره کنند و گواهی TLS هم با موفقیت دریافت شده باشد، می‌توانید مسیر /backend/ را در مرورگر وارد کنید.

https://echo.starter-kit.online/backend/

یا با دستور curl هم می‌توانید این کار را انجام دهید.

curl -k https://echo.starter-kit.online/backend/
راهنمای راه‌اندازی IDE ابری code server بر روی سرور مجازی اوبونتو 22.04
IDE ابری code server بر روی سرور مجازی اوبونتو

مرحله ششم: پیکربندی مسیر /quote/ برای سرویس quote

در این مرحله، قصد بر این است که مسیر جدیدی را با پیشوند /quote/ برای هدایت درخواست‌ها به سرویس quote-service تعریف کنیم. برای این عمل، یک شیء از نوع Mapping با مشخصات زیر را ایجاد خواهیم کرد.

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: quote-backend
spec:
  hostname: quote.starter-kit.online
  prefix: /quote/
  service: quote-service.default

در این فایل، مشخص شده است که کلیه درخواست‌های دارای دامنه quote.starter-kit.online و مسیر ابتدایی /quote/، به سرویس quote-service در فضای نام (namespace) default هدایت می‌شوند.

برای اعمال این پیکربندی، از دستور زیر استفاده نمایید.

kubectl apply -f 03-setup-ingress-controller/assets/manifests/ambassador/mappings-quote.yaml

برای بررسی صحت ثبت و اعمال این Mapping، می‌توانید از دستور زیر استفاده نمایید.

kubectl get mappings -n ambassador

در صورت اجرای صحیح، خروجی مشابه زیر را مشاهده خواهید کرد.

NAME           PREFIX      SERVICE                 HOSTNAME                   TLS
echo-backend   /backend/   echo-service.default    echo.starter-kit.online    true
quote-backend  /quote/     quote-service.default   quote.starter-kit.online   true
فراپاشی ابری Cloud Bursting چیست؟ (راهنمای کامل)
Cloud Bursting چیست؟ (راهنمای کامل)

مرحله هفتم: بررسی عملکرد و صحت نهایی تنظیمات

پس از پیکربندی مسیرهای /backend/ و /quote/ و فعال‌سازی گواهی‌نامه SSL برای هر دو دامنه، لازم است عملکرد کلی سیستم مورد بررسی قرار گیرد.

بررسی از طریق مرورگر

لطفاً آدرس‌های زیر را در مرورگر خود باز نمایید.

https://echo.starter-kit.online/backend/
https://quote.starter-kit.online/quote/

در صورت پیکربندی صحیح، نکات زیر را در نظر بگیرید.

  • در مسیر اول، باید پاسخی از سرویس echo-service دریافت شود.
  • در مسیر دوم، باید یک نقل‌قول تصادفی از سرویس quote-service نمایش داده شود.

بررسی از طریق خط فرمان

در صورت تمایل به استفاده از خط فرمان (CLI)، می‌توانید از دستورهای زیر استفاده نمایید.

curl -k https://echo.starter-kit.online/backend/
curl -k https://quote.starter-kit.online/quote/

نکته: پارامتر -k در این دستورها جهت نادیده‌ گرفتن هشدارهای مربوط به گواهی‌نامه‌های SSL به‌کار می‌رود. در محیط‌های عملیاتی توصیه می‌شود از گواهی‌نامه‌های معتبر استفاده کنید.

سوالات متداول

در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جواب‌های کوتاه اما مفیدی داده‌ایم که با استفاده از آن می‌توانید به سوال خود پاسخ صحیحی را بدهید.

چگونه می‌ توان مطمئن شد که Mapping در Ambassador به‌ درستی عمل می‌ کند؟

با اجرای دستور ping برای دامنه‌های quote.starter-kit.online یا echo.starter-kit.online، در صورتی که پاسخ از IP Ambassador دریافت شود، نشان‌دهنده عملکرد صحیح Mapping و هدایت درخواست‌ها از طریق Ambassador است.

چرا هنگام اجرای دستور curl، درخواست به صورت خودکار به HTTPS هدایت می‌ شود؟

Ambassador به روشی پیکربندی شده است که از TLS termination پشتیبانی می‌کند. به همین دلیل، هنگام دریافت درخواست HTTP، آن را به نسخه‌ی مطمئن تر HTTPS منتقل می‌کند تا امنیت ارتباط تضمین شود.

در صورت عدم مشاهده IP خارجی در خروجی ping، چه مشکلی ممکن است وجود داشته باشد؟

در چنین شرایطی ممکن است تنظیمات DNS به‌درستی انجام نشده باشد، یا اینکه Mapping‌ ها در Ambassador به‌درستی تعریف نشده‌اند. همچنین ممکن است بارگذار (LoadBalancer) هنوز به IP خارجی اختصاص نداده باشد.

چرا بررسی پاسخ از طریق curl اهمیت دارد؟

بررسی پاسخ از طریق curl به شما این اطمینان را می‌دهد که سرویس‌ Gateway نه‌تنها در دسترس است، بلکه به‌درستی از طریق HTTPS قابل فراخوانی است و محتوای مورد انتظار را باز می‌گرداند.

نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو
داکر کامپوز (Docker Compose)

جمع بندی

در این مقاله، مراحل کامل نصب و پیکربندی Ingress Controller با استفاده از Ambassador به‌صورت دقیق و مرحله‌به‌مرحله شرح داده‌ایم. از نصب اولیه تا بررسی صحت عملکرد سرویس‌ها، تمامی نکات کلیدی را برای راه‌اندازی صحیح را بررسی کرده‌ایم. این راهنما می‌تواند مرجعی کاربردی برای توسعه‌دهندگان و مدیران سیستم باشد که به دنبال استقرار یک API قدرتمند و انعطاف‌پذیر هستند.

به اشتراک بگذارید