آنچه در این مقاله میخوانید
- پیش نیاز ها
- مرحله اول: نصب Ambassador Edge Stack
- مرحله دوم: Listener برای Ambassador Edge Stack
- مرحله سوم: Host ها برای Ambassador Edge Stack
- مرحله چهارم: پیکربندی DNS برای Ambassador Edge Stack
- مرحله پنجم: تست عملکرد Ambassador Edge Stack
- مرحله ششم: پیکربندی مسیر /quote/ برای سرویس quote
- مرحله هفتم: بررسی عملکرد و صحت نهایی تنظیمات
- سوالات متداول
- جمع بندی
نصب و پیکربندی 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 قدرتمند و انعطافپذیر هستند.