ڪبرنيٽس پوڊ ڪيئن هڪ IP پتو حاصل ڪري ٿو

نوٽ. ترجمو: هي مضمون، LinkedIn جي هڪ SRE انجنيئر پاران لکيل آهي، Kubernetes ۾ اندروني جادوءَ جي باري ۾ تفصيل سان وڃي ٿو - وڌيڪ واضح طور تي، CRI، CNI ۽ kube-apiserver جو رابطو - اهو تڏهن ٿئي ٿو جڏهن ايندڙ پوڊ کي IP پتو مقرر ڪرڻ جي ضرورت آهي.

بنيادي ضرورتن مان هڪ Kubernetes نيٽ ورڪ ماڊل اهو آهي ته هر پوڊ کي پنهنجو IP پتو هجڻ گهرجي ۽ ڪلستر ۾ ڪنهن ٻئي پوڊ کي ان پتي تي رابطو ڪرڻ جي قابل هوندو. اتي ڪيترائي نيٽ ورڪ "فراهم ڪندڙ" (فلانيل، ڪيليڪو، ڪينال، وغيره) آھن جيڪي ھن نيٽ ورڪ ماڊل کي لاڳو ڪرڻ ۾ مدد ڪن ٿيون.

جڏهن مون پهريون ڀيرو ڪبرنيٽس سان ڪم ڪرڻ شروع ڪيو، اهو مڪمل طور تي واضح نه هو ته پوڊس انهن جا IP پتي ڪيئن حاصل ڪندا آهن. جيتوڻيڪ اهو سمجهڻ سان ته انفرادي اجزاء ڪيئن ڪم ڪيو، اهو تصور ڪرڻ ڏکيو هو ته اهي گڏجي ڪم ڪن. مثال طور، مون کي خبر هئي ته CNI پلگ ان ڇا لاءِ آهن، پر مون کي خبر نه هئي ته انهن کي ڪيئن چئبو آهي. تنهن ڪري، مون فيصلو ڪيو ته هي مضمون لکڻ لاءِ معلومات شيئر ڪرڻ لاءِ نيٽ ورڪ جي مختلف حصن جي باري ۾ ۽ اهي ڪبرنيٽس ڪلستر ۾ ڪيئن گڏ ڪم ڪن ٿا، جيڪو هر پوڊ کي پنهنجي منفرد IP پتو حاصل ڪرڻ جي اجازت ڏئي ٿو.

ڪبرنيٽس ۾ نيٽ ورڪنگ کي منظم ڪرڻ جا مختلف طريقا آهن، جيئن ڪنٽينرز لاءِ رن ٽائم جا مختلف آپشن آهن. هي اشاعت استعمال ڪندو فلاليل ھڪڙي نيٽ ورڪ کي ھڪڙي ڪلستر ۾ منظم ڪرڻ، ۽ ھڪڙي قابل عمل ماحول جي طور تي - ڪنٽينر. مان پڻ اهو فرض ڪري رهيو آهيان ته توهان کي خبر آهي ته ڪنٽينرز جي وچ ۾ نيٽ ورڪنگ ڪيئن ڪم ڪري ٿي، تنهنڪري مان صرف ان تي مختصر طور تي رابطو ڪندس، صرف حوالي سان.

ڪجھ بنيادي تصور

ڪنٽينرز ۽ نيٽورڪ: هڪ مختصر جائزو

انٽرنيٽ تي ڪيتريون ئي شاندار اشاعتون آهن جيڪي وضاحت ڪن ٿيون ته ڪنٽينر ڪيئن نيٽ ورڪ تي هڪ ٻئي سان گفتگو ڪن ٿا. تنهن ڪري، مان صرف بنيادي تصورن جو هڪ عام جائزو ڏيندس ۽ پاڻ کي هڪ نقطي تائين محدود ڪندس، جنهن ۾ لينڪس پل ٺاهڻ ۽ پيڪيجز کي گڏ ڪرڻ شامل آهي. تفصيل ختم ڪيا ويا آهن، ڇو ته ڪنٽينر نيٽ ورڪنگ جو موضوع پاڻ هڪ الڳ مضمون جو مستحق آهي. ڪجھ خاص طور تي بصيرت ۽ تعليمي اشاعتن جا لنڪ ھيٺ ڏنل آھن.

