কুবারনেটস পরিষেবা সংজ্ঞাতে টার্গেটপোর্ট এবং পোর্টের মধ্যে পার্থক্য


130

একজন Kubernetes Serviceএকটি থাকতে পারে targetPortএবং portসেবা সংজ্ঞা:

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

portএবং এর মধ্যে পার্থক্য কী targetPort?


আপনি এই প্রশ্ন পাঠাতে পারেন stackoverflow.com/questions/41963433/...
আদিত্য Pawaskar

উত্তর:


81

পরিষেবা: এটি কোনও পোডের দিকে ট্র্যাফিকের নির্দেশ দেয়।

টার্গেটপোর্ট: এটি প্রকৃত বন্দর যা আপনার অ্যাপ্লিকেশনটি ধারকটির অভ্যন্তরে চলছে।

পোর্ট: কিছু সময় আপনার পাত্রে থাকা অ্যাপ্লিকেশনটি বিভিন্ন বন্দরে বিভিন্ন পরিষেবা পরিবেশন করে।

উদাহরণ: প্রকৃত অ্যাপ্লিকেশন চলতে পারে 8080এবং এই অ্যাপ্লিকেশনটির জন্য স্বাস্থ্য পরীক্ষাগুলি 8089পাত্রে বন্দরে চালানো যেতে পারে । সুতরাং আপনি যদি পোর্ট ছাড়াই পরিষেবাটি হিট করেন তবে এটি জানে না যে এটি ধারকটির কোনও বন্দরটি অনুরোধটি পুনর্নির্দেশ করবে। পরিষেবাটির একটি ম্যাপিং থাকা দরকার যাতে এটি ধারকটির নির্দিষ্ট পোর্টটিতে আঘাত করতে পারে।

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      nodePort: 30475
      port: 8089
      protocol: TCP
      targetPort: 8080
    - name: metrics
      nodePort: 31261
      port: 5555
      protocol: TCP
      targetPort: 5555
    - name: health
      nodePort: 30013
      port: 8443
      protocol: TCP
      targetPort: 8085 

আপনি যদি my-service:8089ট্র্যাফিকটিকে আঘাত করেন তবে ট্র্যাফিকটি 8080ধারকটির (টার্গেটপোর্ট) রাউটিং করা হবে। একইভাবে, আপনি যদি আঘাত করেন my-service:8443তবে এটি 8085পাত্রে পুনর্নির্দেশ করা হবে (টার্গেটপোর্ট)। তবে myservice:8089এটি কুবেরনেটস ক্লাস্টারের অভ্যন্তরীণ এবং যখন কোনও অ্যাপ্লিকেশন অন্য অ্যাপ্লিকেশনটির সাথে যোগাযোগ করতে চায় তখন ব্যবহার করা যেতে পারে। সুতরাং ক্লাস্টারের বাইরে থেকে পরিষেবাটি আঘাত করতে কারও কারও কাছে হোস্ট মেশিনে বন্দরটি উন্মোচন করা দরকার যার উপর কুবার্নিট চলমান রয়েছে যাতে ট্রাফিকটি ধারকটির একটি বন্দরে পুনর্নির্দেশ করা হয়। এটি node port(হোস্ট মেশিনে পোর্ট উন্মুক্ত)। উপরের উদাহরণ থেকে, আপনি ক্লাস্টারের বাইরে থেকে পরিষেবাটি পোস্ট করতে পারেন (পোস্টম্যান বা অন্য কোনও ক্লায়েন্ট) দ্বারাhost_ip:nodePort

আপনার হোস্ট মেশিনের আইপি হয় বলুন 10.10.20.20আপনি HTTP, মান, স্বাস্থ্য সেবার মারতে পারেন 10.10.20.20:30475, 10.10.20.20:31261, 10.10.20.20:30013

সম্পাদনা: র‌্যাডওয়াল্ড মন্তব্য অনুসারে সম্পাদিত ।


4
সুবিধাটি কীসের অনুমতি দিচ্ছে portএবং targetPortআলাদা হতে পারে? সুতরাং উদাহরণস্বরূপ আপনার healthউদাহরণের দিকে তাকানোর port 8443পরিবর্তে কেন তৈরি করবেন 8085? মূলত, কেন কেবলমাত্র targetPortপরিষেবাটিতে সমস্ত গুলি প্রকাশ করার পরিবর্তে দুটি পরামিতি রয়েছে?
ড্যান

