ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

مضمون جو مقصد پڙهندڙن کي متعارف ڪرائڻ آهي نيٽ ورڪنگ جي بنيادي ڳالهين کي متعارف ڪرائڻ ۽ نيٽ ورڪ پاليسين کي منظم ڪرڻ Kubernetes، انهي سان گڏ ٽئين پارٽي ڪيليڪو پلگ ان جيڪو معياري صلاحيتن کي وڌائيندو آهي. رستي ۾، ترتيب جي آسانيءَ ۽ ڪجھ خصوصيتن کي اسان جي آپريٽنگ تجربي مان حقيقي مثال استعمال ڪندي ڏيکاريو ويندو.

Kubernetes نيٽ ورڪنگ آلات جو هڪ تڪڙو تعارف

هڪ Kubernetes ڪلستر نيٽ ورڪ کان سواء تصور نه ٿو ڪري سگهجي. اسان اڳ ۾ ئي شايع ڪيو آهي مواد انهن جي بنيادن تي:Kubernetes ۾ نيٽ ورڪنگ لاءِ هڪ نمايان گائيڊ"۽"سيڪيورٽي پروفيشنلز لاءِ ڪبرنيٽس نيٽورڪ پاليسين جو هڪ تعارف».

هن آرٽيڪل جي حوالي سان، اهو نوٽ ڪرڻ ضروري آهي ته K8s پاڻ ڪنٽينرز ۽ نوڊس جي وچ ۾ نيٽ ورڪ رابطي لاء ذميوار نه آهي: هن لاء، مختلف CNI پلگ ان (ڪنٽينر نيٽ ورڪنگ انٽرفيس). هن تصور جي باري ۾ وڌيڪ اسان انهن مون کي پڻ ٻڌايو.

مثال طور، انهن پلگ ان جو سڀ کان وڌيڪ عام آهي فلاليل - سڀني ڪلستر نوڊس جي وچ ۾ مڪمل نيٽ ورڪ ڪنيڪشن مهيا ڪري ٿي، هر نوڊ تي پل وڌائيندي، ان کي سب نيٽ تفويض ڪندي. بهرحال، مڪمل ۽ غير منظم رسائي هميشه فائدي وارو ناهي. ڪلستر ۾ ڪجهه قسم جي گهٽ ۾ گهٽ اڪيلائي کي يقيني بڻائڻ لاء، فائر وال جي ترتيب ۾ مداخلت ڪرڻ ضروري آهي. عام صورت ۾، اهو ساڳيو CNI جي ڪنٽرول هيٺ رکيل آهي، ڇو ته iptables ۾ ڪنهن به ٽئين پارٽي جي مداخلت کي غلط طور تي يا مڪمل طور تي نظر انداز ڪري سگهجي ٿو.

۽ "باڪس کان ٻاهر" هڪ Kubernetes ڪلستر ۾ نيٽ ورڪ پاليسي جي انتظام کي منظم ڪرڻ لاء مهيا ڪيل آهي نيٽورڪ پاليسي API. هي وسيلو، ورهايل چونڊيل نالن جي جڳهن تي، ضابطن تي مشتمل ٿي سگھي ٿو رسائي کي مختلف ڪرڻ لاءِ هڪ ايپليڪيشن کان ٻئي تائين. اهو توهان کي اجازت ڏئي ٿو ته توهان مخصوص پوڊس، ماحول (نالن جي جاء) يا IP پتي جي بلاڪ جي وچ ۾ رسائي کي ترتيب ڏيو:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

اهو سڀ کان وڌيڪ ابتدائي مثال نه آهي سرڪاري دستاويز شايد هڪ ڀيرو ۽ سڀني لاءِ نيٽ ورڪ پاليسين جي ڪم جي منطق کي سمجهڻ جي خواهش کي حوصلا افزائي ڪري. تنهن هوندي، اسان اڃا تائين بنيادي اصولن ۽ پروسيسنگ ٽرئفڪ جي وهڪري جي طريقن کي سمجهڻ جي ڪوشش ڪنداسين نيٽ ورڪ پاليسين استعمال ڪندي...

اهو منطقي آهي ته ٽرئفڪ جا 2 قسم آهن: پوڊ ۾ داخل ٿيڻ (انگريس) ۽ ان مان نڪرڻ (Egress).

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

