Calico سان نيٽ ورڪ پاليسي جي اختيارن کي سمجھڻ

Calico سان نيٽ ورڪ پاليسي جي اختيارن کي سمجھڻ

ڪيليڪو نيٽ ورڪ پلگ ان هارڊويئر هوسٽ، ورچوئل مشينن ۽ پوڊس کي بچائڻ لاءِ متحد نحو سان گڏ نيٽ ورڪ پاليسين جو وسيع سلسلو مهيا ڪري ٿو. اهي پاليسيون هڪ نالي جي جڳهه ۾ لاڳو ٿي سگهن ٿيون يا عالمي نيٽ ورڪ پاليسيون هجن جيڪي لاڳو ٿين ٿيون ميزبان آخري پوائنٽ (سڌي طرح ميزبان تي هلندڙ ايپليڪيشنن کي بچائڻ لاءِ - ميزبان سرور يا ورچوئل مشين ٿي سگهي ٿو) يا ڪم لوڊ جي آخري پوائنٽ (ڪنٽينر يا ميزباني ڪيل ورچوئل مشينن ۾ هلندڙ ايپليڪيشنن کي بچائڻ لاءِ). ڪيليڪو پاليسيون توهان کي اجازت ڏين ٿيون حفاظتي قدمن تي مختلف نقطن تي پيڪيٽ جي رستي ۾ اختيارن کي استعمال ڪندي جيئن ته preDNAT، unraracked، ۽ applyOnForward. سمجھڻ ته اهي اختيار ڪيئن ڪم ڪري سگھن ٿا توهان جي مجموعي سسٽم جي حفاظت ۽ ڪارڪردگي کي بهتر بنائڻ ۾. هي آرٽيڪل وضاحت ڪري ٿو انهن ڪيليڪو پاليسي آپشنز جو خلاصو (preDNAT، unraracked ۽ applyOnForward) ميزبان آخري پوائنٽس تي لاڳو ڪيو ويو آهي، انهي تي زور ڏيڻ سان ته ڇا ٿئي ٿو پيڪيٽ پروسيسنگ رستن (iptabels زنجيرن).

هي آرٽيڪل فرض ڪري ٿو ته توهان کي بنيادي ڄاڻ آهي ته ڪبرنيٽس ۽ ڪيليڪو نيٽ ورڪ پاليسيون ڪيئن ڪم ڪن ٿيون. جيڪڏهن نه، اسان ان کي ڪوشش ڪرڻ جي صلاح ڏين ٿا بنيادي نيٽ ورڪ پاليسي سبق и ميزبان تحفظ جو سبق هن مضمون پڙهڻ کان اڳ Calico استعمال ڪندي. اسان کي پڻ اميد آهي ته توهان کي ڪم جي بنيادي سمجھ آهي iptables لينڪس ۾.

ڪيليڪو عالمي نيٽ ورڪ پاليسي توهان کي اجازت ڏئي ٿو رسائي جي ضابطن جي سيٽ کي لاڳو ڪرڻ جي ليبلز (ميزبانن جي گروپن ۽ ڪم لوڊ / پوڊز تي). اهو تمام ڪارائتو آهي جيڪڏهن توهان هيٽروجنيئس سسٽم گڏجي استعمال ڪندا آهيو - ورچوئل مشينون، هڪ سسٽم سڌو سنئون هارڊويئر تي، يا ڪبرنيٽس انفراسٽرڪچر. اضافي طور تي، توهان اعلاني پاليسين جو هڪ سيٽ استعمال ڪندي پنهنجي ڪلستر (نوڊس) جي حفاظت ڪري سگهو ٿا ۽ ايندڙ ٽرئفڪ تي نيٽ ورڪ پاليسيون لاڳو ڪري سگهو ٿا (مثال طور، NodePorts يا External IPs سروس ذريعي).

