کبرنیٹس پوڈ کو آئی پی ایڈریس کیسے ملتا ہے؟

نوٹ. ترجمہ: لنکڈ ان کے ایک ایس آر ای انجینئر کی طرف سے لکھا گیا یہ مضمون Kubernetes میں اندرونی جادو کے بارے میں تفصیل سے جاتا ہے - زیادہ واضح طور پر، CRI، CNI اور kube-apiserver کا تعامل - یہ اس وقت ہوتا ہے جب اگلے پوڈ کو IP ایڈریس تفویض کرنے کی ضرورت ہوتی ہے۔

بنیادی ضروریات میں سے ایک Kubernetes نیٹ ورک ماڈل یہ ہے کہ ہر پوڈ کا اپنا IP ایڈریس ہونا چاہیے اور کلسٹر میں موجود کوئی اور پوڈ اس ایڈریس پر اس سے رابطہ کرنے کے قابل ہونا چاہیے۔ بہت سے نیٹ ورک "فراہم کرنے والے" (فلانیل، کیلیکو، کینال، وغیرہ) ہیں جو اس نیٹ ورک ماڈل کو نافذ کرنے میں مدد کرتے ہیں۔

جب میں نے پہلی بار Kubernetes کے ساتھ کام کرنا شروع کیا، تو یہ میرے لیے بالکل واضح نہیں تھا کہ پوڈز کو ان کے IP پتے کیسے ملتے ہیں۔ یہاں تک کہ یہ سمجھنے کے باوجود کہ انفرادی اجزاء کیسے کام کرتے ہیں، ان کے ساتھ کام کرنے کا تصور کرنا مشکل تھا۔ مثال کے طور پر، میں جانتا تھا کہ CNI پلگ ان کس لیے ہیں، لیکن مجھے نہیں معلوم تھا کہ انہیں کس طرح بلایا جاتا ہے۔ اس لیے، میں نے یہ مضمون لکھنے کا فیصلہ کیا تاکہ نیٹ ورک کے مختلف اجزاء کے بارے میں معلومات شیئر کی جا سکیں اور یہ کہ وہ کبرنیٹس کلسٹر میں ایک ساتھ کیسے کام کرتے ہیں، جو ہر پوڈ کو اپنا منفرد IP ایڈریس حاصل کرنے کی اجازت دیتا ہے۔

Kubernetes میں نیٹ ورکنگ کو منظم کرنے کے مختلف طریقے ہیں، بالکل اسی طرح جیسے کنٹینرز کے لیے رن ٹائم کے مختلف اختیارات ہیں۔ یہ اشاعت استعمال کرے گی۔ فلالین نیٹ ورک کو ایک کلسٹر میں منظم کرنا، اور ایک قابل عمل ماحول کے طور پر - کنٹینرڈ. میں یہ قیاس بھی کر رہا ہوں کہ آپ جانتے ہیں کہ کنٹینرز کے درمیان نیٹ ورکنگ کیسے کام کرتی ہے، اس لیے میں صرف سیاق و سباق کے لیے اس پر مختصراً رابطہ کروں گا۔

کچھ بنیادی تصورات

کنٹینرز اور نیٹ ورک: ایک مختصر جائزہ

انٹرنیٹ پر بہت ساری عمدہ اشاعتیں ہیں جو اس بات کی وضاحت کرتی ہیں کہ کنٹینرز نیٹ ورک پر ایک دوسرے کے ساتھ کس طرح بات چیت کرتے ہیں۔ لہذا، میں صرف بنیادی تصورات کا عمومی جائزہ پیش کروں گا اور اپنے آپ کو ایک نقطہ نظر تک محدود رکھوں گا، جس میں لینکس برج بنانا اور پیکجوں کو شامل کرنا شامل ہے۔ تفصیلات کو چھوڑ دیا گیا ہے، کیونکہ کنٹینر نیٹ ورکنگ کا موضوع خود ایک الگ مضمون کا مستحق ہے۔ کچھ خاص طور پر بصیرت انگیز اور تعلیمی اشاعتوں کے لنکس ذیل میں فراہم کیے جائیں گے۔

ایک میزبان پر کنٹینرز