دراصل سياست کي تحريڪ جي رخ جي بنياد تي انهن 2 ڀاڱن ۾ ورهايو ويو آهي.

ايندڙ گهربل خاصيت هڪ چونڊيندڙ آهي؛ جنهن تي ضابطو لاڳو ٿئي ٿو. اهو هڪ پوڊ (يا پوڊ جو هڪ گروپ) يا ماحول (يعني نالي جي جڳهه) ٿي سگهي ٿو. هڪ اهم تفصيل: انهن شين جي ٻنهي قسمن ۾ هڪ ليبل هجڻ گهرجي (سلفي ڪبرنيٽس جي اصطلاحن ۾) - اهي اهي آهن جن سان سياستدان هلن ٿا.

ان کان علاوه منتخب ڪندڙن جي هڪ محدود تعداد سان گڏ جيڪي ڪجهه قسم جي ليبل سان متحد آهن، اهو ممڪن آهي ته ضابطن کي لکڻو هجي جهڙوڪ "سڀني کي اجازت ڏيو/هر ڪنهن کي" مختلف تبديلين ۾. هن مقصد لاء، فارم جي تعميرات استعمال ٿيل آهن:

  podSelector: {}
  ingress: []
  policyTypes:
  - Ingress

- هن مثال ۾، ماحول ۾ سڀ پوڊ ايندڙ ٽرئفڪ کان روڪيا ويا آهن. سامهون واري رويي کي هيٺين تعمير سان حاصل ڪري سگهجي ٿو:

  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress

ساڳئي طرح ٻاهر وڃڻ لاء:

  podSelector: {}
  policyTypes:
  - Egress

- ان کي بند ڪرڻ لاء. ۽ هتي ڇا شامل ڪرڻ آهي:

  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

ڪلستر لاءِ CNI پلگ ان جي چونڊ ڏانھن موٽڻ، اھو قابل ذڪر آھي هر نيٽ ورڪ پلگ ان نيٽ ورڪ پاليسي کي سپورٽ نٿو ڪري. مثال طور، اڳ ۾ ئي ذڪر ڪيل Flannel کي خبر ناهي ته نيٽ ورڪ پاليسين کي ڪيئن ترتيب ڏيڻ، جيڪو اهو سڌو سنئون چيو ويندو آهي سرڪاري مخزن ۾. ھڪڙو متبادل پڻ ذڪر ڪيو ويو آھي - ھڪڙو اوپن سورس پروجيڪٽ ڪيليڪو، جيڪو خاص طور تي نيٽ ورڪ پاليسين جي لحاظ کان Kubernetes APIs جي معياري سيٽ کي وڌائي ٿو.

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

Calico ڄاڻڻ: نظريو

ڪيليڪو پلگ ان کي استعمال ڪري سگھجي ٿو فلانيل (ذيلي پروجيڪٽ ڪئنال) يا آزاد طور تي، ٻنهي نيٽ ورڪ رابطي ۽ دستيابي جي انتظام جي صلاحيتن کي ڍڪيندي.

K8s استعمال ڪندي ڪھڙا موقعا “باڪس ٿيل” حل ۽ API سيٽ ڪيليڪو مان مهيا ڪن ٿا؟

هتي اهو آهي جيڪو نيٽورڪ پاليسي ۾ ٺاهيو ويو آهي:

  • سياستدان ماحول کان محدود آهن؛
  • پاليسيون ليبل سان نشان لڳل پوڊ تي لاڳو ٿين ٿيون.
  • ضابطا پوڊ، ماحول يا ذيلي نيٽ تي لاڳو ٿي سگهن ٿا.
  • ضابطن ۾ شامل ٿي سگھي ٿو پروٽوڪول، نالي يا علامتي پورٽ وضاحتون.

هتي اهو آهي ته ڪيليڪو انهن ڪمن کي ڪيئن وڌائي ٿو:

  • پاليسيون ڪنهن به اعتراض تي لاڳو ٿي سگهن ٿيون: پوڊ، ڪنٽينر، ورچوئل مشين يا انٽرفيس؛
  • ضابطن ۾ هڪ مخصوص عمل شامل ٿي سگھي ٿو (ممنوع، اجازت، لاگنگ)؛
  • ھدف يا ضابطن جو ذريعو ھڪڙو بندرگاھ ٿي سگھي ٿو، بندرگاھن جي ھڪڙي حد، پروٽوڪول، HTTP يا ICMP خاصيتون، IP يا سب نيٽ (4th يا 6th نسل)، ڪو به چونڊيندڙ (نوڊس، ھوسٽ، ماحول)؛
  • اضافي طور تي، توهان DNAT سيٽنگون ۽ ٽرئفڪ فارورڊنگ پاليسين استعمال ڪندي ٽرئفڪ جي گذرڻ کي منظم ڪري سگهو ٿا.

