कुबेरनेट्स में कंटेनर पोर्ट और लक्ष्यपोर्ट के बीच अंतर?
कुबेरनेट्स में एक कंटेनर container port
से कैसे अलग है targetports
? क्या वे परस्पर उपयोग किए जाते हैं, यदि ऐसा है तो क्यों?
मैं नीचे दिए गए कोड स्निपेट में आया था, जहां कुबेरनेट्स में एक फली पर containerPort
निरूपित करने के लिए उपयोग किया जाता है port
।
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
labels:
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-pod
labels:
name: postgres-pod
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres:9.4
ports:
- containerPort: 5432
उपरोक्त कोड स्निपेट में, उन्होंने containerPort
पैरामीटर के लिए 5432 दिए हैं (अंतिम पंक्ति में)। तो, यह कैसे containerPort
अलग है targetport
?
जहाँ तक मुझे पता है, अवधि port
सामान्य रूप में को संदर्भित करता है port
पर service
(Kubernetes)। अगर मैं गलत हूं तो मुझे सुधारो।
जवाब
संक्षेप में: targetPort
और containerPort
मूल रूप से एक ही बंदरगाह का उल्लेख है (इसलिए यदि दोनों का उपयोग किया जाता है तो उनसे समान मूल्य की उम्मीद की जाती है) लेकिन उनका उपयोग दो अलग-अलग संदर्भों में किया जाता है और पूरी तरह से अलग उद्देश्य होते हैं।
उनका उपयोग इंटरचेंज के रूप में नहीं किया जा सकता है क्योंकि दोनों दो अलग-अलग कुबेरनेट संसाधनों / वस्तुओं के विनिर्देशन के भाग हैं: Service
और Pod
क्रमशः। जबकि containerPort
विशुद्ध रूप से सूचनात्मक के रूप में माना जा सकता है, के targetPort
उद्देश्य से आवश्यक है, Service
जिसमें से एक सेट को उजागर करता है Pods
।
यह समझना महत्वपूर्ण है कि containerPort
आपके Pod
/ Deployment
विनिर्देश में विशिष्ट मूल्य के साथ घोषित करने से आप Pod
इस विशिष्ट पोर्ट को उजागर करने के लिए नहीं बना सकते हैं जैसे कि यदि आप containerPort
क्षेत्र में घोषणा करते हैं कि आपका नगनेक्स डिफ़ॉल्ट के बजाय Pod
पोर्ट को उजागर करता है , तो आपको अभी भी अपने कंटेनर में अपने nginx सर्वर को कॉन्फ़िगर करने की आवश्यकता है इस बंदरगाह पर सुनने के लिए।8080
80
विनिर्देशन containerPort
में घोषणा Pod
वैकल्पिक है। यहां तक कि इसके बिना भी Service
आपको पता चल जाएगा कि उसके द्वारा घोषित जानकारी के आधार पर अनुरोध को कहां निर्देशित करना है targetPort
।
यह याद रखना अच्छा है कि परिभाषा targetPort
में घोषित करने की आवश्यकता नहीं है Service
। यदि आप इसे छोड़ देते हैं, तो यह आपके द्वारा घोषित मूल्य port
(जो Service
स्वयं का बंदरगाह है) के लिए चूक जाता है ।
फली कल्पना में कंटेनरपार्ट
कंटेनर से उजागर करने के लिए बंदरगाहों की सूची। यहां एक पोर्ट एक्सपोज करने से सिस्टम को कंटेनर कनेक्शन के नेटवर्क कनेक्शन के बारे में अतिरिक्त जानकारी मिलती है, लेकिन यह मुख्य रूप से सूचनात्मक है। यहां पोर्ट निर्दिष्ट नहीं किया जा रहा है, उस पोर्ट को उजागर होने से नहीं रोकता है
लक्ष्य सेवा में कल्पना
सेवा द्वारा लक्षित पॉड्स पर पहुंचने के लिए पोर्ट का नंबर या नाम। नंबर 1 से 65535 की सीमा में होना चाहिए। नाम IANA_SVC_NAME होना चाहिए। यदि यह एक तार है, तो इसे लक्ष्य पॉड के कंटेनर बंदरगाहों में नामित बंदरगाह के रूप में देखा जाएगा। यदि यह निर्दिष्ट नहीं है, तो 'पोर्ट' फ़ील्ड के मान का उपयोग किया जाता है (एक पहचान मानचित्र)।
इसलिए targetPort
सेवा containerPort
में फली की कल्पना से मेल खाना चाहिए क्योंकि इस सेवा को पता है कि यातायात को आगे बढ़ाने के लिए कौन सा कंटेनर बंदरगाह है।