ایک ہی میزبان پر چلنے والے کنٹینرز کے درمیان آئی پی ایڈریس کے ذریعے مواصلات کو منظم کرنے کا ایک طریقہ ایک لینکس پل بنانا شامل ہے۔ اس مقصد کے لیے، ورچوئل ڈیوائسز کبرنیٹس (اور ڈوکر) میں بنائے گئے ہیں۔ ویتھ (مجازی ایتھرنیٹ). ویتھ ڈیوائس کا ایک سرا کنٹینر کے نیٹ ورک کے نام کی جگہ سے جڑتا ہے، دوسرا اس سے لینکس پل میزبان نیٹ ورک پر۔

ایک ہی میزبان پر موجود تمام کنٹینرز میں ویتھ کا ایک سرا پل سے جڑا ہوتا ہے جس کے ذریعے وہ IP پتوں کے ذریعے ایک دوسرے سے بات چیت کر سکتے ہیں۔ لینکس برج کا ایک IP ایڈریس بھی ہے اور یہ دوسرے نوڈس کے لیے مقرر کردہ پوڈز سے نکلنے والے ٹریفک کے لیے گیٹ وے کے طور پر کام کرتا ہے۔

کبرنیٹس پوڈ کو آئی پی ایڈریس کیسے ملتا ہے؟

مختلف میزبانوں پر کنٹینرز

پیکٹ انکیپسولیشن ایک ایسا طریقہ ہے جو مختلف نوڈس پر موجود کنٹینرز کو IP پتوں کا استعمال کرتے ہوئے ایک دوسرے کے ساتھ بات چیت کرنے کی اجازت دیتا ہے۔ فلالین میں، ٹیکنالوجی اس موقع کے لیے ذمہ دار ہے۔ vxlan، جو اصل پیکٹ کو UDP پیکٹ میں "پیکج" کرتا ہے اور پھر اسے اپنی منزل تک بھیجتا ہے۔

Kubernetes کلسٹر میں، Flannel ایک vxlan ڈیوائس بناتا ہے اور اس کے مطابق ہر نوڈ پر روٹ ٹیبل کو اپ ڈیٹ کرتا ہے۔ مختلف میزبان پر کنٹینر کے لیے مقرر کردہ ہر پیکٹ vxlan ڈیوائس سے گزرتا ہے اور UDP پیکٹ میں بند ہوتا ہے۔ منزل پر، نیسٹڈ پیکٹ نکالا جاتا ہے اور مطلوبہ پوڈ پر بھیج دیا جاتا ہے۔

کبرنیٹس پوڈ کو آئی پی ایڈریس کیسے ملتا ہے؟
نوٹ: یہ کنٹینرز کے درمیان نیٹ ورک مواصلت کو منظم کرنے کا صرف ایک طریقہ ہے۔

CRI کیا ہے؟

CRI (کنٹینر رن ٹائم انٹرفیس) ایک پلگ ان ہے جو کیوبلیٹ کو مختلف کنٹینر رن ٹائم ماحول استعمال کرنے کی اجازت دیتا ہے۔ CRI API کو مختلف رن ٹائمز میں بنایا گیا ہے، لہذا صارف اپنی پسند کے رن ٹائم کا انتخاب کر سکتے ہیں۔

CNI کیا ہے؟

پروجیکٹ CNI اس کی نمائندگی تفصیلات لینکس کنٹینرز کے لیے یونیورسل نیٹ ورک حل کو منظم کرنے کے لیے۔ اس کے علاوہ، اس میں شامل ہیں پلگ انپوڈ نیٹ ورک قائم کرتے وقت مختلف افعال کے لیے ذمہ دار۔ CNI پلگ ان ایک قابل عمل فائل ہے جو تصریح کی تعمیل کرتی ہے (ہم ذیل میں کچھ پلگ ان پر بات کریں گے)۔

پوڈز کو آئی پی ایڈریسز تفویض کرنے کے لیے نوڈس کے لیے سب نیٹس کی تقسیم

چونکہ کلسٹر میں ہر پوڈ کا IP ایڈریس ہونا ضروری ہے، اس لیے یہ یقینی بنانا ضروری ہے کہ یہ پتہ منفرد ہو۔ یہ ہر نوڈ کو ایک منفرد سب نیٹ تفویض کرکے حاصل کیا جاتا ہے، جس سے اس نوڈ پر پوڈز کو پھر IP ایڈریس تفویض کیے جاتے ہیں۔

نوڈ IPAM کنٹرولر