GitHub تي ڪيليڪو ريپوزٽري جي تاريخ ۾ پهريون ڪم ڪيو ويو جولاءِ 2016 ۾، ۽ هڪ سال بعد پروجيڪٽ ڪبرنيٽس نيٽ ورڪ ڪنيڪشن کي منظم ڪرڻ ۾ هڪ اهم پوزيشن ورتي - اهو ثبوت آهي، مثال طور، سروي جي نتيجن طرفان، نيو اسٽيڪ پاران ڪيل:

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

K8s سان ڪيترائي وڏا منظم حل، جهڙوڪ Amazon EKS, Azure AKS, گوگل جي جي اي ۽ ٻيا ان جي استعمال لاءِ سفارش ڪرڻ لڳا.

ڪارڪردگي لاء، هتي هر شيء عظيم آهي. انهن جي پيداوار جي جانچ ڪرڻ ۾، ڪيليڪو ڊولپمينٽ ٽيم ڪلاسيڪل ڪارڪردگي جو مظاهرو ڪيو، 50000 کان وڌيڪ ڪنٽينرز کي 500 جسماني نوڊس تي 20 ڪنٽينرز في سيڪنڊ جي تخليق جي شرح سان هلائي. اسڪيلنگ سان ڪوبه مسئلو نه سڃاتو ويو. اهڙا نتيجا اعلان ڪيا ويا اڳ ۾ ئي پهرين نسخي جي اعلان تي. آزاد مطالعي تي ڌيان ڏيڻ ۽ وسيلن جي استعمال تي ڌيان ڏيڻ پڻ تصديق ڪن ٿا ڪيليڪو جي ڪارڪردگي تقريبن فلانيل جي طور تي سٺي آهي. مثال طور:

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

پروجيڪٽ تمام تيزي سان ترقي ڪري رهيو آهي، اهو مشهور حلن ۾ ڪم جي حمايت ڪري ٿو منظم ڪيل K8s، OpenShift، OpenStack، اهو ممڪن آهي ته Calico استعمال ڪرڻ وقت جڏهن ڪلستر استعمال ڪندي استعمال ڪيو وڃي. ڪوپسسروس ميش نيٽ ورڪ جي تعمير جا حوالا آهن (هتي هڪ مثال آهي Istio سان گڏ استعمال ڪيو ويو).

Calico سان مشق ڪريو

وينلا ڪبرنيٽس استعمال ڪرڻ جي عام صورت ۾، CNI انسٽال ڪرڻ فائل کي استعمال ڪرڻ لاء ھيٺ اچي ٿو calico.yaml, سرڪاري ويب سائيٽ تان ڊائون لوڊ، استعمال ڪندي kubectl apply -f.

ضابطي جي طور تي، پلگ ان جو موجوده نسخو Kubernetes جي جديد 2-3 ورزن سان مطابقت رکي ٿو: پراڻن ورزن ۾ آپريشن آزمائشي نه آهي ۽ ضمانت نه آهي. ڊولپرز جي مطابق، ڪيليڪو 3.10 کان مٿي لينڪس ڪنلز تي هلندو آهي CentOS 7، Ubuntu 16 يا Debian 8، iptables يا IPVS جي مٿان.

ماحول ۾ اڪيلائي

عام سمجھڻ لاءِ، اچو ته ھڪ سادو ڪيس ڏسون سمجھڻ لاءِ ته ڪيئن نيٽ ورڪ پاليسيون ڪيليڪو نوٽشن ۾ معياري پاليسين کان مختلف آھن ۽ قاعدن کي ٺاھڻ جو طريقو انھن جي پڙھڻ جي قابليت ۽ ترتيب جي لچڪ کي ڪيئن آسان بڻائي ٿو:

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