بنيادي سطح تي، جڏهن ڪيليڪو هڪ پوڊ کي نيٽ ورڪ سان ڳنڍي ٿو (هيٺ ڏنل ڊراگرام ڏسو)، اهو ان کي ميزبان سان ڳنڍي ٿو ورچوئل ايٿرنيٽ انٽرفيس (ويٿ). پوڊ پاران موڪليل ٽرئفڪ هن ورچوئل انٽرفيس مان ميزبان ڏانهن ايندي آهي ۽ ساڳئي طريقي سان پروسيس ڪئي ويندي آهي ڄڻ ته اها فزيڪل نيٽ ورڪ انٽرفيس مان آئي هجي. ڊفالٽ طور، ڪيليڪو انهن انٽرفيسز جو نالو رکي ٿو caliXXX. جيئن ته ٽريفڪ ورچوئل انٽرفيس ذريعي اچي ٿي، اهو iptables ذريعي وڃي ٿو ڄڻ ته پوڊ هڪ هٽ پري هو. تنهن ڪري، جڏهن ٽرئفڪ / پوڊ کان اچي ٿي، اهو ميزبان جي نقطي نظر کان اڳتي وڌايو ويندو آهي.

ڪليڪو تي هلندڙ ڪبرنيٽس نوڊ تي، توھان ھيٺ ڏنل ڪم لوڊ ڪرڻ لاءِ ورچوئل انٽرفيس (ويٿ) جو نقشو ٺاھي سگھو ٿا. هيٺ ڏنل مثال ۾، توهان ڏسي سگهو ٿا ته veth#10 (calic1cbf1ca0f8) cnx-manager-* سان ڳنڍيل آهي ڪيليڪو-مانيٽرنگ نالي جي جاءِ ۾.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever
...

[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m                            ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...

Calico سان نيٽ ورڪ پاليسي جي اختيارن کي سمجھڻ

ڏنو ويو ته ڪيليڪو هر ڪم لوڊ لاءِ ويٿ انٽرفيس ٺاهي ٿو، اهو ڪيئن لاڳو ڪندو آهي پاليسين؟ هن کي ڪرڻ لاء، ڪيليڪو iptables استعمال ڪندي پيڪيٽ پروسيسنگ رستي جي مختلف زنجيرن ۾ ٿلهو ٺاهي ٿو.

هيٺ ڏنل آريگرام ڏيکاري ٿو زنجيرن کي iptables ۾ پيڪٽ پروسيسنگ ۾ شامل آهي (يا نيٽ فلٽر سب سسٽم). جڏهن هڪ پيڪيٽ نيٽ ورڪ انٽرفيس ذريعي اچي ٿو، اهو پهريون ڀيرو PREROUTING زنجير ذريعي وڃي ٿو. ھڪڙي رستي جو فيصلو ڪيو ويندو آھي، ۽ ان جي بنياد تي، پيڪٽ يا ته INPUT (ميزباني جي عمل کي ھدايت ڪئي وئي) يا FORWARD (نيٽ ورڪ تي ھڪڙي پوڊ يا ٻئي نوڊ ڏانھن ھدايت ڪئي وئي) ذريعي گذري ٿو. مقامي عمل مان، پيڪٽ ڪيبل نازل ٿيڻ کان اڳ OUTPUT ۽ پوء POSTROUTING زنجير ذريعي وڃي ٿو.

نوٽ ڪريو ته پوڊ پڻ iptables پروسيسنگ جي لحاظ کان هڪ خارجي ادارو آهي (وٿ سان ڳنڍيل آهي). اچو ته اختصار ڪريون:

  • فارورڊ ٿيل ٽريفڪ (نيٽ، روٽ ٿيل يا پوڊ کان) PREROUTING - FORWARD - POSTROUTING زنجيرن مان گذري ٿو.
  • مقامي ميزباني جي عمل ڏانهن ٽريفڪ PREROUTING - INPUT زنجير مان گذري ٿو.
  • مقامي ميزبان جي عمل مان ٽريفڪ OUTPUT - POSTROUTING زنجير ذريعي وڃي ٿي.

Calico سان نيٽ ورڪ پاليسي جي اختيارن کي سمجھڻ

Calico مهيا ڪري ٿي پاليسي جا اختيار جيڪي توهان کي سڀني زنجيرن تي پاليسين لاڳو ڪرڻ جي اجازت ڏين ٿا. انهي سان گڏ ذهن ۾، اچو ته ڏسو مختلف پاليسين جي ترتيب جا اختيار ڪيليڪو ۾ موجود آهن. هيٺ ڏنل اختيارن جي فهرست ۾ انگ مٿي ڏنل ڊراگرام ۾ انگن اکرن سان ملن ٿا.

  1. ڪم لوڊ آخري پوائنٽ (pod) پاليسي
  2. ميزبان آخري پوائنٽ پاليسي
  3. ApplyOnForward آپشن
  4. PreDNAT پاليسي
  5. اڻ سڌريل پاليسي

اچو ته اهو ڏسڻ سان شروع ڪريون ته پاليسيون ڪيئن لاڳو ٿين ٿيون ڪم لوڊ جي آخري پوائنٽس (Kubernetes pods يا OpenStack VMs)، ۽ پوءِ ڏسو پاليسي جا اختيار ميزبان آخري پوائنٽس لاءِ.

ڪم لوڊ جي آخري پوائنٽ

ڪم لوڊ انڊ پوائنٽ پاليسي (1)

هي هڪ اختيار آهي توهان جي ڪبرنيٽس پوڊ کي بچائڻ لاءِ. Calico Kubernetes NetworkPolicy سان ڪم ڪرڻ جي حمايت ڪري ٿو، پر اها اضافي پاليسيون پڻ مهيا ڪري ٿي - Calico NetworkPolicy ۽ GlobalNetworkPolicy. ڪيليڪو هر پوڊ (ڪم لوڊ) لاءِ هڪ زنجير ٺاهي ٿو ۽ ڪم لوڊ لاءِ INPUT ۽ OUTPUT زنجيرن کي FORWARD زنجير جي فلٽر ٽيبل ڏانهن ڇڪي ٿو.

ميزبان آخري پوائنٽون

ميزبان جي آخري پوائنٽ پاليسي (2)

CNI (ڪنٽينر نيٽ ورڪ انٽرفيس) جي اضافي ۾، ڪيليڪو پاليسيون پاڻ کي ميزبان کي بچائڻ جي صلاحيت مهيا ڪن ٿيون. ڪيليڪو ۾، توهان ميزبان انٽرفيس جي ميلاپ کي بيان ڪندي هڪ ميزبان آخري پوائنٽ ٺاهي سگهو ٿا ۽، جيڪڏهن ضروري هجي ته، پورٽ نمبر. ھن اداري لاءِ پاليسي لاڳو ڪرڻ INPUT ۽ OUTPUT زنجيرن ۾ فلٽر ٽيبل استعمال ڪندي حاصل ڪيو ويندو آھي. جيئن توهان ڊاگرام مان ڏسي سگهو ٿا، (2) اهي نوڊ / ميزبان تي مقامي عملن تي لاڳو ٿين ٿا. اهو آهي، جيڪڏهن توهان هڪ پاليسي ٺاهيندا آهيو جيڪا ميزبان جي آخر واري پوائنٽ تي لاڳو ٿئي ٿي، اهو توهان جي پوڊس ڏانهن / وڃڻ واري ٽرئفڪ کي متاثر نه ڪندو. پر اهو مهيا ڪري ٿو هڪ واحد انٽرفيس/نحو ٽريفڪ کي بلاڪ ڪرڻ لاءِ توهان جي ميزبان ۽ پوڊس استعمال ڪندي ڪيليڪو پاليسين. هي تمام گهڻو آسان بڻائي ٿو پاليسين کي منظم ڪرڻ جي عمل کي هڪ متضاد نيٽ ورڪ لاءِ. ڪلستر سيڪيورٽي کي وڌائڻ لاء ميزبان آخري پوائنٽ پاليسين کي ترتيب ڏيڻ هڪ ٻيو اهم استعمال ڪيس آهي.

لاڳو آن فارورڊ پاليسي (3)

ApplyOnForward آپشن Calico گلوبل نيٽ ورڪ پاليسي ۾ دستياب آهي پاليسين کي لاڳو ڪرڻ جي اجازت ڏيڻ جي سڀني ٽرئفڪ تي جيڪو ميزبان جي آخري پوائنٽ مان گذري ٿو، بشمول ٽرئفڪ جيڪو ميزبان طرفان اڳتي وڌايو ويندو. ھن ۾ شامل آھي ٽرئفڪ کي اڳتي وڌايو ويو مقامي پوڊ ڏانھن يا نيٽ ورڪ تي ڪٿي به. Calico گھربل آھي ھن سيٽنگ کي چالو ڪيو وڃي پاليسين لاءِ PreDNAT استعمال ڪندي ۽ untracked، ھيٺيون سيڪشن ڏسو. اضافي طور تي، ApplyOnForward استعمال ڪري سگھجي ٿو ميزبان ٽرئفڪ جي نگراني ڪرڻ لاءِ ڪيسن ۾ جتي هڪ ورچوئل روٽر يا سافٽ ويئر NAT استعمال ڪيو ويندو آهي.

نوٽ ڪريو ته جيڪڏھن توھان کي ساڳيو نيٽ ورڪ پاليسي لاڳو ڪرڻ جي ضرورت آھي ٻئي ھوسٽ پروسيس ۽ پوڊز تي، پوءِ توھان کي استعمال ڪرڻ جي ضرورت نه آھي ApplyOnForward آپشن. توهان سڀني کي ڪرڻ جي ضرورت آهي گهربل ميزبان پوائنٽ ۽ ڪم لوڊ جي آخري پوائنٽ (پوڊ) لاءِ هڪ ليبل ٺاهيو. Calico ليبل جي بنياد تي پاليسي کي لاڳو ڪرڻ لاء ڪافي هوشيار آهي، قطع نظر آخر پوائنٽ جي قسم (هوسٽ پوائنٽ يا ڪم لوڊ).

PreDNAT پاليسي (4)

ڪبرنيٽس ۾، سروس انٽيٽي بندرگاهن کي ٻاهران ظاهر ڪري سگهجي ٿو NodePorts آپشن استعمال ڪندي يا، اختياري طور (جڏهن Calico استعمال ڪندي)، انهن کي اشتهار ڏيڻ سان ڪلستر IPs يا External IPs آپشنز استعمال ڪندي. Kube-proxy ايندڙ ٽرئفڪ کي بيلنس ڪري ٿو جيڪو DNAT استعمال ڪندي لاڳاپيل سروس جي پوڊس جي خدمت سان پابند آهي. هن کي ڏنو ويو، توهان نوڊ پورٽ ذريعي اچڻ واري ٽرئفڪ لاءِ پاليسيون ڪيئن لاڳو ڪندا؟ انهي ڳالهه کي يقيني بڻائڻ لاءِ ته اهي پاليسيون لاڳو ٿيڻ کان اڳ ٽريفڪ DNAT (جيڪو ميزبان:پورٽ ۽ لاڳاپيل خدمت جي وچ ۾ ميپنگ آهي) تي عمل ڪيو وڃي ٿو، Calico گلوبل نيٽ ورڪ پاليسي لاءِ هڪ پيٽرول مهيا ڪري ٿي جنهن کي "preDNAT: true" سڏيو ويندو آهي.

جڏهن اڳ-DNAT فعال ٿئي ٿي، اهي پاليسيون (4) ۾ لاڳو ٿينديون آهن ڊراگرام ۾ - PREROUTING زنجير جي مينگل ٽيبل ۾ - فوري طور تي DNAT کان اڳ. هتي پاليسين جي معمولي ترتيب جي پيروي نه ڪئي وئي آهي، ڇاڪاڻ ته انهن پاليسين جي درخواست گهڻو اڳ ٽرئفڪ جي پروسيسنگ رستي ۾ ٿيندي آهي. جڏهن ته، preDNAT پاليسيون پاڻ ۾ درخواست جي حڪم جو احترام ڪن ٿيون.

جڏهن اڳ-DNAT سان پاليسيون ٺاهي رهيا آهيو، اهو ضروري آهي ته ٽريفڪ بابت محتاط رهو جنهن کي توهان پروسيس ڪرڻ چاهيو ٿا ۽ اڪثريت کي رد ڪرڻ جي اجازت ڏيو. DNAT کان اڳ واري پاليسي ۾ 'اجازت' طور نشان لڳل ٽريفڪ هاڻي هوسٽنڊ پوائنٽ پاليسي جي ذريعي چيڪ نه ڪئي ويندي، جڏهن ته ٽريفڪ جيڪا اڳ-DNAT پاليسي کي ناڪام ڪري ٿي باقي زنجيرن ذريعي جاري رهندي.
Calico ان کي لازمي بڻائي ڇڏيو آهي لاڳو ڪرڻ لاءِ فعال ڪرڻ آن فارورڊ آپشن جڏهن preDNAT استعمال ڪيو وڃي، ڇاڪاڻ ته تعريف سان ٽرئفڪ جي منزل اڃا تائين منتخب نه ڪئي وئي آهي. ٽرئفڪ کي ميزبان جي عمل ڏانهن هدايت ڪري سگهجي ٿو، يا اهو پوڊ يا ٻئي نوڊ ڏانهن اڳتي وڌائي سگهجي ٿو.

اڻ سڌريل پاليسي (5)

نيٽ ورڪ ۽ ايپليڪيشنون ٿي سگھن ٿيون وڏي فرق ۾ رويي ۾. ڪجهه انتهائي حالتن ۾، ايپليڪيشنون شايد ڪيترائي مختصر-رهندڙ ڪنيڪشن ٺاهي سگھن ٿيون. اهو ٿي سگهي ٿو ڪنٽرڪ (لينڪس نيٽ ورڪنگ اسٽيڪ جو هڪ بنيادي حصو) ميموري ختم ٿيڻ لاءِ. روايتي طور تي، لينڪس تي هن قسم جي ايپليڪيشنن کي هلائڻ لاء، توهان کي دستي طور تي ترتيب ڏيڻ يا غير فعال ڪرڻو پوندو conntrack، يا لکڻو پوندو iptables ضابطن کي بائي پاس ڪرڻ لاء. Calico ۾ اڻڄاتل پاليسي هڪ آسان ۽ وڌيڪ ڪارائتو اختيار آهي جيڪڏهن توهان ڪنيڪشن کي جلدي ممڪن طور تي پروسيس ڪرڻ چاهيو ٿا. مثال طور، جيڪڏهن توهان وڏي پيماني تي استعمال ڪريو ٿا يادگار يا خلاف تحفظ جي اضافي ماپ جي طور تي ڊي ڊي.

هي پڙهو بلاگ پوسٽ (يا اسان جو ترجمو) وڌيڪ معلومات لاءِ، بشمول غير ٽريڪ ٿيل پاليسي استعمال ڪندي ڪارڪردگي جا امتحان.

جڏهن توهان سيٽ ڪريو "doNotTrack: true" آپشن Calico globalNetworkPolicy ۾، اها هڪ ** untracked** پاليسي بڻجي ويندي آهي ۽ لينڪس پيڪٽ پروسيسنگ پائپ لائن ۾ تمام جلد لاڳو ٿيندي آهي. مٿي ڏنل آريگرام کي ڏسندي، ڪنيڪشن ٽريڪنگ (ڪنٽراڪ) شروع ٿيڻ کان اڳ خام جدول ۾ PREROUTING ۽ OUTPUT زنجيرن ۾ غير ٽريڪ ٿيل پاليسيون لاڳو ٿين ٿيون. جڏهن هڪ پيڪٽ جي اجازت ڏني وئي آهي غير ٽريڪ ٿيل پاليسي طرفان، اهو نشان لڳايو ويو آهي ته ان پيڪٽ لاء ڪنيڪشن ٽريڪنگ کي غير فعال ڪرڻ لاء. ان جو مطلب آهي ته:

  • غير ٽريڪ ٿيل پاليسي في پيڪٽ جي بنياد تي لاڳو ڪئي وئي آهي. ڪنيڪشن جو ڪو تصور (يا وهڪري) ناهي. ڪنيڪشن جي کوٽ جا ڪيترائي اهم نتيجا آهن:
  • جيڪڏھن توھان چاھيو ٿا ٻنھي درخواستن ۽ جوابي ٽرئفڪ کي اجازت ڏيو، توھان کي ان بائونڊ ۽ آئوٽ بائونڊ ٻنھي لاءِ قاعدي جي ضرورت آھي (جيئن ته Calico عام طور تي جوابي ٽريفڪ کي اجازت ڏيڻ لاءِ ڪنٽرڪ استعمال ڪندو آھي).
  • غير ٽريڪ ٿيل پاليسي ڪبرنيٽس ڪم لوڊ (پوڊ) لاءِ ڪم نه ڪندي آهي، ڇاڪاڻ ته هن حالت ۾ پوڊ مان نڪرندڙ ڪنيڪشن کي ٽريڪ ڪرڻ جو ڪو طريقو ناهي.
  • NAT صحيح طريقي سان ڪم نه ڪندو آهي اڻ ٽر ٿيل پيڪٽس سان (جيئن ته ڪرنل NAT ميپنگ کي ڪنٽريڪ ۾ محفوظ ڪري ٿو).
  • جڏهن غير ٽريڪ ٿيل پاليسي ۾ "سڀني کي اجازت ڏيو" قاعدي مان گذري رهيا آهن، سڀ پيڪيٽ کي نشان لڳل طور نشان لڳايو ويندو. اهو لڳ ڀڳ هميشه اهو نه هوندو آهي جيڪو توهان چاهيو ٿا، تنهن ڪري اهو ضروري آهي ته غير ٽريڪ ٿيل پاليسين جي اجازت ڏنل پيڪيٽس بابت تمام گهڻو چونڊيو وڃي (۽ اڪثر ٽرئفڪ کي عام ٽريڪ ٿيل پاليسين ذريعي وڃڻ جي اجازت ڏيو).
  • اڻڄاتل پاليسيون پيڪٽ پروسيسنگ پائپ لائن جي شروعات ۾ لاڳو ٿينديون آهن. اهو سمجهڻ تمام ضروري آهي جڏهن Calico پاليسيون ٺاهي رهيا آهن. توھان وٽ پوڊ پاليسي آھي آرڊر سان: 1 ۽ ھڪڙي غير ٽريڪ ٿيل پاليسي آرڊر سان: 1000. ڪا ڳالهه نه ٿيندي. Untracked پاليسي پوڊ لاءِ پاليسي کان اڳ لاڳو ڪئي ويندي. اڻ سڌريل پاليسيون صرف پاڻ ۾ عملدرآمد جي حڪم جو احترام ڪن ٿيون.

ڇاڪاڻ ته doNotTrack پاليسي جو هڪ مقصد لينڪس پيڪيٽ پروسيسنگ پائيپ لائين ۾ پاليسي کي تمام جلد لاڳو ڪرڻ آهي، ڪيليڪو ان کي لازمي بڻائي ٿو ته لاڳو ڪرڻ لاءِ مقرر ڪيو وڃي. پيڪٽ پروسيسنگ ڊاگرام ڏانهن اشارو ڪندي، نوٽ ڪريو ته اڻڄاتل (5) پاليسي لاڳو ڪئي وئي آهي ڪنهن به رستي جي فيصلن کان اڳ. ٽرئفڪ کي ميزبان جي عمل ڏانهن هدايت ڪري سگهجي ٿو، يا اهو پوڊ يا ٻئي نوڊ ڏانهن اڳتي وڌائي سگهجي ٿو.

نتيجو

اسان ڪيليڪو ۾ مختلف پاليسي آپشنز (ميزبان جي آخر پوائنٽ، ApplyOnForward، preDNAT، ۽ Untracked) کي ڏٺو ۽ ڪيئن اهي پيڪٽ پروسيسنگ رستي تي لاڳو ٿين ٿا. اهو سمجهڻ ته اهي ڪيئن ڪم ڪن ٿيون موثر ۽ محفوظ پاليسيون ٺاهڻ ۾. Calico سان توهان استعمال ڪري سگهو ٿا هڪ گلوبل نيٽ ورڪ پاليسي جيڪا هڪ ليبل تي لاڳو ٿئي ٿي (نوڊس ۽ پوڊس جو هڪ گروپ) ۽ مختلف پيٽرولن سان پاليسيون لاڳو ڪريو. هي سيڪيورٽي ۽ نيٽ ورڪ ڊيزائن جي ماهرن کي اجازت ڏئي ٿو ته آساني سان ”هر شي“ (آخري پوائنٽ جي قسمن) کي هڪ ڀيرو استعمال ڪندي هڪ واحد پاليسي ٻولي استعمال ڪندي ڪيليڪو پاليسين سان.

اعتراف: مان شڪر ڪرڻ چاهيان ٿو شان ڪرمپٽن и Alexa Pollitta انهن جي نظرثاني ۽ قيمتي معلومات لاء.

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

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