ویرگول
ورودثبت نام
حسام اثنی عشری
حسام اثنی عشری
خواندن ۱۸ دقیقه·۲ سال پیش

KONG API GATEWAY

KONG LOGO
KONG LOGO

Kong Official Website

Kong Github

معرفی Kong gateway

کونگ یک api gateway می باشد که برای hybrid و multi cloud ساخته شده و قابل استفاده در انواع میکروسرویس ها و معماری های توزیعی است. کونگ ابزاری cloud-native بسیار سبک، سریع و انعطاف پذیر است. این api-gateway یک پروکسی معکوس است که امکان مدیریت، پیکربندی و مسیریابی درخواست ها را به api می دهد. Kong Gateway در مقابل هر API RESTful اجرا می شود و می تواند از طریق ماژول ها و افزونه ها گسترش یابد. این برای اجرا بر روی معماری های غیر متمرکز، از جمله استقرار hybrid-cloud و multi-cloud طراحی شده است. با استفاده از کونگ، کاربر می تواند:

  • از اتوماسیون گردش کار و شیوه های مدرن GitOps استفاده کند
  • عدم تمرکز برنامه ها/سرویس و انتقال به میکروسرویس ها
  • یک اکوسیستم توسعه دهنده API پر رونق ایجاد کند
  • ناهنجاری ها و تهدیدات مرتبط با API را به طور فعال شناسایی کند -API ها/سرویس ها را ایمن و کنترل کند و دید API را در کل سازمان بهبود بخشد.

گسترش Kong gateway

Kong Gateway یک برنامه Lua است که در Nginx اجرا می شود. Kong Gateway همراه با OpenResty توزیع شده است که مجموعه ای از ماژول ها است که ماژول lua-nginx را گسترش می دهد.

این مجموعه برای معماری ماژول تنظیم می‌کند، جایی که پلاگین‌ها را می‌توان در زمان اجرا فعال و اجرا شوند. Kong Gateway در هسته خود انتزاعی از پایگاه داده، مسیریابی و مدیریت پلاگین را پیاده سازی می کند. پلاگین ها می توانند در کد جداگانه و مجزا فعال باشند و در هر جایی به request lifecycle تزریق شوند، همه این موارد تنها با چند خط کد ساده عملی می شود.

Kong پلاگین های زیادی را برای کاربر فراهم می کند تا در استقرار Gateway خود از آنها استفاده کند. کاربر همچنین می تواند پلاگین های سفارشی خود را ایجاد کند.

مقایسه ویژگی های نسخه ها

ابزار Kong api gateway به صورت رایگان و open source در دسترس همگان قرار دارد اما نسخه های پولی و شرکتی آن امکاناتی افزون ارائه می کند که به بررسی این موارد می پردازیم:

هر دو نسخه ویژگی های ساختاری سبک بودن و سرعت بالا و cloud-native بودن را پوشش می دهند و همچنین هر دو قابلیت ورود به controller ابزار کوبرنتیس را هم دارند اما در نسخه پولی شاهد gateway mocking و در صفحه مدیریت کونگ، admin gui هستیم که نسخه رایگان فاقد این دو است. هر دو نسخه می توانند ترافیک پلاگین ها را کنترل کنند و gRPC Transformations و Simple Data Transformations را در اختیار کاربر می گذارند. از جمله ویژگی های دیگر پیاده سازی سیستم احراز هویت (Authentication) و امکانات دیگری نظیر Bot Detection, CORS controls, ACLs می توان نام برد.

اما امکاناتی نظیر api analysis, performance tuning, Enterprise support مختص به نسخه پولی این ابزار است.

پرتال ها

-> Kong Admin

