یکی از مفاهیم جالب Kubernetes که معمولا درکش هم برای بار اول خیلی یجوریه و اذیت کنندس و باید چنتا سایت و داکیومنت رو خوند تا قشنگ فهمید موضوع Headless Service هستش و این که Service همیشه قرار نیست ترافیک رو بین Podها پخش کنه.
مثلا اگه سه تا Pod داشته باشیم که پشت یک Service قرار گرفته باشن، وقتی Application به اون Service وصل میشه، معمولا Service درخواست رو به یکی از Podها میرسونه.
ولی حالا ممکنه شرایطی پیش بیاد که Application بخواد IP تک تک Podها رو بدونه و مستقیم با هرکدوم یه ارتباطی برقرار کنه، مثلا توی بعضی سیستم ها مثل کافکا یا clickhouse لازمه خب که اعضای خودشون رو بشناسن و با هر Node بهصورت جداگانه ارتباط داشته باشن و ... که اینجا Service معمولی خیلی مناسب نیست.
یکی از راهاش اینه که بریم سراغ Kubernetes API و از اونجا لیست Podها و IPهاشون رو بگیریم بعد دونه دونه هرکار میخوایم بکنیم، ولی خب این یعنی Application ما باید Kubernetes رو بشناسه و مستقیم با API Server کار کنه.
راه تمیزترش میشه همون Headless Service .
توی حالت نرمال، DNS مربوط به یک Service، آدرس ClusterIP رو برمیگردونه، ولی وقتی Service رو Headless میکنیم، با نوشتن:
clusterIP: None
دیگه Kubernetes برای اون Service یک ClusterIP نمیذاره، بجاش وقتی Application از طریق DNS اون Service رو Lookup میکنه، DNS میتونه IP خود Podهای پشت Service رو برگردونه، حالا Application خودش تصمیم میگیره با کدوم Pod ارتباط برقرار کنه با یکی، چندتا یا همشون.
پس تفاوت مهمی که اینجا هست اینه که:
کوبر برای Service معمولی یه آیپی ثابت میده، خودشم یکی از Podها رو انتخاب میکنه و ...
ولی برای Headless Service دیگه Load Balancing انجام نمیده، آیپی Podهای پشت این Service رو بهمون میده، دیگه بقیش با خودمونه که چکار کنیم باهاش.
@DevTwitter | <S.M.Sadegh Raeeskarami/>
Post #12875
6.37K
- ❤ 25
- 👍 7
- 👎 1