হাই ড্যান, আপনি স্বাস্থ্যের জন্য পোর্ট এবং টার্গেট পোর্ট হিসাবে 8443 ব্যবহার করতে পারেন। আমি আরও ভাল ব্যাখ্যার জন্য বিভিন্ন নম্বর ব্যবহার করেছি।
মানিকান্ত পি

উত্তরের জন্য ধন্যবাদ. আমি বোঝাতে চাইছি, কোন পরিস্থিতিতে তাদের আলাদা করা কার্যকর হবে?
ড্যান

"পাত্রে চালানো" মানে? কনটেইনারটির ভিতরে সার্ভারটি যে পোর্টটি ব্যবহার করে? বা পোর্টটি যে ধারকগুলির বাইরে ক্লায়েন্ট ব্যবহার করে?
রায়েডওয়াল্ড

আমরা কি ক্লাউড সার্ভিসে 10.10.20.20 এর মতো হোস্ট মেশিনের জন্য একটি স্থির আইপি ধরে নিতে পারি? e, g, মাল্টি নোড স্থাপনের পরিস্থিতি সহ আজুর একেএস?
জয়শ ম্যাথিউজ

15

এটি আমাকে পরিষেবার দৃষ্টিকোণ থেকে জিনিসগুলি চিন্তা করতে সহায়তা করে ।

  • nodePort: নোডের বন্দর যেখানে বাহ্যিক ট্র্যাফিক আসবে
  • port: এই পরিষেবা বন্দরের
  • targetPort ট্র্যাফিক ফরোয়ার্ড করার জন্য পডের লক্ষ্যবস্তু পোর্ট s

ট্র্যাফিক চলে আসে nodePort, portসেই পরিষেবাতে ফরোয়ার্ড হয়ে যায় যা এরপরে targetPortপোড (গুলি) এ যায়।

এটি nodePortবাহ্যিক ট্র্যাফিকের জন্য বেশি জোর দেওয়া । ক্লাস্টারের অন্যান্য পোড যা পরিষেবা অ্যাক্সেসের প্রয়োজন হতে পারে কেবল সেগুলি ব্যবহার করবে port, nodePortএটি কেবলমাত্র পরিষেবার অভ্যন্তরীণ অ্যাক্সেস হিসাবে নয়।

এছাড়াও লক্ষণীয় যে যদি targetPortসেট না করা থাকে তবে এটি একই মান হিসাবে ডিফল্ট হবে port। যেমন 80:80পরিষেবা পোর্ট 80টার্গেট করে ধারক পোর্টের জন্য 80


4
ভাল সংক্ষিপ্তসার যা কয়েক কথায় প্রশ্নের উত্তরের উত্তর দেয়, ধন্যবাদ!
ওল্ফসন

একমত। আমি বিভ্রান্তিকর অন্যান্য উত্তর পেয়েছি, কিন্তু এটি একটি পেরেক আঘাত।
নিকোলা মালেসিভিć

লোকেরা portএবং এর মধ্যে পার্থক্য জানতে চায় targetPort। আপনি সত্যিই বিভ্রান্তি পরিষ্কার করেছেন।
অঙ্কুর গৌতম

1
আমি সম্মত, আমি মনে করি এটিই "উত্তর" এবং উপরের উত্তরগুলি অতিরিক্ত ক্ষেত্র এবং বিস্তৃত বিষয়গুলি খোলার জন্য আরও কঠিন করে তোলে। চিয়ার্স জুলজ
Worp

10

@ মানিকান্ত পি দ্বারা উপরে দেওয়া উত্তরটি সঠিক। তবে "পোর্ট" এর ব্যাখ্যাটি প্রথম পড়ার সময় কিছুটা অস্পষ্ট হতে পারে। আমি একটি উদাহরণ দিয়ে ব্যাখ্যা করব:

টমক্যাট দ্বারা হোস্ট করা httpd এবং গতিশীল সামগ্রী (যেমন অনুরোধের প্রতিক্রিয়া, ইত্যাদি) দ্বারা হোস্ট করা এর স্ট্যাটিক সামগ্রী (প্রথম পৃষ্ঠা, চিত্র ইত্যাদি) সহ একটি ওয়েব-অ্যাপ্লিকেশন বিবেচনা করুন। ওয়েবসারভার (বা স্থিতিশীল সামগ্রী) বন্দরে 80HTd দ্বারা পরিবেশন করা হয় যখন অ্যাপসভার (বা গতিশীল সামগ্রী) বন্দরে টমক্যাট দ্বারা পরিবেশন করা হয় 8080