ھڪڙي ميزبان تي ڪنٽينر

هڪ ئي ميزبان تي هلندڙ ڪنٽينرز جي وچ ۾ IP پتي ذريعي رابطي کي منظم ڪرڻ جو هڪ طريقو هڪ لينڪس پل ٺاهڻ شامل آهي. هن مقصد لاء، مجازي ڊوائيسز ٺاهيا ويا آهن ڪبرنيٽس (۽ ڊڪر) ۾ ويٿ (مجازي ايٿرنيٽ). ويٿ ڊيوائس جي هڪ پڇاڙي ڪنٽينر جي نيٽ ورڪ جي نالي واري جاءِ سان ڳنڍي ٿي، ٻئي کي لينڪس پل ميزبان نيٽ ورڪ تي.

ساڳئي ميزبان تي سڀئي ڪنٽينرز وٽ ويٿ جي هڪ پڇاڙي هڪ پل سان ڳنڍيل آهي جنهن ذريعي اهي IP پتي ذريعي هڪ ٻئي سان رابطو ڪري سگهن ٿا. لينڪس پل وٽ هڪ IP پتو پڻ آهي ۽ ٻين نوڊس لاءِ مقرر ڪيل پوڊس مان نڪرڻ واري ٽرئفڪ لاءِ گيٽ وي طور ڪم ڪري ٿو.

ڪبرنيٽس پوڊ ڪيئن هڪ IP پتو حاصل ڪري ٿو

مختلف ميزبانن تي ڪنٽينر

Packet encapsulation هڪ طريقو آهي جيڪو مختلف نوڊس تي ڪنٽينرز کي IP پتي استعمال ڪندي هڪ ٻئي سان رابطو ڪرڻ جي اجازت ڏئي ٿو. Flannel تي، ٽيڪنالاجي هن موقعي لاء ذميوار آهي. vxlan، جيڪو اصل پيڪٽ کي UDP پيڪٽ ۾ ”پيڪيج“ ڪري ٿو ۽ پوءِ ان کي پنهنجي منزل ڏانهن موڪلي ٿو.

ڪبرنيٽس ڪلستر ۾، فلانيل هڪ ويڪسلان ڊيوائس ٺاهي ٿو ۽ هر نوڊ تي روٽ ٽيبل جي مطابق اپڊيٽ ڪري ٿو. هر پيڪٽ مختلف ميزبان تي ڪنٽينر لاءِ مقرر ڪيو ويو آهي vxlan ڊيوائس مان گذري ٿو ۽ يو ڊي پي پيڪٽ ۾ سمايل آهي. منزل تي، نسٽڊ پيڪٽ ڪڍيو ويندو آهي ۽ گهربل پوڊ ڏانهن اڳتي وڌايو ويندو آهي.

ڪبرنيٽس پوڊ ڪيئن هڪ IP پتو حاصل ڪري ٿو
نوٽ: هي صرف هڪ طريقو آهي ڪنٽينرز جي وچ ۾ نيٽ ورڪ ڪميونيڪيشن کي منظم ڪرڻ جو.

CRI ڇا آهي؟

CRI (ڪنٽينر رن ٽائم انٽرفيس) هڪ پلگ ان آهي جيڪو ڪيبلٽ کي مختلف ڪنٽينر رن ٽائم ماحول کي استعمال ڪرڻ جي اجازت ڏئي ٿو. CRI API مختلف رن ٽائمز ۾ ٺاھيو ويو آھي، تنھنڪري صارف پنھنجي پسند جو رن ٽائم چونڊي سگھن ٿا.

CNI ڇا آهي؟

پروجيڪٽ CNI آهي هڪ آهي وضاحت لينڪس ڪنٽينرز لاءِ آفاقي نيٽ ورڪ حل کي منظم ڪرڻ لاءِ. ان کان علاوه، ان ۾ شامل آهي پلگ ان, مختلف ڪمن لاء ذميوار جڏهن هڪ پوڊ نيٽ ورڪ قائم. CNI پلگ ان هڪ قابل عمل فائل آهي جيڪا وضاحت سان مطابقت رکي ٿي (اسان هيٺ ڏنل ڪجهه پلگ ان تي بحث ڪنداسين).

