कुबेरनेट्स में कंटेनर पोर्ट और लक्ष्यपोर्ट के बीच अंतर?

Aug 17 2020

कुबेरनेट्स में एक कंटेनर 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)। अगर मैं गलत हूं तो मुझे सुधारो।

जवाब

4 mario Aug 18 2020 at 16:17

संक्षेप में: targetPort और containerPortमूल रूप से एक ही बंदरगाह का उल्लेख है (इसलिए यदि दोनों का उपयोग किया जाता है तो उनसे समान मूल्य की उम्मीद की जाती है) लेकिन उनका उपयोग दो अलग-अलग संदर्भों में किया जाता है और पूरी तरह से अलग उद्देश्य होते हैं।

उनका उपयोग इंटरचेंज के रूप में नहीं किया जा सकता है क्योंकि दोनों दो अलग-अलग कुबेरनेट संसाधनों / वस्तुओं के विनिर्देशन के भाग हैं: Serviceऔर Podक्रमशः। जबकि containerPortविशुद्ध रूप से सूचनात्मक के रूप में माना जा सकता है, के targetPortउद्देश्य से आवश्यक है, Serviceजिसमें से एक सेट को उजागर करता है Pods

यह समझना महत्वपूर्ण है कि containerPortआपके Pod/ Deploymentविनिर्देश में विशिष्ट मूल्य के साथ घोषित करने से आप Podइस विशिष्ट पोर्ट को उजागर करने के लिए नहीं बना सकते हैं जैसे कि यदि आप containerPortक्षेत्र में घोषणा करते हैं कि आपका नगनेक्स डिफ़ॉल्ट के बजाय Podपोर्ट को उजागर करता है , तो आपको अभी भी अपने कंटेनर में अपने nginx सर्वर को कॉन्फ़िगर करने की आवश्यकता है इस बंदरगाह पर सुनने के लिए।808080

विनिर्देशन containerPortमें घोषणा Podवैकल्पिक है। यहां तक ​​कि इसके बिना भी Serviceआपको पता चल जाएगा कि उसके द्वारा घोषित जानकारी के आधार पर अनुरोध को कहां निर्देशित करना है targetPort

यह याद रखना अच्छा है कि परिभाषा targetPortमें घोषित करने की आवश्यकता नहीं है Service। यदि आप इसे छोड़ देते हैं, तो यह आपके द्वारा घोषित मूल्य port(जो Serviceस्वयं का बंदरगाह है) के लिए चूक जाता है ।

2 ArghyaSadhu Aug 17 2020 at 10:05

फली कल्पना में कंटेनरपार्ट

कंटेनर से उजागर करने के लिए बंदरगाहों की सूची। यहां एक पोर्ट एक्सपोज करने से सिस्टम को कंटेनर कनेक्शन के नेटवर्क कनेक्शन के बारे में अतिरिक्त जानकारी मिलती है, लेकिन यह मुख्य रूप से सूचनात्मक है। यहां पोर्ट निर्दिष्ट नहीं किया जा रहा है, उस पोर्ट को उजागर होने से नहीं रोकता है

लक्ष्य सेवा में कल्पना

सेवा द्वारा लक्षित पॉड्स पर पहुंचने के लिए पोर्ट का नंबर या नाम। नंबर 1 से 65535 की सीमा में होना चाहिए। नाम IANA_SVC_NAME होना चाहिए। यदि यह एक तार है, तो इसे लक्ष्य पॉड के कंटेनर बंदरगाहों में नामित बंदरगाह के रूप में देखा जाएगा। यदि यह निर्दिष्ट नहीं है, तो 'पोर्ट' फ़ील्ड के मान का उपयोग किया जाता है (एक पहचान मानचित्र)।

इसलिए targetPortसेवा containerPortमें फली की कल्पना से मेल खाना चाहिए क्योंकि इस सेवा को पता है कि यातायात को आगे बढ़ाने के लिए कौन सा कंटेनर बंदरगाह है।