جب nodeipam پرچم پیرامیٹر کے طور پر منظور کیا گیا ہے۔ --controllers kube-controller-manager، یہ کلسٹر CIDR (یعنی کلسٹر نیٹ ورک کے لیے IP پتوں کی حد) سے ہر نوڈ کے لیے الگ سب نیٹ (podCIDR) مختص کرتا ہے۔ چونکہ یہ پوڈ سی آئی ڈی آر اوورلیپ نہیں ہوتے ہیں، اس لیے ہر پوڈ کے لیے ایک منفرد IP ایڈریس مختص کرنا ممکن ہو جاتا ہے۔

ایک Kubernetes نوڈ کو ایک podCIDR تفویض کیا جاتا ہے جب یہ ابتدائی طور پر کلسٹر کے ساتھ رجسٹرڈ ہوتا ہے۔ نوڈس کے پوڈ سی آئی ڈی آر کو تبدیل کرنے کے لیے، آپ کو ان کا اندراج ختم کرنا ہوگا اور پھر ان کو دوبارہ رجسٹر کرنا ہوگا، درمیان میں Kubernetes کنٹرول لیئر کنفیگریشن میں مناسب تبدیلیاں کرنا ہوں گی۔ آپ درج ذیل کمانڈ کا استعمال کرتے ہوئے نوڈ کے پوڈ سی آئی ڈی آر کو ظاہر کر سکتے ہیں۔

$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24

کیوبلیٹ، کنٹینر رن ٹائم اور CNI پلگ ان: یہ سب کیسے کام کرتا ہے۔

ایک پوڈ فی نوڈ کو شیڈول کرنے میں بہت سے تیاری کے اقدامات شامل ہیں۔ اس سیکشن میں، میں صرف ان پر توجہ مرکوز کروں گا جو پوڈ نیٹ ورک قائم کرنے سے براہ راست متعلق ہیں۔

پوڈ کو کسی خاص نوڈ پر شیڈول کرنے سے مندرجہ ذیل واقعات کا سلسلہ شروع ہوتا ہے:

کبرنیٹس پوڈ کو آئی پی ایڈریس کیسے ملتا ہے؟

مدد: کنٹینرڈ سی آر آئی پلگ ان کا فن تعمیر.

کنٹینر رن ٹائم اور CNI پلگ ان کے درمیان تعامل

ہر نیٹ ورک فراہم کنندہ کا اپنا CNI پلگ ان ہوتا ہے۔ کنٹینر کا رن ٹائم اسے شروع ہوتے ہی پوڈ کے لیے نیٹ ورک کو ترتیب دینے کے لیے چلاتا ہے۔ کنٹینرڈ کے معاملے میں، CNI پلگ ان پلگ ان کے ذریعہ شروع کیا جاتا ہے۔ کنٹینرڈ سی آر آئی.

مزید یہ کہ ہر فراہم کنندہ کا اپنا ایجنٹ ہوتا ہے۔ یہ تمام Kubernetes نوڈس پر انسٹال ہے اور pods کے نیٹ ورک کنفیگریشن کے لیے ذمہ دار ہے۔ یہ ایجنٹ یا تو CNI تشکیل کے ساتھ شامل ہے یا اسے نوڈ پر آزادانہ طور پر تخلیق کرتا ہے۔ یہ ترتیب CRI پلگ ان کو سیٹ کرنے میں مدد کرتی ہے کہ کس CNI پلگ ان کو کال کرنا ہے۔

CNI ترتیب کی جگہ کو اپنی مرضی کے مطابق کیا جا سکتا ہے؛ پہلے سے طے شدہ طور پر اس میں ہے۔ /etc/cni/net.d/<config-file>. کلسٹر ایڈمنسٹریٹرز ہر کلسٹر نوڈ پر CNI پلگ ان انسٹال کرنے کے بھی ذمہ دار ہیں۔ ان کا مقام بھی حسب ضرورت ہے۔ پہلے سے طے شدہ ڈائریکٹری - /opt/cni/bin.

کنٹینرڈ استعمال کرتے وقت، سیکشن میں پلگ ان کی تشکیل اور بائنریز کے لیے راستے سیٹ کیے جا سکتے ہیں۔ [plugins.«io.containerd.grpc.v1.cri».cni] в کنٹینر کنفیگریشن فائل.