پوڊس کي IP پتي کي تفويض ڪرڻ لاء نوڊس کي سب نيٽس جي مختص ڪرڻ

جيئن ته ڪلستر ۾ هر پوڊ کي هڪ IP پتو هجڻ گهرجي، اهو ضروري آهي ته پڪ ڪرڻ لاء اهو پتو منفرد آهي. اهو حاصل ڪيو ويو آهي هر نوڊ کي تفويض ڪندي هڪ منفرد سب نيٽ، جنهن مان ان نوڊ تي پوڊس کي IP پتي مقرر ڪيو ويو آهي.

نوڊ IPAM ڪنٽرولر

جڏهن nodeipam هڪ پرچم پيٽرولر جي طور تي منظور ڪيو ويو آهي --controllers kube-ڪنٽرولر- مئنيجر، اهو مختص ڪري ٿو الڳ سب نيٽ (podCIDR) هر نوڊ کي ڪلستر CIDR (يعني ڪلستر نيٽ ورڪ لاءِ IP پتي جي حد). جيئن ته اهي پوڊ سي آءِ آر اوورليپ نٿا ​​ٿين، اهو ممڪن آهي ته هر پوڊ لاءِ هڪ منفرد IP پتو مختص ڪيو وڃي.

هڪ ڪبرنيٽس نوڊ کي هڪ پوڊ سي ڊي آر ڊي لڳايو ويو آهي جڏهن اهو شروعاتي طور تي ڪلستر سان رجسٽر ٿيل آهي. نوڊس جي podCIDR کي تبديل ڪرڻ لاءِ، توھان کي انھن کي ختم ڪرڻ جي ضرورت آھي ۽ پوءِ انھن کي ٻيهر رجسٽر ڪرڻ جي ضرورت آھي، وچ ۾ Kubernetes ڪنٽرول پرت جي ترتيب ۾ مناسب تبديليون ڪندي. توھان ھيٺ ڏنل حڪم استعمال ڪندي ھڪڙي نوڊ جي podCIDR ڏيکاري سگھو ٿا:

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

ڪوبيليٽ، ڪنٽينر رن ٽائم ۽ CNI پلگ ان: اهو سڀ ڪيئن ڪم ڪري ٿو

هڪ پوڊ في نوڊ کي شيڊول ڪرڻ ۾ ڪيترائي تياري وارا مرحلا شامل آهن. هن حصي ۾، مان صرف انهن تي ڌيان ڏيندس جيڪي سڌو سنئون پوڊ نيٽ ورڪ قائم ڪرڻ سان لاڳاپيل آهن.

ھڪڙي خاص نوڊ ڏانھن پوڊ کي شيڊول ڪرڻ ھيٺ ڏنل سلسلو واقعن کي متحرڪ ڪري ٿو:

ڪبرنيٽس پوڊ ڪيئن هڪ IP پتو حاصل ڪري ٿو

مدد ڪنٽينرڊ CRI پلگ ان جو فن تعمير.

ڪنٽينر رن ٽائم ۽ CNI پلگ ان جي وچ ۾ رابطي

هر نيٽ ورڪ فراهم ڪندڙ کي پنهنجي CNI پلگ ان آهي. ڪنٽينر جو رن ٽائيم ان کي هلائي ٿو نيٽ ورڪ کي ترتيب ڏيڻ لاءِ جيئن پوڊ شروع ٿئي. ڪنٽينرڊ جي صورت ۾، سي اين آئي پلگ ان پلگ ان طرفان شروع ڪئي وئي آهي ڪنٽينرڊ CRI.

ان کان علاوه، هر فراهم ڪندڙ کي پنهنجي ايجنٽ آهي. اهو سڀني ڪبرنيٽس نوڊس تي نصب ٿيل آهي ۽ پوڊس جي نيٽ ورڪ ترتيب ڏيڻ جو ذميوار آهي. هي ايجنٽ يا ته CNI ترتيب سان شامل آهي يا آزاد طور تي ان کي نوڊ تي ٺاهي ٿو. ترتيب CRI پلگ ان کي سيٽ ڪرڻ ۾ مدد ڪري ٿي جيڪا CNI پلگ ان کي ڪال ڪرڻ لاءِ.