Kong Admin API یک رابط RESTful برای مدیریت و پیکربندی خدمات، مسیرها، پلاگین ها و مصرف کنندگان ارائه می دهد. تمام کارهایی که می‌توانید در مقابل gateway انجام دهید، می‌توانند با استفاده از Kong Admin API خودکار شوند. اگر Kong را در حالت ساده اجرا شود، افزایش ترافیک می تواند منجر به عملکرد بالقوه با Kong Proxy شود. مرتب‌ سازی سمت سرور و فیلتر کردن مقادیر زیادی از موجودیت‌ها نیز باعث افزایش استفاده از CPU در CP و پایگاه داده Kong می‌شود. Kong Manager رابط کاربری گرافیکی (GUI) برای Kong Gateway است. برای مدیریت و کنترل Kong Gateway از Kong Admin API در زیر Hood استفاده می شود. امکانات Kong manager :

  • ساخت مسیر ها و سرویس های جدید
  • فعال یا غیر فعال کردن پلاگین ها به راحتی تنها با چند کلیک
  • تیم ها، خدمات، پلاگین ها، مدیریت مشتری ها و هر چیز دیگری را دقیقاً همانطور که کاربر بخواهد گروه بندی می کند.
  • مانیتور کردن و رصد مداوم : با استفاده از داشبوردهای بصری و قابل تنظیم، سلامت cluster-wide، workspace-level یا object-level را میسر است.

-> Kong Dev

Kong Dev Portal برای معرفی برنامه‌نویس‌های جدید و تولید اسناد API، ایجاد صفحات سفارشی، مدیریت نسخه‌های API و دسترسی ایمن به برنامه‌نویس‌ها استفاده می‌شود.

برخی مفاهیم در Kong

Kong Vitals

Kong Vitals معیارهای مفیدی را در مورد سلامت و عملکرد node های Kong Gateway و همچنین معیارهایی در مورد استفاده از API های پروکسی ارائه می دهد. کاربر می تواند به صورت بصری علائم حیاتی را رصد کند و ناهنجاری ها را در زمان واقعی مشخص کند، و از تجزیه و تحلیل API بصری استفاده کند تا ببینید دقیقاً چگونه API ها و Gateway عملکرد دارند و به آمارهای کلیدی دسترسی پیدا کند. Kong Vitals بخشی از رابط کاربری Kong Manager است.

Kubernetes

Kong Gateway می تواند به صورت بومی در Kubernetes با ingress controller سفارشی شده، Helm chart و Operator خود اجرا شود.کنترلر ورودی Kubernetes یک پروکسی است که سرویس های Kubernetes را از برنامه های کاربردی (به عنوان مثال، Deployments، ReplicaSets) در حال اجرا در یک Kubernetes cluster در کلاینت در حال اجرا cluster قرار می دهد. هدف یک کنترل کننده ورودی این است که یک نقطه کنترل واحد برای تمام ترافیک ورودی به Kubernetes فراهم کند.

Insomnia

با Insomnia، سازمان‌ها می‌توانند با استفاده از تست خودکار، همگام‌سازی مستقیم Git و بازرسی انواع پاسخ‌ها، روند طراحی و آزمایش را تسریع بخشند. تیم‌ها در هر اندازه می‌توانند از Insomnia برای افزایش سرعت توسعه، کاهش خطر استقرار و افزایش همکاری استفاده کنند.

DecK

decK به مدیریت پیکربندی Kong Gateway به شکلی اعلامی کمک می کند. این بدان معناست که یک توسعه‌ دهنده می‌تواند وضعیت دلخواه Kong Gateway یا Konnect - سرویس‌ها، مسیرها، پلاگین‌ها و موارد دیگر- را تعریف کند و به decK اجازه دهد بدون نیاز به اجرای دستی هر مرحله، همانطور که با Kong Admin API انجام می دهد، پیاده‌ سازی را انجام دهد.

Services

