পডের কোনও ধারকটির ভিতরে থেকে পডের নিজের আইপি ঠিকানাটি কীভাবে জানবেন?


96

কুবেরনেটস প্রতিটি ধারক জন্য একটি আইপি ঠিকানা বরাদ্দ করে, তবে আমি কীভাবে পডের একটি ধারক থেকে আইপি ঠিকানা অর্জন করতে পারি? ডকুমেন্টেশনগুলি থেকে উপায় খুঁজে পাইনি।

সম্পাদনা: আমি কুবেরনেটসে এয়ারোস্পাইক ক্লাস্টার চালাচ্ছি। এবং কনফিগারেশন ফাইলগুলির নিজস্ব আইপি ঠিকানা প্রয়োজন। এবং আমি হোস্ট-নেম সেট করার জন্য কনফিড ব্যবহার করার চেষ্টা করছি। এটি সেট করা থাকলে আমি পরিবেশের পরিবর্তনশীলটি ব্যবহার করব।

উত্তর:


175

সহজ উত্তরটি হ'ল আপনার পোড বা প্রতিলিপি নিয়ন্ত্রক ইয়ামল / জেএসন ফাইলগুলি নীচে বর্ণিত কনফিগার ব্লকটি যুক্ত করে পড আইপিটিকে পরিবেশগত পরিবর্তনশীল হিসাবে যুক্ত করবে তা নিশ্চিত করা। (নীচের ব্লকটি অতিরিক্তভাবে পোডের নাম এবং নাম স্থান উপলব্ধ করে)

env:
- name: MY_POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name
- name: MY_POD_NAMESPACE
  valueFrom:
    fieldRef:
      fieldPath: metadata.namespace
- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

শুঁটি / আরসি পুনরুদ্ধার করুন এবং তারপরে চেষ্টা করুন

echo $MY_POD_IP

envকুবেরনেটস আপনাকে কী সরবরাহ করে তা দেখতে দৌড়ে যান।

চিয়ার্স


4
আমি স্রেফ আপনার সমাধানটি পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করে। আমি 100% নিশ্চিত কুবেরনেটসের এমন পরিবেশের পরিবর্তনশীল নেই, কারণ printenv | grep '10.254.24.167'ব্যবহারকারীর দ্বারা নির্ধারিত ভেরিয়েবল MY_POD_IP ব্যতীত আর কিছুই ফেরত দেয় না। যাইহোক, আমার ভোট স্যার নিন :)
এলুয়ান কেরিয়েল-এমনকি

4
আপনি কি কখনও হোস্টের আইপি আনার চেষ্টা করেছেন status.hostIP?
পিড্রো আর্থার

@ পেড্রো আর্থার না আমি নেই, আফিক এটি সাম্প্রতিক সংযোজন। এখানে টানার অনুরোধটি দেখুন - github.com/kubernetes/kubernetes/pull/42717
পাইয়ারসিপি

একে "ডাউনওয়াদ এপিআই" বলা হয়: kubernetes.io/docs/tasks/inject-data-application/…
অ্যালেক

আপনাকে অনেক ধন্যবাদ, এই উত্তরটি আমাকে সত্যিই একটি বড় বাচ্চা বানিয়েছে।
হুয়াং

27

কিছু স্পষ্টতা (আসলেই উত্তর নয়)

কুবারনেটে প্রতিটি পোডকে একটি আইপি ঠিকানা বরাদ্দ করা হয়, এবং পোডের প্রতিটি ধারক একই আইপি ঠিকানা বরাদ্দ করে। সুতরাং, অ্যালেক্স রবিনসন তার উত্তরে যেমন বলেছিলেন , hostname -iপড আইপি ঠিকানা পেতে আপনি কেবল নিজের ধারকটির ভিতরে ব্যবহার করতে পারেন ।

আমি দুটি বোবা কনটেইনার hostname -iচালা একটি পড দিয়ে পরীক্ষা করেছি এবং সত্যই উভয় পাত্রে একই আইপি ঠিকানা আউটপুট দিচ্ছিলাম। তদুপরি, IP আইপিটি kubectl describe podবাইরে থেকে ব্যবহার করে প্রাপ্ত একটির সমতুল্য , যা পুরো বিষয়টি আইএমওকে বৈধ করে।

তবে পাইয়ারসিপির উত্তর আমার কাছে আরও পরিষ্কার মনে হয়েছে।

সূত্র

কুবেরনেটস ডক্স থেকে :