ڪلستر ۾ 2 ويب ايپليڪيشنون لڳايون ويون آهن: Node.js ۽ PHP ۾، جن مان هڪ Redis استعمال ڪري ٿي. PHP کان Redis تائين رسائي کي بلاڪ ڪرڻ لاء، Node.js سان رابطي کي برقرار رکڻ دوران، صرف هيٺين پاليسي لاڳو ڪريو:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-redis-nodejs
spec:
  podSelector:
    matchLabels:
      service: redis
  ingress:
  - from:
    - podSelector:
        matchLabels:
          service: nodejs
    ports:
    - protocol: TCP
      port: 6379

لازمي طور تي اسان Node.js کان Redis بندرگاهه تي ايندڙ ٽرئفڪ جي اجازت ڏني. ۽ انهن واضح طور تي ٻيو ڪجهه به منع نه ڪيو. جيئن ئي نيٽ ورڪ پاليسي ظاهر ٿئي ٿي، ان ۾ ذڪر ڪيل سڀئي چونڊيندڙ الڳ ٿيڻ شروع ڪن ٿا، جيستائين ٻي صورت ۾ بيان نه ڪيو وڃي. بهرحال، اڪيلائي جا ضابطا لاڳو نٿا ٿين ٻين شين تي جيڪي چونڊيندڙ طرفان شامل نه آهن.

مثال استعمال ڪري ٿو apiVersion ڪبرنيٽس دٻي مان ٻاهر، پر ڪجھ به توهان کي ان کي استعمال ڪرڻ کان روڪيو ڪيليڪو ترسيل مان ساڳئي نالي جو وسيلو. اتي نحو وڌيڪ تفصيلي آهي، تنهنڪري توهان کي هيٺين صورت ۾ مٿين صورت لاء قاعدو ٻيهر لکڻو پوندو:

apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: allow-redis-nodejs
spec:
  selector: service == 'redis'
  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: service == 'nodejs'
    destination:
      ports:
      - 6379

باقاعده NetworkPolicy API جي ذريعي سموري ٽرئفڪ کي اجازت ڏيڻ يا رد ڪرڻ لاءِ مٿي بيان ڪيل تعميرات قوس سان ٺهيل آهن جن کي سمجهڻ ۽ ياد رکڻ ڏکيو آهي. Calico جي صورت ۾، هڪ فائر وال قاعدي جي منطق کي سامهون آڻڻ لاء، صرف تبديل ڪريو action: Allow تي action: Deny.

ماحول طرفان اڪيلائي

ھاڻي ھڪڙي صورتحال جو تصور ڪريو جتي ھڪڙي ايپليڪيشن پيدا ڪري ٿي ڪاروباري ميٽرڪ گڏ ڪرڻ لاءِ Prometheus ۽ وڌيڪ تجزيو Grafana استعمال ڪندي. اپلوڊ حساس ڊيٽا تي مشتمل ٿي سگھي ٿو، جيڪو ٻيهر عام طور تي ڊفالٽ طور ڏسي سگھجي ٿو. اچو ته هن ڊيٽا کي ڇڪڻ واري اکين کان لڪايو:

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

Prometheus، ضابطي جي طور تي، هڪ الڳ خدمت ماحول ۾ رکيل آهي - مثال طور اهو هڪ نالي جي جڳهه هن طرح هوندو:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    module: prometheus
  name: kube-prometheus

ميدان metadata.labels اهو ڪو حادثو نه ٿيو. جيئن مٿي ذڪر ڪيو ويو آهي، namespaceSelector (اهڙي طرح podSelector) ليبل سان ڪم ڪري ٿو. تنهن ڪري، هڪ مخصوص بندرگاهه تي سڀني پوڊس مان ميٽرڪ وٺڻ جي اجازت ڏيڻ لاءِ، توهان کي ڪجهه قسم جو ليبل شامل ڪرڻو پوندو (يا موجوده وارن مان وٺو)، ۽ پوءِ هڪ ترتيب لاڳو ڪريو جيئن:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-metrics-prom
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          module: prometheus
    ports:
    - protocol: TCP
      port: 9100

۽ جيڪڏھن توھان استعمال ڪريو Calico پاليسين، نحو ھن طرح ھوندو:

apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: allow-metrics-prom
spec:
  ingress:
  - action: Allow
    protocol: TCP
    source:
      namespaceSelector: module == 'prometheus'
    destination:
      ports:
      - 9100