چونکہ ہم Flannel کو اپنے نیٹ ورک فراہم کنندہ کے طور پر استعمال کر رہے ہیں، آئیے اسے ترتیب دینے کے بارے میں تھوڑی بات کرتے ہیں:

  • فلانیلڈ (فلالین کا ڈیمون) عام طور پر ایک کلسٹر میں ڈیمون سیٹ کے ساتھ نصب ہوتا ہے۔ install-cni کے طور پر init کنٹینر.
  • Install-cni تخلیق کرتا ہے CNI کنفیگریشن فائل (/etc/cni/net.d/10-flannel.conflist) ہر نوڈ پر۔
  • Flanneld ایک vxlan ڈیوائس بناتا ہے، API سرور سے نیٹ ورک میٹا ڈیٹا بازیافت کرتا ہے، اور پوڈ اپ ڈیٹس کی نگرانی کرتا ہے۔ جیسے ہی وہ بنائے جاتے ہیں، یہ پورے کلسٹر میں تمام پوڈز میں راستے تقسیم کرتا ہے۔
  • یہ راستے پوڈز کو IP پتوں کے ذریعے ایک دوسرے سے بات چیت کرنے کی اجازت دیتے ہیں۔

فلالین کے کام کے بارے میں مزید تفصیلی معلومات کے لیے، میں مضمون کے آخر میں لنکس کو استعمال کرنے کی تجویز کرتا ہوں۔

یہاں کنٹینرڈ سی آر آئی پلگ ان اور سی این آئی پلگ ان کے درمیان تعامل کا خاکہ ہے:

کبرنیٹس پوڈ کو آئی پی ایڈریس کیسے ملتا ہے؟

جیسا کہ آپ اوپر دیکھ سکتے ہیں، کیوبلیٹ پوڈ بنانے کے لیے کنٹینرڈ سی آر آئی پلگ ان کو کال کرتا ہے، جو پھر پوڈ کے نیٹ ورک کو ترتیب دینے کے لیے CNI پلگ ان کو کال کرتا ہے۔ ایسا کرنے میں، نیٹ ورک فراہم کرنے والے کا CNI پلگ ان نیٹ ورک کے مختلف پہلوؤں کو ترتیب دینے کے لیے دوسرے بنیادی CNI پلگ ان کو کال کرتا ہے۔

CNI پلگ ان کے درمیان تعامل

مختلف CNI پلگ ان ہیں جن کا کام میزبان پر کنٹینرز کے درمیان نیٹ ورک کمیونیکیشن قائم کرنے میں مدد کرنا ہے۔ یہ مضمون ان میں سے تین پر بحث کرے گا۔

CNI پلگ ان فلالین

فلالین کو نیٹ ورک فراہم کنندہ کے طور پر استعمال کرتے وقت، Containerd CRI جزو کال کرتا ہے۔ CNI پلگ ان فلالینCNI کنفیگریشن فائل کا استعمال کرتے ہوئے /etc/cni/net.d/10-flannel.conflist.

$ cat /etc/cni/net.d/10-flannel.conflist
{
  "name": "cni0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
         "ipMasq": false,
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    }
  ]
}

Flannel CNI پلگ ان Flanneld کے ساتھ مل کر کام کرتا ہے۔ سٹارٹ اپ کے دوران، فلانیلڈ API سرور سے پوڈ سی آئی ڈی آر اور نیٹ ورک سے متعلق دیگر تفصیلات حاصل کرتا ہے اور انہیں فائل میں محفوظ کرتا ہے۔ /run/flannel/subnet.env.

FLANNEL_NETWORK=10.244.0.0/16 
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=false

Flannel CNI پلگ ان سے ڈیٹا استعمال کرتا ہے۔ /run/flannel/subnet.env CNI برج پلگ ان کو ترتیب دینے اور کال کرنے کے لیے۔

CNI پلگ ان برج

اس پلگ ان کو درج ذیل ترتیب کے ساتھ کہا جاتا ہے:

{
  "name": "cni0",
  "type": "bridge",
  "mtu": 1450,
  "ipMasq": false,
  "isGateway": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24"
  }
}

جب پہلی بار بلایا جاتا ہے، تو یہ ایک لینکس پل بناتا ہے۔ «name»: «cni0»، جو تشکیل میں اشارہ کیا گیا ہے۔ پھر ہر پھلی کے لیے ایک ویتھ جوڑا بنایا جاتا ہے۔ اس کا ایک سرا کنٹینر کے نیٹ ورک کے نام کی جگہ سے منسلک ہے، دوسرا میزبان نیٹ ورک پر لینکس برج میں شامل ہے۔ CNI پلگ ان برج تمام میزبان کنٹینرز کو میزبان نیٹ ورک پر لینکس پل سے جوڑتا ہے۔