একটি পডের অ্যাপ্লিকেশনগুলিতে সমস্ত একই নেটওয়ার্ক নেমস্পেস (একই আইপি এবং পোর্ট স্পেস) ব্যবহার করে এবং এভাবে একে অপরকে "সন্ধান" করতে এবং লোকালহোস্ট ব্যবহার করে যোগাযোগ করতে পারে। এ কারণে, কোনও পডের অ্যাপ্লিকেশনগুলিকে অবশ্যই পোর্টগুলির তাদের ব্যবহারের সমন্বয় করতে হবে। প্রতিটি পোডের ফ্ল্যাট শেয়ার্ড নেটওয়ার্কিং স্পেসে একটি আইপি ঠিকানা থাকে যা পুরো নেটওয়ার্ক জুড়ে অন্যান্য শারীরিক কম্পিউটার এবং শুঁটির সাথে সম্পূর্ণ যোগাযোগ করে।

কুবেরনেটস ডক্স থেকে অন্য একটি অংশ :

এখন পর্যন্ত এই নথিটি পাত্রে সম্পর্কে কথা বলেছে। বাস্তবে, কুবারনেটস পড স্কোপে আইপি ঠিকানাগুলি প্রয়োগ করে - একটি পডের মধ্যে থাকা ধারকরা তাদের আইপি ঠিকানা সহ নেটওয়ার্কের নামস্থান ভাগ করে নেন share এর অর্থ একটি পডের মধ্যে থাকা পাত্রে সমস্ত লোকালহোস্টের একে অপরের বন্দরে পৌঁছতে পারে।


25

kubectl describe pods <name of pod> আইপি সহ আপনাকে কিছু তথ্য দেবে


12
আমি মনে করি যে প্রশ্নটি পড / ধারকের ভিতরে থেকে আইপি পাওয়ার বিষয়ে, যেখানে kubectlউপলব্ধ নেই।
ইলুয়ান কেরেল-এমনকি

16
POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})

এই আদেশটি আপনাকে একটি আইপি ফিরিয়ে দেবে


4
আপনার উত্তরের জন্য ধন্যবাদ. তবে আমি কোনও পডের একটি পাত্রে আইপি ঠিকানা জানতে চাই। সুতরাং আমি এটি ব্যবহার না করেই জানতে চাই kubectl
ইয়ানানা

14

ধারকের আইপি ঠিকানাটি তার নেটওয়ার্ক নেমস্পেসের অভ্যন্তরে সঠিকভাবে কনফিগার করা উচিত, যাতে কোনও মানক লিনাক্স সরঞ্জাম এটি পেতে পারে। উদাহরণস্বরূপ, ব্যবহার করে দেখুন জন্য ifconfig, ip addr show, hostname -I, ইত্যাদি আপনার পাত্রে এক মধ্যে একটি সংযুক্ত শেল থেকে এটা পরীক্ষা করার।


12

আপনি ব্যবহার করতে পারেন

kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'

যা @ মিবিট প্রস্তাবিত উপর ভিত্তি করে।

এটি নিম্নলিখিত তথ্যগুলিকে বিবেচনা করে:


পাইপ না grepকরতে sed: kubectl describe pod $POD | sed -nE '/IP/s/IP:[[:space:]]+//p' (কিন্তু awk এই জন্য ভাল sed চেয়ে থাকে)
উইলিয়াম Pursell

4

এমনকি sedপদ্ধতির চেয়ে মনে রাখা সহজ awk

এখানে একটি উদাহরণ দেওয়া আছে, যা আপনি আপনার স্থানীয় মেশিনে চালাতে পারেন:

kubectl describe pod `<podName>` | grep IP | awk '{print $2}'

আইপি নিজেই আউটপুট 2 কলামে হয় $2


4
আমি ধরে নিলাম কারণ আপনি প্রশ্নের উত্তর দিচ্ছেন না। প্রশ্নগুলি হ'ল but how can I acquire the IP address from a container in the Pod? আপনি ধরে নিচ্ছেন যে প্রশ্নে থাকা ব্যক্তির kubectlপোদে নিজেই অ্যাক্সেস পেয়েছেন ।
সেভান

4
গ্রেপকে অবাক করে দেবেন না:kubectl describe pod $POD | awk '/IP/{print $2}'
উইলিয়াম পার্সেল 4'18

1

কিছু ক্ষেত্রে, নিম্নমুখী এপিআইয়ের উপর নির্ভর করার পরিবর্তে, ধারকটির অভ্যন্তর থেকে স্থানীয়ভাবে আইপি ঠিকানা (নেটওয়ার্ক ইন্টারফেস থেকে) পড়া প্রোগ্রাম করে works

উদাহরণস্বরূপ, গোলাংয়ে: https://stackoverflow.com/a/31551220/6247478


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