عام طور تي، خاص ضرورتن لاءِ هن قسم جي پاليسين کي شامل ڪرڻ سان، توهان ڪلستر ۾ ايپليڪيشنن جي آپريشن ۾ خراب يا حادثاتي مداخلت کان بچائي سگهو ٿا.

بهترين عمل، ڪيليڪو جي تخليق ڪندڙن جي مطابق، "هر شي کي بلاڪ ڪريو ۽ واضح طور تي کوليو جيڪو توهان کي گهربل آهي" طريقو آهي، دستاويز ۾ سرڪاري دستاويز (ٻيا ساڳئي طريقي جي پيروي ڪندا آهن - خاص طور تي، ۾ اڳ ۾ ئي ذڪر ڪيل مضمون).

اضافي ڪيليڪو شيون استعمال ڪندي

مون کي توهان کي ياد ڏياريو ته ڪيليڪو APIs جي وڌايل سيٽ ذريعي توهان نوڊس جي دستيابي کي منظم ڪري سگهو ٿا، پوڊ تائين محدود ناهي. هيٺين مثال ۾ استعمال ڪندي GlobalNetworkPolicy ڪلستر ۾ ICMP درخواستن کي پاس ڪرڻ جي صلاحيت بند ٿيل آهي (مثال طور، پنگ هڪ پوڊ کان نوڊ تائين، پوڊ جي وچ ۾، يا نوڊ کان IP پوڊ تائين):

apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: block-icmp
spec:
  order: 200
  selector: all()
  types:
  - Ingress
  - Egress
  ingress:
  - action: Deny
    protocol: ICMP
  egress:
  - action: Deny
    protocol: ICMP

مٿين صورت ۾، اهو اڃا تائين ممڪن آهي ته ڪلستر نوڊس لاء "پھچڻ" هڪ ٻئي تائين ICMP ذريعي. ۽ اهو مسئلو ذريعي حل ڪيو ويندو GlobalNetworkPolicy، هڪ اداري تي لاڳو HostEndpoint:

apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: deny-icmp-kube-02
spec:
  selector: "role == 'k8s-node'"
  order: 0
  ingress:
  - action: Allow
    protocol: ICMP
  egress:
  - action: Allow
    protocol: ICMP
---
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
  name: kube-02-eth0
  labels:
    role: k8s-node
spec:
  interfaceName: eth0
  node: kube-02
  expectedIPs: ["192.168.2.2"]

وي پي اين ڪيس

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

ڪبرنيٽس ۾ نيٽ ورڪنگ لاء ڪيليڪو: تعارف ۽ ٿورو تجربو

ڪلائنٽ معياري UDP پورٽ 1194 ذريعي VPN سان ڳنڍيندا آهن ۽، جڏهن ڳنڍجي ويندا آهن، رستا وصول ڪندا آهن پوڊس ۽ خدمتن جي ڪلسٽر سبنيٽس ڏانهن. سڄا ذيلي نيٽ دٻايا ويا آهن ته جيئن ٻيهر شروع ڪرڻ ۽ ايڊريس تبديل ڪرڻ وقت خدمتون نه وڃائجن.

ترتيب ۾ بندرگاهه معياري آهي، جيڪو ايپليڪيشن کي ترتيب ڏيڻ ۽ ان کي ڪبرنيٽس ڪلستر ڏانهن منتقل ڪرڻ جي عمل تي ڪجهه نونسن کي لاڳو ڪري ٿو. مثال طور، ساڳئي AWS LoadBalancer ۾ UDP لاءِ لفظي طور تي گذريل سال جي آخر ۾ علائقن جي هڪ محدود فهرست ۾ ظاهر ٿيو، ۽ NodePort استعمال نه ٿو ڪري سگهجي ان جي فارورڊنگ جي ڪري سڀني ڪلسٽر نوڊس تي ۽ ان لاءِ سرور مثالن جي تعداد کي ماپڻ ناممڪن آهي. غلطي برداشت ڪرڻ جا مقصد. ان سان گڏ، توهان کي بندرگاهن جي ڊفالٽ رينج کي تبديل ڪرڻو پوندو ...

ممڪن حل ڳولڻ جي نتيجي ۾، هيٺيان چونڊيو ويو:

  1. وي پي اين سان پوڊس في نوڊ ۾ شيڊول ٿيل آهن hostNetwork، يعني اصل IP ڏانهن.
  2. خدمت ذريعي ٻاهر پوسٽ ڪئي وئي آهي ClusterIP. هڪ بندرگاهه جسماني طور تي نوڊ تي نصب ٿيل آهي، جيڪا ٻاهران رسائي آهي معمولي تحفظات سان (حقيقي IP پتي جي مشروط موجودگي).
  3. نوڊ جو تعين ڪرڻ جنهن تي پوڊ گلاب اسان جي ڪهاڻي جي دائري کان ٻاهر آهي. مان صرف ايترو چوندس ته توهان خدمت کي مضبوطيءَ سان ”نيل“ ڪري سگهو ٿا هڪ نوڊ ڏانهن يا هڪ ننڍڙي سائڊ ڪار سروس لکي سگهو ٿا جيڪا VPN سروس جي موجوده IP پتي جي نگراني ڪندي ۽ ڪلائنٽ سان رجسٽر ٿيل DNS رڪارڊ کي ايڊٽ ڪندي - جنهن وٽ ڪافي تخيل آهي.

رستي جي نقطي نظر کان، اسان منفرد طور تي سڃاڻپ ڪري سگھون ٿا هڪ وي پي اين ڪلائنٽ ان جي IP پتي طرفان جاري ڪيل VPN سرور طرفان. ھيٺ ڏنل ھڪڙو مثال آھي ھڪڙي ڪلائنٽ جي خدمتن تائين رسائي کي محدود ڪرڻ جو، مٿي بيان ڪيل Redis تي بيان ڪيو ويو آھي:

apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
  name: vpnclient-eth0
  labels:
    role: vpnclient
    environment: production
spec:
  interfaceName: "*"
  node: kube-02
  expectedIPs: ["172.176.176.2"]
---
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: vpn-rules
spec:
  selector: "role == 'vpnclient'"
  order: 0
  applyOnForward: true
  preDNAT: true
  ingress:
  - action: Deny
    protocol: TCP
    destination:
      ports: [6379]
  - action: Allow
    protocol: UDP
    destination:
      ports: [53, 67]

هتي، بندرگاهن 6379 سان ڳنڍڻ سختي سان منع ٿيل آهي، پر ساڳئي وقت DNS سروس جي آپريشن کي محفوظ ڪيو ويو آهي، جنهن جي ڪارڪردگي اڪثر ڪري ٿو جڏهن ضابطن کي ٺاهيندي. ڇاڪاڻ ته، جيئن اڳ ذڪر ڪيو ويو آهي، جڏهن هڪ چونڊيندڙ ظاهر ٿئي ٿو، ڊفالٽ رد ڪرڻ واري پاليسي ان تي لاڳو ٿئي ٿي جيستائين ٻي صورت ۾ بيان نه ڪيو وڃي.

نتيجو

اهڙيء طرح، Calico جي ترقي يافته API استعمال ڪندي، توهان لچڪدار طريقي سان ترتيب ڏئي سگهو ٿا ۽ متحرڪ طور تي ڪلستر جي اندر ۽ چوڌاري رستن کي تبديل ڪري سگهو ٿا. عام طور تي، ان جو استعمال ڏسڻ ۾ اچي سگھي ٿو تپ سان اسپاررو کي مارڻ، ۽ BGP ۽ IP-IP سرنگن سان L3 نيٽ ورڪ کي لاڳو ڪرڻ فليٽ نيٽ ورڪ تي سادي ڪبرنيٽس جي تنصيب ۾ خوفناڪ نظر اچي ٿو... جڏهن ته، ٻي صورت ۾ اهو اوزار ڪافي قابل عمل ۽ ڪارائتو نظر اچي ٿو. .

سيڪيورٽي گهرجن کي پورو ڪرڻ لاءِ ڪلستر کي الڳ ڪرڻ هميشه ممڪن نه ٿي سگهي، ۽ اهو آهي جتي ڪيليڪو (يا ساڳيو حل) بچاءُ لاءِ اچي ٿو. هن مضمون ۾ ڏنل مثالن (ننڍڙي تبديلين سان) اسان جي گراهڪن جي ڪيترن ئي تنصيبن ۾ AWS ۾ استعمال ڪيا ويا آهن.

پي ايس

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

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

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