CNI ترتيب جي جڳھ کي ترتيب ڏئي سگھجي ٿو؛ ڊفالٽ ۾ اهو آهي /etc/cni/net.d/<config-file>. ڪلسٽر ايڊمنسٽريٽر به هر ڪلستر نوڊ تي CNI پلگ ان انسٽال ڪرڻ جا ذميوار آهن. انهن جو مقام پڻ حسب ضرورت آهي؛ ڊفالٽ ڊاريڪٽري - /opt/cni/bin.

جڏهن ڪنٽينرڊ استعمال ڪندي، پلگ ان جي ترتيب ۽ بائنري لاء رستا سيٽ ڪري سگھجن ٿيون سيڪشن ۾ [plugins.«io.containerd.grpc.v1.cri».cni] в ڪنٽينر جي ترتيب واري فائيل.

جيئن ته اسان Flannel کي اسان جي نيٽ ورڪ فراهم ڪندڙ طور استعمال ڪري رهيا آهيون، اچو ته ان کي ترتيب ڏيڻ بابت ٿورو ڳالهايون:

  • Flanneld (Flannel's daemon) عام طور تي ڪلسٽر ۾ نصب ڪيو ويندو آهي هڪ DaemonSet سان install-cni جيئن init ڪنٽينر.
  • Install-cni createsاهي ٿو CNI ٺاھ جوڙ فائيل (/etc/cni/net.d/10-flannel.conflist) هر نوڊ تي.
  • فلانيلڊ هڪ ويڪسلان ڊيوائس ٺاهي ٿو، API سرور مان نيٽ ورڪ ميٽاڊيٽا حاصل ڪري ٿو، ۽ پوڊ اپڊيٽ مانيٽر ڪري ٿو. جيئن اهي ٺاهيا ويا آهن، اهو سڄي ڪلستر ۾ سڀني پوڊ ڏانهن رستن کي ورهائي ٿو.
  • اهي رستا پوڊ کي اجازت ڏين ٿا ته هڪ ٻئي سان IP پتي ذريعي رابطو ڪن.

Flannel جي ڪم بابت وڌيڪ تفصيلي ڄاڻ لاء، آئون آرٽيڪل جي آخر ۾ لنڪس استعمال ڪرڻ جي صلاح ڪريان ٿو.

هتي Containerd CRI پلگ ان ۽ CNI پلگ ان جي وچ ۾ رابطي جو هڪ خاڪو آهي:

ڪبرنيٽس پوڊ ڪيئن هڪ IP پتو حاصل ڪري ٿو

جيئن توهان مٿي ڏسي سگهو ٿا، ڪوبلٽ ڪال ڪري ٿو ڪنٽينرڊ CRI پلگ ان پوڊ ٺاهڻ لاءِ، جيڪو پوءِ سڏي ٿو CNI پلگ ان کي پوڊ جي نيٽ ورڪ کي ترتيب ڏيڻ لاءِ. ائين ڪرڻ ۾، نيٽ ورڪ فراهم ڪندڙ جو CNI پلگ ان ٻين بنيادي CNI پلگ ان کي سڏي ٿو نيٽ ورڪ جي مختلف حصن کي ترتيب ڏيڻ لاءِ.

CNI پلگ ان جي وچ ۾ رابطي

اتي مختلف CNI پلگ ان آھن جن جو ڪم ھوسٽ تي ڪنٽينرز جي وچ ۾ نيٽ ورڪ ڪميونيڪيشن قائم ڪرڻ ۾ مدد ڪرڻ آھي. هي مضمون انهن مان ٽن تي بحث ڪندو.

CNI پلگ ان Flannel

جڏهن فلانيل کي نيٽ ورڪ فراهم ڪندڙ طور استعمال ڪيو وڃي ٿو، ڪنٽينرڊ CRI جزو ڪال ڪري ٿو CNI پلگ ان FlannelCNI ترتيب واري فائل کي استعمال ڪندي /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 پلگ ان فلانيلڊ سان گڏ ڪم ڪري ٿو. شروع ڪرڻ دوران، فلانيلڊ پوڊ سي ڊي آر ۽ ٻين نيٽ ورڪ سان لاڳاپيل تفصيلات 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»، جيڪو config ۾ ظاهر ڪيو ويو آهي. ان کان پوء هر پوڊ لاء هڪ ويٿ جوڙو ٺاهيو ويندو آهي. ان جي ھڪڙي پڇاڙي ڪنٽينر جي نيٽ ورڪ جي نالي جي جڳھ سان ڳنڍيل آھي، ٻيو ھوسٽ نيٽ ورڪ تي لينڪس پل ۾ شامل آھي. CNI پلگ ان پل ميزبان نيٽ ورڪ تي سڀني ميزبان ڪنٽينرز کي لينڪس پل سان ڳنڍيندو آهي.

ويٿ جوڙي کي ترتيب ڏيڻ کان پوء، پل پلگ ان کي سڏي ٿو ميزبان-مقامي IPAM CNI پلگ ان. IPAM پلگ ان جو قسم CNI ترتيب ۾ ترتيب ڏئي سگھجي ٿو جيڪو CRI پلگ ان استعمال ڪري ٿو فلانيل 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 Aڊسڪ Management - IP پتي جو انتظام) ذيلي نيٽ مان ڪنٽينر لاءِ 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": {}
}