ویتھ جوڑا ترتیب دینے کے بعد، برج پلگ ان میزبان-مقامی IPAM CNI پلگ ان کو کال کرتا ہے۔ IPAM پلگ ان کی قسم کو CNI ترتیب میں کنفیگر کیا جا سکتا ہے جسے CRI پلگ ان Flannel CNI پلگ ان کو کال کرنے کے لیے استعمال کرتا ہے۔

میزبان مقامی IPAM CNI پلگ ان

برج CNI کال کرتا ہے۔ میزبان مقامی IPAM پلگ ان CNI مندرجہ ذیل ترتیب کے ساتھ:

{
  "name": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24",
    "dataDir": "/var/lib/cni/networks"
  }
}

میزبان مقامی IPAM پلگ ان (IP Address Management - IP ایڈریس مینجمنٹ) سب نیٹ سے کنٹینر کے لیے آئی پی ایڈریس واپس کرتا ہے اور سیکشن میں بتائی گئی ڈائرکٹری میں میزبان پر مختص IP کو اسٹور کرتا ہے۔ dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. اس فائل میں کنٹینر کی ID ہے جس کو یہ IP ایڈریس تفویض کیا گیا ہے۔

میزبان-مقامی IPAM پلگ ان کو کال کرتے وقت، یہ درج ذیل ڈیٹا واپس کرتا ہے:

{
  "ip4": {
    "ip": "10.244.4.2",
    "gateway": "10.244.4.3"
  },
  "dns": {}
}

خلاصہ

Kube-controller-manager ہر نوڈ کو ایک podCIDR تفویض کرتا ہے۔ ہر نوڈ کے پوڈ مختص پوڈ سی آئی ڈی آر رینج میں ایڈریس اسپیس سے IP ایڈریس وصول کرتے ہیں۔ چونکہ نوڈس کے پوڈ سی آئی ڈی آر اوورلیپ نہیں ہوتے ہیں، اس لیے تمام پوڈز منفرد IP پتے حاصل کرتے ہیں۔

Kubernetes کلسٹر ایڈمنسٹریٹر کیوبلیٹ، کنٹینر رن ٹائم، نیٹ ورک فراہم کرنے والے ایجنٹ کو ترتیب دیتا ہے اور انسٹال کرتا ہے، اور CNI پلگ ان کو ہر نوڈ پر کاپی کرتا ہے۔ آغاز کے دوران، نیٹ ورک فراہم کرنے والا ایجنٹ ایک CNI کنفیگریشن تیار کرتا ہے۔ جب کسی پوڈ کو نوڈ پر مقرر کیا جاتا ہے، تو کیوبلیٹ اسے بنانے کے لیے CRI پلگ ان کو کال کرتا ہے۔ اگلا، اگر کنٹینرڈ استعمال کیا جاتا ہے، تو کنٹینرڈ سی آر آئی پلگ ان پوڈ کے نیٹ ورک کو کنفیگر کرنے کے لیے سی این آئی کنفیگر میں مخصوص کردہ CNI پلگ ان کو کال کرتا ہے۔ نتیجے کے طور پر، پوڈ کو ایک IP پتہ ملتا ہے۔

ان تمام تعاملات کی تمام باریکیوں اور باریکیوں کو سمجھنے میں مجھے کچھ وقت لگا۔ مجھے امید ہے کہ یہ تجربہ آپ کو یہ سمجھنے میں مدد دے گا کہ Kubernetes کیسے کام کرتا ہے۔ اگر میں کسی چیز کے بارے میں غلط ہوں تو، براہ کرم مجھ سے رابطہ کریں۔ ٹویٹر یا پتے پر [ای میل محفوظ]. اگر آپ اس مضمون یا کسی اور چیز کے پہلوؤں پر بات کرنا چاہتے ہیں تو بلا جھجھک رابطہ کریں۔ میں آپ کے ساتھ بات چیت کرنا پسند کروں گا!

حوالہ جات

کنٹینرز اور نیٹ ورک

فلالین کیسے کام کرتا ہے؟

CRI اور CNI

مترجم سے PS

ہمارے بلاگ پر بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں