Skip to main content

Kong Api Gateway

در این مستند نحوه‌ی راه‌اندازی Kong Api Gateway با استفاده از دارکوب را به شما آموزش می‌دهیم. برای این مستند Kong را در حالت DB-less (که نیازی به دیتابیس ندارد) بالا می‌آوریم. در صورت نیاز به حالت دیتابیس‌دار، باید دیتابیس مربوطه (مثلا PostgreSQL) را جداگانه بالا بیاوریم و Kong را به آن وصل کنیم.

برای این کار باید یک اپ از نوع داکری بسازیم. ابتدا ایمیج داکر مربوط به Kong Api Gateway را پیدا می‌کنیم. برای این کار پس از جستجو در داکرهاب به ایمیج رسمی Kong می‌رسیم. به جای استفاده از تگ latest توصیه می‌کنیم که از tagای مشخص استفاده کنید که در صورت آپدیت شدن ایمیج در آینده با مشکلی مواجه نشویم.

انتخاب ایمیج kong
انتخاب ایمیج kong

در ادامه‌ی ساخت اپ باید کانفیگهای لازم را با توجه به داکر ایمیج Kong کنیم. برای نمونه در عکسهای زیر کانفیگی نمونه آمده است:

اطلاعات عمومی Kong
اطلاعات عمومی Kong

لیست متغیرهای محیطی مورد نیاز را می‌توان از صفحه‌اش در داکرهاب یا مستندات مربوط به خود Kong پیدا کرد. متغیرهای مهمتر در این باره KONG_DATABASE و KONG_DECLARATIVE_CONFIG هستند.

متغیرهای محیطی Kong
متغیرهای محیطی Kong

برای اینکه Kong از بیرون کلاستر قابل دسترسی باشد باید از طریق LoadBalancer به بیرون از کلاستر expose شود. یعنی تیک «اپ آی‌پی خارجی داشته باشد» باید انتخاب شده باشد. در این صورت هر کسی با داشتن ip و port می‌تواند به آن وصل شود. بنابراین امنیت دسترسی به اندپوینتها و لزوم وجود پسورد برای اندپوینتهای admin api (با وجود Read-Only بودن) مهم می‌شود.

پورتهای Kong
پورتهای Kong

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

de17cfa7-08c8-4450-a9b3-3450dfff20e6.hsvc.ir:30235 می‌توان به پورت admin (8001) دسترسی پیدا کرد.

پورتهای خارجی Kong
پورتهای خارجی Kong

در قسمت آدرس هاست می‌توانیم یک زیردامنه‌ی رایگان دلخواه روی darkube.app ست کنیم و گواهی رایگان ssl هم داشته باشیم. ترافیک به پورت با نام http هدایت می‌شود.

آدرس هاست Kong
آدرس هاست Kong

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

کانفیگ سفارشی Kong
کانفیگ سفارشی Kong

کانفیگ نمونه‌ی زیر به این معناست که محتوای فایل

config/kong.yml در داخل کانتینر Kong برابر با مقدار XYZ باشد.

{
"configmap": {
"enabled": true,
"path": "/config",
"defaultMode": 420,
"value": {
"kong.yml": "XYZ"
}
}
}

نکته‌ی قابل توجه این است که (فعلا) امکان دادن فایل کانفیگ به فرمت yaml در کنسول هم‌روش وجود ندارد و باید این فایل به شکل escape شده در (قسمت "kong.yml") Custom Config قرار بگیرد. برای این تبدیل فرمت yaml می‌توانید از سایت زیر استفاده کنید: yaml to json converter

برای سادگی کار شما، در سایت بالا به جای kong.yml فایل کانفیگ خود را قرار دهید و خروجی json را در قسمت Custom Config دارکوب ذخیره کنید.

configmap:
enabled: true
path: "/config"
defaultMode: 420
value:
kong.yml: |-
_format_version: "1.1"
services:
- name: my-service
url: https://example.com
routes:
- name: my-route
paths:
- /

در صورت نیاز و برای دسترسی بیشتر می‌توانید از طریق کلاینت Kubectl و توضیحات موجود در صفحه‌ی مستند دسترسی kubectl به اپ خود وصل شوید.