একজন বিকাশকারী কী চায়: ব্যবহারকারীর বাইরে থেকে অ্যাপসভারটি নয় বরং বাইরে থেকে ওয়েবসভারটি অ্যাক্সেস করতে সক্ষম হওয়া উচিত।

সমাধান: এর সার্ভিস-টাইপ এর ওয়েবসভারের সার্ভিস.আইএমএল নোডপোর্ট হবে যখন সার্ভিস-টাইপের অ্যাপসভারের সার্ভিস.আইএমএল হবে ক্লাস্টারআইপি।

ওয়েবসার্ভারের পরিষেবার জন্য কোড। জিম:

spec:
  selector:
    app: Webserver
  type: NodePort        // written to make this service accessible from outside.
  ports:
    - nodePort: 30475   // To access from outside, type <host_IP>:30475 in browser.
      port: 5050        // (ignore for now, I will explain below).
      protocol: TCP
      targetPort: 80  // port where httpd runs inside the webserver pod.

অ্যাপসভারের পরিষেবাটির জন্য কোড.আইএমএল

spec:
  selector:
    app: appserver
  type: ClusterIP        // written to make this service NOT accessible from outside.
  ports:
    - port: 5050         // port to access this container internally
      protocol: TCP
      targetPort: 8080   // port where tomcat runs inside the appserver pod.

এছাড়াও দ্রষ্টব্য, ওয়েব httpd.confসার্ভারের ফাইলে আমরা এমন আইপি লিখব যা কোনও ব্যবহারকারীর অনুরোধটিকে অ্যাপসভারটিতে পুনঃনির্দেশ করে। এই আইপি হবে: host_IP:5050

ঠিক এখানে কি ঘটছে? একজন ব্যবহারকারী hostIP:30475ওয়েবসারভারের পৃষ্ঠাটি লিখেছেন এবং দেখেন। এটি পোর্ট 80(টার্গেটপোর্ট) এ httpd দ্বারা পরিবেশন করা হচ্ছে কারণ এটি । যখন কোনও ব্যবহারকারী একটি বোতাম ক্লিক করেন, তখন একটি অনুরোধ করা হয়। এই অনুরোধটি অ্যাপসভারের দিকে পুনঃনির্দেশিত করা হয়েছে কারণ httpd.confফাইলটিতে, বন্দরটির 5050উল্লেখ করা হয়েছে এবং এটি হ'ল বন্দর যেখানে অ্যাপসভারের ধারক এবং ওয়েবসারভারের কনটেইনার অভ্যন্তরীণভাবে যোগাযোগ করে। যখন অ্যাপসারটি অনুরোধটি গ্রহণ করে, তখন তার ভিতরে বন্দরে টমক্যাটটি চলার কারণে অনুরোধটি সরবরাহ করতে সক্ষম হয় 8080


4
ওয়েবসারভার স্পেস কেন 'পোর্ট: 5050' সংজ্ঞায়িত করে? আমি যদি সঠিকভাবে বুঝতে পারি, ওয়েবসার্ভার অ্যাপসভারটিকে কল করে: 5050, অন্যভাবে নয় ...?
এভারটন

1
এভারটনের প্রশ্নটি ছাড়াও, টমক্যাটটি 8080 বন্দরটি 5050 বন্দরটিতে অভ্যন্তরীণ অনুরোধগুলি পরিবেশন করার জন্য 8080 বন্দরটি খোলার দরকার কী?
স্টিফেন

এই উত্তরটি বিভ্রান্তিকর। এছাড়াও যেখানে httpd.conf"কারণ httpd.conf ফাইলে, 5050 বন্দরটি উল্লেখ করা হয়েছে"
পলিমেরেজ

@ পোলিমেরেজ httpd.conf ফাইলটি আপনার সিস্টেমে ইনস্টল করা httpd প্যাকেজের সাথে আসে। এটি একটি অভ্যন্তরীণ ফাইল যা আপনাকে কনফিগার করতে হবে। পথ: /etc/httpd/conf/http.conf
matak8s