خلاصو

ڪوبي-ڪنٽرولر-منيجر هر نوڊ لاءِ هڪ پوڊ سي آءِ آر تفويض ڪري ٿو. هر نوڊ جا پوڊ مختص ڪيل پوڊ سي آئي ڊي آر رينج ۾ ايڊريس اسپيس مان IP پتي وصول ڪندا آهن. جيئن ته نوڊس جا پوڊ سي آءِ آر اوورليپ نه ٿيندا آهن، سڀ پوڊ منفرد IP پتي وصول ڪندا آهن.

ڪبرنيٽس ڪلستر ايڊمنسٽريٽر ڪوبيليٽ، ڪنٽينر رن ٽائم، نيٽ ورڪ فراهم ڪندڙ ايجنٽ کي ترتيب ۽ انسٽال ڪري ٿو، ۽ CNI پلگ ان کي هر نوڊ تي نقل ڪري ٿو. شروع ڪرڻ دوران، نيٽ ورڪ فراهم ڪندڙ ايجنٽ هڪ CNI ترتيب ٺاهي ٿو. جڏهن هڪ پوڊ هڪ نوڊ تي مقرر ڪيو ويو آهي، ڪوبيليٽ ان کي ٺاهڻ لاء CRI پلگ ان کي سڏيندو آهي. اڳيون، جيڪڏهن ڪنٽينرڊ استعمال ڪيو وڃي، ڪنٽينرڊ سي آر آئي پلگ ان ڪال ڪري ٿو CNI پلگ ان کي CNI ترتيب ۾ بيان ڪيل پوڊ جي نيٽ ورڪ کي ترتيب ڏيڻ لاءِ. نتيجي طور، پوڊ هڪ IP پتي حاصل ڪري ٿو.

مون کي انهن سڀني ڳالهين جي مڙني ذهين ۽ نزاڪتن کي سمجهڻ ۾ ڪجهه وقت لڳو. مون کي اميد آهي ته هي تجربو توهان کي بهتر سمجهڻ ۾ مدد ڪندو ته ڪبرنيٽس ڪيئن ڪم ڪري ٿو. جيڪڏھن مان ڪجھھ بابت غلط آھيان، مھرباني ڪري مون سان رابطو ڪريو Twitter يا پتي تي [ايميل محفوظ ٿيل]. پهچڻ لاءِ آزاد ٿيو جيڪڏهن توهان چاهيو ٿا ته هن مضمون جي پهلوئن تي بحث ڪرڻ يا ٻيو ڪجهه. مان توهان سان ڳالهائڻ پسند ڪندس!

حوالن

ڪنٽينر ۽ نيٽ ورڪ

فلالين ڪيئن ڪم ڪندو آهي؟

CRI ۽ CNI

پي ايس مترجم کان

اسان جي بلاگ تي پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو