خدمات Kubernetes: درک NodePort و ClusterIP
به مجموعه وبلاگ من در CK 2024 خوش آمدید! این نهمین پست از این سری است که در آن به خدمات مختلف Kubernetes مانند ClusterIP، NodePort، ExternalName و LoadBalancer می پردازیم. در این پست، نحوه عملکرد این سرویس ها و اهمیت آنها در محیط Kubernetes را بررسی خواهیم کرد.
خلاصه از پست های قبلی
در آخرین پست خود، ReplicaSets، ReplicationControllers و Deployments را مورد بحث قرار دادیم. ما یاد گرفتیم که چگونه یک استقرار با پادهای متعدد در حال اجرا یک برنامه فرانت اند Nginx ایجاد کنیم. با این حال، ما این استقرار را در معرض کاربران خارجی قرار ندادیم، این همان چیزی است که امروز با استفاده از خدمات Kubernetes روی آن تمرکز خواهیم کرد.
معرفی خدمات Kubernetes
سرویس های Kubernetes ارتباط بین اجزای مختلف را در داخل و خارج از یک خوشه Kubernetes امکان پذیر می کند. آنها راهی برای نمایش برنامههای در حال اجرا بر روی مجموعهای از پادها، اطمینان از پایداری آدرسهای IP و بارگیری ترافیک تعادل در چندین پاد فراهم میکنند. انواع اصلی خدمات در Kubernetes عبارتند از:
- ClusterIP
- NodePort
- نام خارجی
- متعادل کننده بار
چرا از خدمات Kubernetes استفاده کنیم؟
سرویسها در Kubernetes باعث میشوند که مؤلفههای برنامه شما بهطور ضعیفی جفت شوند و به آنها اجازه میدهند به طور مؤثر با یکدیگر ارتباط برقرار کنند و برای کاربران خارجی قابل دسترسی باشند. آنها اطمینان حاصل می کنند که غلاف های شما، که می توانند به صورت پویا ایجاد و از بین بروند، همیشه در دسترس هستند.
سرویس NodePort
یک سرویس NodePort برنامه شما را در یک پورت ثابت در آدرس IP هر گره نشان می دهد. این سرویس به کاربران خارجی اجازه می دهد تا با درخواست آدرس IP گره و NodePort به برنامه شما دسترسی داشته باشند.
NodePort چگونه کار می کند
بیایید بگوییم که یک برنامه front-end داریم که روی یک پاد اجرا می شود. ما می خواهیم این برنامه را به صورت خارجی در معرض دید قرار دهیم. ما این کار را با ایجاد یک سرویس NodePort انجام می دهیم:
- NodePort: یک پورت استاتیک در IP هر گره (مثلاً 30001).
- بندر: پورتی که توسط سرویس درون خوشه در معرض دید قرار می گیرد (مثلاً 80).
- TargetPort: پورتی که برنامه در داخل پاد روی آن اجرا می شود (مثلاً 80).
جریان ترافیک به شرح زیر خواهد بود:
کاربر خارجی -> Node IP -> Service Port -> TargetPort (پاد برنامه)
NodePort YAML مثال
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
labels:
env: demo
spec:
type: NodePort
selector:
env: demo
ports:
- port: 80
targetPort: 80
nodePort: 30001
ایجاد سرویس با استفاده از:
kubectl apply -f nodeport.yaml
ایجاد سرویس را تأیید کنید:
kubectl get svc
شما باید سرویس را با پورت های ClusterIP، NodePort و هدف آن مشاهده کنید.
سرویس ClusterIP
یک سرویس ClusterIP نوع سرویس پیش فرض در Kubernetes است. این یک آدرس IP داخلی پایدار را فراهم می کند که فقط در داخل خوشه قابل دسترسی است. این سرویس برای ارتباط داخلی بین پادهای مختلف استفاده می شود.
ClusterIP چگونه کار می کند
ClusterIP به برنامه جلویی شما اجازه می دهد تا با سرویس ها یا پایگاه های داده پشتیبان بدون قرار گرفتن در معرض شبکه های خارجی ارتباط برقرار کند. هنگامی که یک سرویس ClusterIP ایجاد می کنید، Kubernetes یک آدرس IP داخلی به آن اختصاص می دهد و قوانین مسیریابی را برای هدایت ترافیک به پادهای مناسب تنظیم می کند.
نمونه ClusterIP YAML
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
labels:
app: my-app
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
ایجاد سرویس با استفاده از:
kubectl apply -f clusterip.yaml
ایجاد سرویس را تأیید کنید:
kubectl get svc
باید این سرویس را با ClusterIP و پورت های آن مشاهده کنید.
نتیجه
درک و پیکربندی صحیح سرویس ها برای مدیریت ارتباطات در یک خوشه Kubernetes بسیار مهم است. خدمات NodePort و ClusterIP اهداف متفاوتی را دنبال می کنند، اما هر دو برای ساخت برنامه های کاربردی مقیاس پذیر و قوی ضروری هستند.
در پست بعدی، بیشتر به دستورات و فضاهای نام چند کانتینر خواهیم پرداخت. گوش به زنگ باشید!
برای مراجعه بیشتر، ویدیوی دقیق یوتیوب را اینجا ببینید:
https://www.youtube.com/watch?v=tHAQWLKMTB0