টমকাট / কনফার / সার্ভার.এক্সএমএল-এ @ স্টেফেন, আমরা একটি পোর্ট নির্দিষ্ট করি যার উপরে টমক্যাট পরিষেবা চলবে। এটি টার্গেট পোর্ট হিসাবে আমরা একই পোর্ট নম্বরটি লিখি যাতে কুবেরনেটরা বুঝতে পারে যে এটি port বন্দরে টমক্যাট পরিষেবাটি স্পিন করতে হবে। আমি ভুল হলে আমাকে সংশোধন করুন।
matak8s

1

এই উত্তরটি অন্যান্য উত্তরের পাশাপাশি কুবেরনেটসের ডকুমেন্টেশনগুলি উল্লেখ করে:

https://kubernetes.io/docs/concepts/services- নেটওয়র্ক / সংযোগ- অ্যাপ্লিকেশনস- সেবা / :

targetPort: কনটেইনারটি কী বন্দরে ট্র্যাফিক গ্রহণ করে,

port: বিমূর্ত পরিষেবা বন্দর, যা পরিষেবাটিতে অ্যাক্সেসের জন্য অন্য কোনও শুঁটি ব্যবহার হতে পারে port

https://kubernetes.io/docs/concepts/services- নেটওয়র্ক / সংযোগ- অ্যাপ্লিকেশনস- সেবা / :

পডগুলিতে পোর্ট সংজ্ঞাগুলির নাম রয়েছে এবং আপনি targetPortকোনও পরিষেবার বৈশিষ্ট্যে এই নামগুলি উল্লেখ করতে পারেন । বিভিন্ন পোর্ট নম্বরের মাধ্যমে একই নেটওয়ার্ক প্রোটোকল সহ একক কনফিগার করা নাম ব্যবহার করে পরিষেবাতে পডসের মিশ্রণ থাকলেও এটি কাজ করে।


সংক্ষিপ্ত উত্তরের জন্য ধন্যবাদ
অঙ্কুর গৌতম

1

সারসংক্ষেপে

nodeport: নোডাইপ: পোর্টে সমস্ত কর্মী নোডে বহিরাগত অনুরোধটি কমিয়ে দেয় এবং পোর্টটিতে অনুরোধটি ফরোয়ার্ড করে।

port: কনটেইনারটির জন্য অভ্যন্তরীণ ক্লাস্টার পরিষেবা পোর্ট এবং নোডপোর্ট থেকে আগত অনুরোধ শুনে এবং টার্গেটপোর্টে এগিয়ে forward

targetPort:পোর্ট এবং অনুরোধটি শুনতে পেল যেখানে ধারক পড (পোর্ট) এ শুনা হচ্ছে to এমনকি যদি আপনি নির্দিষ্ট না করেন তবে এটি পূর্বনির্ধারিতভাবে পোর্ট হিসাবে একই পোর্ট সংখ্যা নির্ধারিত হবে।


0

"টার্গেট পোর্ট" হ'ল একটি পোর্ট যার উপর আপনার ধারক চলমান।

বন্দর: বন্দর পরিষেবা থেকে কন্টেইনারে ট্র্যাফিক পুনঃনির্দেশ করে।

মোতায়েনের বিষয়টি প্রকাশ করা হচ্ছে

  master $ kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE

nginx        1/1     1            1           31s
master $ kubectl expose deployment nginx --name=nginx-svc --port=8080 --target-port=80
service/nginx-svc exposed

master $ kubectl get svc

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE

nginx-svc    ClusterIP   10.107.209.151   <none>        8080/TCP   5s

নোডপোর্ট: একটি বন্দর যা পরিষেবাটি বাহ্যিকভাবে অ্যাক্সেস করতে সক্ষম করে।

এই উত্তর আশা করি।


0

কনটেইনারটি 9376 পোর্টে শুনলে টার্গেটপোর্ট : 9376

যদি কোনও পরিষেবা 80 পোর্টে শুনতে পায় তবে পোর্ট : 80

তারপরে পরিষেবা পোর্ট কনফিগারেশন নীচের মত দেখাচ্ছে like

ports:
 - protocol: TCP
   port: 80
   targetPort: 9376

পরিশেষে, পরিষেবার বন্দরে অনুরোধটি পেয়েছে এবং পোডের টার্গেটপোর্টে প্রেরণ করা হয়েছে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.