در Kong Gateway، یک سرویس موجودیتی است که یک API یا میکروسرویس خارجی upstream را نشان می‌دهد. به عنوان مثال، یک میکروسرویس تبدیل داده، یک API صورتحساب و غیره. ویژگی اصلی یک سرویس URL آن است. شما می توانید URL را با یک رشته یا با تعیین پروتکل، میزبان، پورت و مسیر آن به صورت جداگانه مشخص کنید. سرویس ها، همراه با مسیرها(Routes)، به شما امکان می دهد سرویس های خود را با Kong Gateway در کلاینت قرار دهید. Kong Gateway با استفاده از مسیرها، خدمات را از مشتریان انتزاعی می کند. از آنجایی که مشتری همیشه مسیر را فرا می‌خواند، تغییرات در سرویس‌ها (مانند نسخه‌سازی) بر نحوه برقراری تماس توسط مشتریان تأثیری ندارد. مسیرها همچنین امکان استفاده از یک سرویس را توسط چندین مشتری و اعمال سیاست های متفاوت بر اساس مسیر مورد استفاده را فراهم می کنند.

Route

مسیرها تعیین می کنند که چگونه (و اگر) درخواست ها پس از رسیدن به Kong gateway به سرویس های آنها ارسال شود. در جایی که یک سرویس نشان دهنده API بک اند است، یک مسیر آنچه را که در کلاینت قرار می گیرد، تعریف می کند.

یک سرویس واحد می تواند مسیرهای زیادی داشته باشد. هنگامی که یک مسیر مطابقت داشت، Kong Gateway درخواست را به سرویس مرتبط خود پراکسی می کند.

Routes، همراه با سرویس ها به کاربر امکان می دهد سرویس خود را در کلاینت برنامه های کاربردی با Kong Gateway قرار دهد. Kong Gateway با استفاده از مسیرها، سرویس را از برنامه‌ ها انتزاع می‌کند. از آنجایی که برنامه همیشه از مسیر برای ارسال درخواست استفاده می‌کند، تغییرات در سرویس‌ها، مانند نسخه‌سازی، بر نحوه درخواست برنامه‌ها تأثیری ندارد. مسیرها همچنین امکان استفاده از یک سرویس را توسط چندین برنامه کاربردی فراهم می‌کنند و سیاست‌های متفاوتی را بر اساس مسیر مورد استفاده اعمال می‌کنند.

Upstream

Upstream به یک API، برنامه یا میکرو سرویس اشاره دارد که Kong Gateway درخواست ها را به آن ارسال می کند. در Kong Gateway، یک شی upstream یک نام میزبان مجازی را نشان می‌دهد و می‌تواند برای بررسی سلامت، قطع مدار، و بارگذاری درخواست‌های ورودی از طریق چندین سرویس استفاده شود.

Plugins

پلاگین ها عملکرد پیشرفته ای را ارائه می دهند و استفاده از Kong gateway را گسترش می دهند، که به شما امکان می دهد ویژگی های جدیدی را به پیاده سازی خود اضافه کنید. پلاگین ها را می توان به گونه ای پیکربندی کرد که در زمینه های مختلف اجرا شوند، از یک مسیر خاص تا همه upstream ها، و می توانند اقداماتی را در داخل Kong قبل یا بعد از پروکسی شدن درخواست به API upstream و همچنین در هر پاسخ ورودی انجام دهند.

راه اندازی ها

همانطور که پیش تر گفته شد، Kong یک API gateway cloud-native سبک، سریع و انعطاف پذیر است. Kong Gateway در مقابل برنامه های کاربردی سرویس قرار دارد و به صورت پویا درخواست ها و پاسخ ها را کنترل، تجزیه و تحلیل و مسیریابی می کند. Kong Gateway سیاست‌های ترافیک API را با استفاده از رویکردی انعطاف‌ پذیر، کم‌ کد و مبتنی بر پلاگین پیاده‌سازی می‌کند.

پیش نیاز ها

  • Docker : برای اجرای Kong Gateway و پشتیبانی از پایگاه داده به صورت محلی استفاده می شود.
  • Curl : برای ارسال درخواست به دروازه کنگ استفاده می شود. curl روی اکثر سیستم ها از قبل نصب شده است.
  • Jq : برای پردازش پاسخ های JSON در خط دستور استفاده می شود. اگرچه این ابزار مفید است، اما برای تکمیل وظایف این آموزش ضروری نیست.

-> گام نخست :

راه اندازی Kong gateway با اسکریپت quickstart :

curl -Ls https://get.konghq.com/quickstart | bash

این اسکریپت کانتینرهای Docker را برای Kong Gateway و پایگاه داده پشتیبانی PostgreSQL اجرا می کند. این اسکریپت همچنین یک شبکه Docker برای آن کانتینرها ایجاد می کند تا از طریق آنها ارتباط برقرار کنند

-> گام دوم :

Kong Gateway یک API Admin را در درگاه پیش‌فرض 8001 ارائه می‌کند. Admin API می‌تواند هم برای پرس و جو و هم برای کنترل وضعیت Kong Gateway استفاده شود. دستور زیر Admin API را پرس و جو می کند و header را واکشی می کند

curl --head localhost:8001

اگر دروازه Kong به درستی اجرا شود، با یک کد HTTP 200 پاسخ می دهد، شبیه به زیر:

HTTP/1.1 200 OK Date: Mon, 22 Aug 2022 19:25:49 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive Access-Control-Allow-Origin: * Content-Length: 11063 X-Kong-Admin-Latency: 6 Server: kong/3.1.x

-> گام سوم :

مسیر اصلی Admin API اطلاعات مهمی را در مورد Kong gateway در حال اجرا از جمله اطلاعات شبکه، امنیت و افزونه ارائه می دهد. پیکربندی کامل در کلید پیکربندی سند JSON برگشتی ارائه شده است.

curl -s localhost:8001 | jq '.configuration'

کاربر باید یک پاسخ JSON بزرگ با اطلاعات پیکربندی Kong Gateway دریافت کند.

راه اندازی سرویس ها و مسیر ها

در Kong Gateway، یک سرویس انتزاعی از یک برنامه upstream موجود است. سرویس‌ها می‌توانند مجموعه‌ ای از اشیاء مانند پیکربندی‌های افزونه و خط‌مشی‌ها را ذخیره کنند و می‌توانند با مسیرها مرتبط شوند.

-> سرویس : هنگام تعریف یک سرویس، مدیر یک نام و اطلاعات اتصال برنامه upstream را ارائه می دهد. جزئیات اتصال را می توان در فیلد url به صورت یک رشته یا با ارائه مقادیر جداگانه برای protocol ، host ، port و مسیر به صورت جداگانه ارائه کرد. سرویس های ارتباط یک به چند با برنامه های upstream دارند که به مدیران اجازه می دهد تا رفتارهای مدیریت ترافیک پیچیده ای ایجاد کنند.

-> مسیر: Route مسیری است به یک منبع در یک برنامه Upstream. مسیرها به سرویس ها اضافه می شوند تا امکان دسترسی به برنامه اصلی را فراهم کنند. در Kong Gateway، مسیرها معمولاً به endpoint هایی که از طریق برنامه Kong Gateway در کلاینت قرار می‌گیرند، نگاشت می‌شوند. مسیرها همچنین می‌توانند قوانینی را تعریف کنند که درخواست‌ها را با سرویس‌های مرتبط مطابقت دهد. به همین دلیل، یک مسیر می تواند به چندین endpoint اشاره کند. یک مسیر اصلی باید نام، مسیر یا مسیر هایی داشته باشد و به یک سرویس موجود اشاره کند. با استفاده از مسیر، می توان موارد دیگری را نیز تنظیم کرد. به عنوان مثال :

  • Protocols : پروتکلی که برای ارتباط با برنامه بالادستی استفاده می شود.
  • Hosts: لیست دامنه هایی که با یک مسیر مطابقت دارند
  • Methods: روش‌های HTTP که با یک مسیر مطابقت دارند
  • Headers: لیستی از مقادیری که در سرصفحه یک درخواست انتظار می رود
  • Redirect status codes: کدهای وضعیت HTTPS
  • Tags: مجموعه اختیاری از رشته ها برای گروه بندی مسیرها

در ادامه مدیریت و آزمایش سرویس ها و مسیرها را با استفاده از Kong Gateway Admin API خواهیم داشت. Kong Gateway همچنین گزینه های دیگری را برای مدیریت پیکربندی از جمله Kong Kong Konnect و decK ارائه می دهد.

پس از نصب و راه اندازی خود Kong، مدیریت سرویس ها را شروع می کنیم:

در مرحله اول سرویس را می سازیم و درخواست POST را به سمت ادمین کونگ ارسال می کنیم :

curl -i -s -X POST http://localhost:8001/services \ --data name=example_service \ --data url='http://mockbin.org'

اگر درخواست موفقیت آمیز بود و پاسخ ۲۰۱ دریافت کردیم، خواهیم داشت :

{ &quothost&quot: &quotmockbin.org&quot, &quotname&quot: &quotexample_service&quot, &quotenabled&quot: true, &quotconnect_timeout&quot: 60000, &quotread_timeout&quot: 60000, &quotretries&quot: 5, &quotprotocol&quot: &quothttp&quot, &quotpath&quot: null, &quotport&quot: 80, &quottags&quot: null, &quotclient_certificate&quot: null, &quottls_verify&quot: null, &quotcreated_at&quot: 1661346938, &quotupdated_at&quot: 1661346938, &quottls_verify_depth&quot: null, &quotid&quot: &quot3b2be74e-335b-4f25-9f08-6c41b4720315&quot, &quotwrite_timeout&quot: 60000, &quotca_certificates&quot: null }

به فیلدهایی که به صراحت در درخواست ایجاد ارائه نشده اند، به طور خودکار یک مقدار پیش فرض بر اساس پیکربندی فعلی Kong Gateway داده می شود.

در مرحله دوم، هنگامی که یک سرویس ایجاد می کنید، Kong Gateway یک شناسه منحصر به فرد را همانطور که در پاسخ بالا نشان داده شده است به آن اختصاص می دهد. فیلد شناسه یا نامی که هنگام ایجاد سرویس ارائه می‌شود، می‌تواند برای شناسایی سرویس در درخواست‌های بعدی استفاده شود. این URL سرویس است و به شکل /services/{service name or id} است. برای مشاهده وضعیت فعلی یک سرویس، یک درخواست GET به URL سرویس ارسال می کنیم:

curl -X GET http://localhost:8001/services/example_service

یک درخواست موفق شامل پیکربندی فعلی سرویس در بدنه پاسخ خواهد بود و چیزی شبیه به قطعه زیر خواهد بود:

{ &quothost&quot: &quotmockbin.org&quot, &quotname&quot: &quotexample_service&quot, &quotenabled&quot: true, ... }

در مرحله سوم، تنظیمات سرویس موجود را می توان با ارسال یک درخواست PATCH به URL سرویس به صورت پویا به روز کرد. برای تنظیم پویا تلاش های مجدد سرویس از 5 به 6، این درخواست PATCH را ارسال می کنیم:

curl --request PATCH \ --url localhost:8001/services/example_service \ --data retries=6

بدنه پاسخ شامل پیکربندی کامل سرویس از جمله مقدار به روز شده است:

{ &quothost&quot: &quotmockbin.org&quot, &quotname&quot: &quotexample_service&quot, &quotenabled&quot: true, &quotretries&quot: 6, ... }

و در نهایت مرحله اخر، شما می توانید با ارسال یک درخواست GET به آدرس پایگاه / سرویس ها، تمام خدمات فعلی را فهرست کنید.

curl -X GET http://localhost:8001/services

حال به مدیریت مسیر ها می رسیم:

در گام نخست مسیر ها را می سازیم. مسیرها نحوه پروکسی شدن درخواست ها توسط Kong Gateway را مشخص می کنند. می توانیم با ارسال یک درخواست POST به URL سرویس، مسیری مرتبط با یک سرویس خاص ایجاد می کنیم:

curl -i -X POST http://localhost:8001/services/example_service/routes \ --data 'paths[]=/mock' \ --data name=example_route

اگر عملیات موفق بود با دریافت کد ۲۰۱ خواهیم داشت:

{ &quotpaths&quot: [ &quot/mock&quot ], &quotmethods&quot: null, &quotsources&quot: null, &quotdestinations&quot: null, &quotname&quot: &quotexample_route&quot, &quotheaders&quot: null, &quothosts&quot: null, &quotpreserve_host&quot: false, &quotregex_priority&quot: 0, &quotsnis&quot: null, &quothttps_redirect_status_code&quot: 426, &quottags&quot: null, &quotprotocols&quot: [ &quothttp&quot, &quothttps&quot ], &quotpath_handling&quot: &quotv0&quot, &quotid&quot: &quot52d58293-ae25-4c69-acc8-6dd729718a61&quot, &quotupdated_at&quot: 1661345592, &quotservice&quot: { &quotid&quot: &quotc1e98b2b-6e77-476c-82ca-a5f1fb877e07&quot }, &quotresponse_buffering&quot: true, &quotstrip_path&quot: true, &quotrequest_buffering&quot: true, &quotcreated_at&quot: 1661345592 }

در قدم دوم، مانند سرویس‌ها، وقتی مسیری را ایجاد می‌کنیم، Kong Gateway یک شناسه منحصربه‌فرد به آن اختصاص می‌دهد که در پاسخ بالا نشان داده شده است. فیلد id یا نام ارائه شده هنگام ایجاد مسیر، می تواند برای شناسایی مسیر در درخواست های بعدی استفاده شود. URL مسیر می تواند یکی از شکل های زیر باشد:

/services/{service name or id}/routes/{route name or id} /routes/{route name or id}

برای مشاهده وضعیت کافی است درخواست GET ارسال شود:

curl -X GET http://localhost:8001/services/example_service/routes/example_route

که پاسخی مشابه پاسخ زیر را می بایست دریافت کنیم:

{ &quotpaths&quot: [ &quot/mock&quot ], &quotmethods&quot: null, &quotsources&quot: null, &quotdestinations&quot: null, &quotname&quot: &quotexample_route&quot, &quotheaders&quot: null, &quothosts&quot: null, &quotpreserve_host&quot: false, &quotregex_priority&quot: 0, &quotsnis&quot: null, &quothttps_redirect_status_code&quot: 426, &quottags&quot: null, &quotprotocols&quot: [ &quothttp&quot, &quothttps&quot ], &quotpath_handling&quot: &quotv0&quot, &quotid&quot: &quot189e0a57-205a-4f48-aec6-d57f2e8a9985&quot, &quotupdated_at&quot: 1661347991, &quotservice&quot: { &quotid&quot: &quot3b2be74e-335b-4f25-9f08-6c41b4720315&quot }, &quotresponse_buffering&quot: true, &quotstrip_path&quot: true, &quotrequest_buffering&quot: true, &quotcreated_at&quot: 1661347991 }

در مرحله سوم، مانند سرویس ها، مسیرها را می توان با ارسال یک درخواست PATCH به URL مسیر به صورت پویا به روز کرد.

Tag ها مجموعه ای اختیاری از رشته ها هستند که می توانند با مسیر گروه بندی و فیلتر کردن مرتبط شوند. شما می توانید با ارسال یک درخواست PATCH به نقطه پایانی سرویس ها و تعیین یک مسیر، Tag ها را اختصاص دهید. دستورات به روز رسانی :

curl --request PATCH \ --url localhost:8001/services/example_service/routes/example_route \ --data tags=&quottutorial&quot

و در نهایت Admin API همچنین از لیست تمام مسیرهایی که در حال حاضر پیکربندی شده اند پشتیبانی می کند:

curl http://localhost:8001/routes

این درخواست یک کد وضعیت HTTP 200 و یک آرایه پاسخ JSON را با همه مسیرهای پیکربندی شده در این نمونه Kong gateway برمی گرداند. پاسخ باید به شکل زیر باشد:

{ &quotnext&quot: null, &quotdata&quot: [ { &quotpaths&quot: [ &quot/mock&quot ], &quotmethods&quot: null, &quotsources&quot: null, &quotdestinations&quot: null, &quotname&quot: &quotexample_route&quot, &quotheaders&quot: null, &quothosts&quot: null, &quotpreserve_host&quot: false, &quotregex_priority&quot: 0, &quotsnis&quot: null, &quothttps_redirect_status_code&quot: 426, &quottags&quot: [ &quottutorial&quot ], &quotprotocols&quot: [ &quothttp&quot, &quothttps&quot ], &quotpath_handling&quot: &quotv0&quot, &quotid&quot: &quot52d58293-ae25-4c69-acc8-6dd729718a61&quot, &quotupdated_at&quot: 1661346132, &quotservice&quot: { &quotid&quot: &quotc1e98b2b-6e77-476c-82ca-a5f1fb877e07&quot }, &quotresponse_buffering&quot: true, &quotstrip_path&quot: true, &quotrequest_buffering&quot: true, &quotcreated_at&quot: 1661345592 } ] }

محدود سازی درخواست ها

محدودیت نرخ برای کنترل نرخ درخواست های ارسال شده به یک سرویس upstream استفاده می شود. می توان از آن برای جلوگیری از حملات DoS، محدود کردن خراش وب و سایر اشکال استفاده بیش از حد استفاده کرد. بدون محدودیت نرخ، مشتریان دسترسی نامحدودی به خدمات upstream دارند که ممکن است بر در دسترس بودن تأثیر منفی بگذارد.

برای فعال سازی پلاگین محدود سازی، مطابق دستورات پیش می رویم:

افزونه محدود کننده نرخ به طور پیش‌فرض روی Kong Gateway نصب می‌شود و می‌توان آن را با ارسال یک درخواست POST به شی پلاگین در Admin API فعال کرد:

curl -i -X POST http://localhost:8001/plugins \ --data name=rate-limiting \ --data config.minute=5 \ --data config.policy=local

این دستور به Kong Gateway دستور داده است که حداکثر 5 درخواست در دقیقه به ازای هر آدرس IP مشتری برای همه مسیرها و خدمات اعمال کند. پاسخی خواهید دید که حاوی پیکربندی جدید افزونه است، از جمله اطلاعات شناسایی مشابه:

&quotid&quot: &quotfc559a2d-ac80-4be8-8e43-cb705524be7f&quot, &quotname&quot: &quotrate-limiting&quot, &quotenabled&quot: true

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

دستور زیر را برای ارسال سریع 6 درخواست ساختگی اجرا می کنیم:

for _ in {1..6}; do curl -s -i localhost:8000/mock/request; echo; sleep 1; done

پس از دستورات بالا می بایست ارور دریافت کنیم:

{ &quotmessage&quot: &quotAPI rate limit exceeded&quot }

ویژگی ها و راه اندازی Key Authentication:

احراز هویت فرایندی است برای تایید اینکه درخواست کننده مجوز دسترسی به یک منبع را دارد. همانطور که از نام آن پیداست، احراز هویت API gateway جریان داده ها را به و از سرویس های upstream شما تایید می کند.

با کنترل احراز هویت Kong Gateway، درخواست‌ها به سرویس‌های upstream نمی‌رسند مگر اینکه مشتری با موفقیت احراز هویت را انجام داده باشد. این بدان معناست که خدمات upstream درخواست‌های از پیش مجاز را پردازش می‌کنند و آنها را از هزینه احراز هویت آزاد می‌کند، که باعث صرفه‌جویی در زمان محاسبه و تلاش توسعه می‌شود.

Kong Gateway در تمام تلاش‌های احراز هویت قابل مشاهده است، که توانایی ایجاد قابلیت‌های نظارت و هشدار برای پشتیبانی از در دسترس بودن و انطباق سرویس را فراهم می‌کند. احراز هویت کلید در دروازه Kong با استفاده از Customer Object کار می کند. کلیدها به مصرف‌کنندگان اختصاص داده می‌شوند و برنامه‌های مشتری کلید را در درون درخواست‌هایی که می‌کنند ارائه می‌کنند. برای راه اندازی با ساخت یک مشتری به نام لوکا شروع می کنیم:

curl -i -X POST http://localhost:8001/consumers/ \ --data username=luka

در گام بعدی کلید به مشتری اختصاص می یابد:

curl -i -X POST http://localhost:8001/consumers/luka/key-auth \ --data key=top-secret-key

ویژگی ها و راه اندازی Load Balancing :

تعادل بار روشی برای توزیع ترافیک درخواست API در چندین سرویس upstream است. تعادل بار پاسخگویی کلی سیستم را بهبود می بخشد و با جلوگیری از بارگذاری بیش از حد منابع فردی، خرابی ها را کاهش می دهد. در مثال زیر، از یک برنامه کاربردی استفاده می‌کنید که در دو سرور مختلف یا اهداف بالادستی مستقر شده است. Kong Gateway باید تعادل را در هر دو سرور بارگذاری کند، به طوری که اگر یکی از سرورها در دسترس نباشد، به طور خودکار مشکل را شناسایی کرده و تمام ترافیک را به سرور در حال کار هدایت کند. upstream به برنامه‌های سرویسی اشاره دارد که پشت Kong gateway قرار دارند و درخواست‌های مشتری به آن‌ها ارسال می‌شوند. در Kong Gateway، یک upstream یک نام میزبان مجازی را نشان می‌دهد و می‌تواند برای بررسی سلامت، قطع مدار، و بارگذاری درخواست‌های ورودی از طریق چندین سرویس بک اند هدف استفاده شود.

برای راه اندازی ابتدا یک upstream می سازیم:

curl -X POST http://localhost:8001/upstreams \ --data name=example_upstream

سپس دو target را مشخص کرده و سرویس endpoint backend را قرار می دهیم :

curl -X POST http://localhost:8001/upstreams/example_upstream/targets \ --data target='mockbin.org:80' curl -X POST http://localhost:8001/upstreams/example_upstream/targets \ --data target='httpbin.org:80'

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

curl -X PATCH http://localhost:8001/services/example_service \ --data host='example_upstream'

جمع بندی

در ابتدا به معرفی Kong gateway پرداختیم و قسمت های مختلف آن را شناختیم، در ادامه به بررسی ویژگی ها، نحوه کارکرد و مزایای ابزار های مختلف Kong اشاره شد تا بدانیم چه استفاده ای می توان از این ابزار قدرتمند کرد. در نهایت مختصری به نحوه نصب و راه اندازی ویژگی های اصلی و پلاگین های Kong اشاره کردیم.


. تحقیق توسط (به تریتب حروف الفبا) حسام اثنی عشری، عطا رحیم‌زاده، شایان شعبانزاده، امیررضا قاسمی ویسی برای درس طراحی وب استاد جعفرنژاد ، نیمسال اول 1401 دانشگاه صنعتی شریف انجام شده است.

kong api gatewaymicro servicesapi gatewayback enddevops
شاید از این پست‌ها خوشتان بیاید