mahdibahramih
mahdibahramih
خواندن ۴ دقیقه·۴ سال پیش

سرویس ها تو کوبرنتیز ۲

خب مثل بقیه پست هایی که تو ویرگول(یا هر جایی دیگه) مینویسم همین اول اعلام کنم که این نوشته ممکنه کلی کم و کاستی داشته باشه (نگارشی٬فنی ...) بابتش عذر میخوام ولی امیدوارم که قابل استفاده باشه.

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

تو نوشته قبلی سعی کردم به طور خلاصه مفهوم کلی سرویس ها و موارد استفاده شون رو براتون شرح بدم. حالا تو این نوشته قصد دارم انواع سرویس هارو معرفی کنم

انواع سرویس ها

سرویس ها تو کوبرنتیز سه نوع هستن Cluster ip , Node Port , Load Balancer حالا به طور خلاصه درباره هر کدوم یکم توضیح میدم

1- Cluster ip:

ما از این نوع سرویس تو نوشته قبل استفاده کردیم. از این نوع سرویس برای دسترسی به پاد ها داخل کلاستر استفاده میشه. به طور ساده تر ما اگه pod داشته باشیم که بخواییم داخل کلاستر قابل دسترسی باشه از این نوع استفاده میکنیم که هم با ip و هم با name قابل دسترسیه.

2- Node port:

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

در حالت کلی با ساخت سرویس با type Node port یه پورت رندوم ( یا تعیین شده ) بالای 30000 روی همه نود ها به صورت listen در میاد و ترافیک رسیده به این پورت ها به سرویس ما هدایت میشه. مثل شکل زیر


خب تصور کنید که ما یه کلاستر کوبر داریم با یک مستر و دو ورکر که ip های این ماشین ها به این صورته :‌

master ip : 10.10.10.1

worker 1 ip : 10.10.10.2

worker 2 ip : 10.10.10.3

خب حالا ما یک سرویس از نوع node port با کانفیگ زیر میسازیم که مثل قبل به پاد nginx ما وصله




apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
spec:
type: NodePort
ports:
- port: 3036
nodePort: 30036
selector:
app: nginx




خب حالا ما یه سرویس از نوع node port داریم و این جوری کار میکنه که پورت ۳۰۰۳۶ همه نود های ما به صورت listen در میان و ترافیکی که بیاد به این پورت هدایت میشه به pod nginx ما و ما میتونیم nginx مون رو ببینیم . یکم ساده ترش میشه اینکه اگه ما تو browser مون هر کدوم از ip های نود هامون رو بزنیم با پورت ۳۰۰۳۶ (مثال 10.10.10.2:30036 ) صفحه nginx مون رو میبینیم.

خب اینم از این :) . سرویس nodeport ساده ترین روش واسه expose کردن app مون به دنیای واقعی بیرونه اما خب یه سری مشکلات هم داره.
بزرگترین مشکلش هم اینه که حالا ما اومدیم یه وب سایتی ساختیم میخواییم بدیم دست ملت برن ببیننش.
خب دامین مستقیم که نمیتونیم ست کنیم چون دامین مستقیم به ip و پورت ۸۰ مپ میشه ولی تو این جریان پورت ما فرق داره . باید به مشتری (‌کاربر) بگیم بی زحمت این پورت و حفظ کن هر وقت خواستی بیای وب سایت ما این پورت رو هم ته ادرس ما بزن :) که خوب خیلی ضایع است ....


3- Load Balancer

معمولا این نوع سرویس واسه ما که تو ایران کار و زندگی میکنیم یکم غریبه . حالا چرا ؟ چون ما به خاطر شرایطی که تو کشورمون داریم دسترسی به cloud provider های بزرگ دنیا خیلی سخته ( شاید غیر ممکن با این شرایط جدید که گوگل ایجادش کرده). و معمولا این نوع سرویس نیازمند یه سری ملزوماته که هر cloud provider اومده اونو واسه زیر ساخت خودش ایجاد کرده حالا این وسط یه سری ابزار های open source ای هم ایجاد شدن که میشه با پیاده سازیشون با یکم دردسر یه این نوع سرویس روی bare metal ( یا vm ) دسترسی داشت که تو پست های اینده دربارشون میگم براتون.

زیاد حاشیه رفتیم برگردم سر اصل داستان. این سرویس چیه ؟
سرویس load balancer ( تو cloud provider )‌ این جوریه که شما میای یه سرویس از این نوع میسازی مثل این:




apiVersion: v1
kind: Service
metadata:
name: loadbalancer-nginx
spec:
selector:
app: nginx
ports:
- port: 80
type: LoadBalancer



نتیجه اینه که به این سرویس یه ip public معتبر اختصاص داده میشه و شما با زدن اون ip از کل دنیا میتونید nginx خودتون و ببینید.

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


تو این نوشته سعی کردم یه دید کلی از سرویس ها بهتون بدم . امیدوارم که مفید بوده باشه. مثل قبل اگه جایی واستون نا مفهوم بود اصلا نگران نباشید٬ به گیرنده هاتون دست نزنید مشکل از فرستنده است:)‌

سوال ها و نظراتتون رو کامنت کنید من حتما جواب میدم:)


devopscloudk8s
دوآپسی خرد و ریز، علاقه مند به یادگیری هر چی که هست و نیست.
شاید از این پست‌ها خوشتان بیاید