Κατανόηση των επιλογών πολιτικής δικτύου με το Calico

Κατανόηση των επιλογών πολιτικής δικτύου με το Calico

Το πρόσθετο δικτύου Calico παρέχει ένα ευρύ φάσμα πολιτικών δικτύου με ενοποιημένη σύνταξη για την προστασία κεντρικών υπολογιστών υλικού, εικονικών μηχανών και λοβών. Αυτές οι πολιτικές μπορούν να εφαρμοστούν σε έναν χώρο ονομάτων ή να είναι γενικές πολιτικές δικτύου που ισχύουν για τελικό σημείο κεντρικού υπολογιστή (για προστασία εφαρμογών που εκτελούνται απευθείας στον κεντρικό υπολογιστή - ο κεντρικός υπολογιστής μπορεί να είναι διακομιστής ή εικονική μηχανή) ή τελικό σημείο φόρτου εργασίας (για προστασία εφαρμογών που εκτελούνται σε κοντέινερ ή φιλοξενούμενες εικονικές μηχανές). Οι πολιτικές Calico σάς επιτρέπουν να εφαρμόζετε μέτρα ασφαλείας σε διάφορα σημεία της διαδρομής ενός πακέτου χρησιμοποιώντας επιλογές όπως το preDNAT, το unraracked και το applicationOnForward. Η κατανόηση του τρόπου λειτουργίας αυτών των επιλογών μπορεί να βοηθήσει στη βελτίωση της ασφάλειας και της απόδοσης του συνολικού σας συστήματος. Αυτό το άρθρο εξηγεί την ουσία αυτών των επιλογών πολιτικής Calico (preDNAT, unraracked και applyOnForward) που εφαρμόζονται στα τελικά σημεία κεντρικού υπολογιστή, με έμφαση στο τι συμβαίνει στις διαδρομές επεξεργασίας πακέτων (αλυσίδες iptabels).

Αυτό το άρθρο προϋποθέτει ότι έχετε μια βασική κατανόηση του τρόπου λειτουργίας των πολιτικών δικτύου Kubernetes και Calico. Αν όχι, συνιστούμε να το δοκιμάσετε μάθημα βασικής πολιτικής δικτύου и φροντιστήριο προστασίας κεντρικού υπολογιστή χρησιμοποιώντας το Calico πριν διαβάσετε αυτό το άρθρο. Περιμένουμε επίσης να έχετε μια βασική κατανόηση του έργου iptables σε linux.

τσίτι παγκόσμια πολιτική δικτύου σας επιτρέπει να εφαρμόσετε ένα σύνολο κανόνων πρόσβασης ανά ετικέτες (σε ομάδες κεντρικών υπολογιστών και φόρτους εργασίας/ομάδες). Αυτό είναι πολύ χρήσιμο εάν χρησιμοποιείτε ετερογενή συστήματα μαζί - εικονικές μηχανές, ένα σύστημα απευθείας σε υλικό ή μια υποδομή kubernetes. Επιπλέον, μπορείτε να προστατεύσετε το σύμπλεγμα (κόμβους) σας χρησιμοποιώντας ένα σύνολο δηλωτικών πολιτικών και να εφαρμόσετε πολιτικές δικτύου στην εισερχόμενη κίνηση (για παράδειγμα, μέσω της υπηρεσίας NodePorts ή Εξωτερικών IP).

Σε ένα θεμελιώδες επίπεδο, όταν το Calico συνδέει ένα pod στο δίκτυο (βλ. παρακάτω διάγραμμα), το συνδέει με τον κεντρικό υπολογιστή χρησιμοποιώντας μια εικονική διεπαφή Ethernet (veth). Η επισκεψιμότητα που αποστέλλεται από το pod έρχεται στον κεντρικό υπολογιστή από αυτήν την εικονική διεπαφή και υποβάλλεται σε επεξεργασία με τον ίδιο τρόπο σαν να προέρχεται από μια φυσική διεπαφή δικτύου. Από προεπιλογή, το Calico ονομάζει αυτές τις διεπαφές caliXXX. Δεδομένου ότι η κίνηση έρχεται μέσω της εικονικής διεπαφής, περνά μέσα από τα iptables σαν το pod να ήταν ένα hop μακριά. Επομένως, όταν η κίνηση έρχεται προς/από ένα pod, προωθείται από την οπτική γωνία του κεντρικού υπολογιστή.

Σε έναν κόμβο Kubernetes που εκτελεί το Calico, μπορείτε να αντιστοιχίσετε μια εικονική διεπαφή (veth) σε ένα φόρτο εργασίας ως εξής. Στο παρακάτω παράδειγμα, μπορείτε να δείτε ότι το veth#10 (calic1cbf1ca0f8) είναι συνδεδεμένο με το cnx-manager-* στον χώρο ονομάτων calico-monitoring.

[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

Δεδομένου ότι το Calico δημιουργεί μια διεπαφή veth για κάθε φόρτο εργασίας, πώς επιβάλλει τις πολιτικές; Για να γίνει αυτό, το Calico δημιουργεί άγκιστρα σε διάφορες αλυσίδες της διαδρομής επεξεργασίας πακέτων χρησιμοποιώντας iptables.

Το παρακάτω διάγραμμα δείχνει τις αλυσίδες που εμπλέκονται στην επεξεργασία πακέτων σε iptables (ή στο υποσύστημα netfilter). Όταν ένα πακέτο φθάνει μέσω μιας διεπαφής δικτύου, περνά πρώτα από την αλυσίδα PREROUTING. Στη συνέχεια λαμβάνεται μια απόφαση δρομολόγησης, και με βάση αυτό, το πακέτο περνά είτε μέσω INPUT (κατευθυνόμενη σε διεργασίες κεντρικού υπολογιστή) είτε FORWARD (κατευθύνεται σε ένα pod ή σε άλλο κόμβο στο δίκτυο). Από την τοπική διαδικασία, το πακέτο περνά από την αλυσίδα OUTPUT και μετά POSTROUTING πριν σταλεί στο καλώδιο.

Σημειώστε ότι το pod είναι επίσης μια εξωτερική οντότητα (συνδεδεμένη με το veth) όσον αφορά την επεξεργασία iptables. Ας συνοψίσουμε:

  • Η προωθούμενη κίνηση (nat, routed ή προς/από ένα pod) διέρχεται από τις αλυσίδες PREROUTING - FORWARD - POSTROUTING.
  • Η επισκεψιμότητα προς την τοπική διαδικασία κεντρικού υπολογιστή διέρχεται από την αλυσίδα PREROUTING - INPUT.
  • Η επισκεψιμότητα από τη διαδικασία τοπικού κεντρικού υπολογιστή διέρχεται από την αλυσίδα OUTPUT - POSTROUTING.

Κατανόηση των επιλογών πολιτικής δικτύου με το Calico

Το Calico παρέχει επιλογές πολιτικής που σας επιτρέπουν να εφαρμόζετε πολιτικές σε όλες τις αλυσίδες. Έχοντας αυτό υπόψη, ας δούμε τις διαφορετικές επιλογές διαμόρφωσης πολιτικής που είναι διαθέσιμες στο Calico. Οι αριθμοί στη λίστα επιλογών παρακάτω αντιστοιχούν στους αριθμούς στο παραπάνω διάγραμμα.

  1. Πολιτική τερματικού φόρτου εργασίας (pod).
  2. Πολιτική τελικού σημείου κεντρικού υπολογιστή
  3. Επιλογή ApplyOnForward
  4. Πολιτική PreDNAT
  5. Πολιτική χωρίς παρακολούθηση

Ας ξεκινήσουμε εξετάζοντας πώς εφαρμόζονται οι πολιτικές στα τελικά σημεία φόρτου εργασίας (Kubernetes pods ή OpenStack VM) και, στη συνέχεια, εξετάστε τις επιλογές πολιτικής για τα τελικά σημεία κεντρικού υπολογιστή.

Καταληκτικά σημεία φόρτου εργασίας

Πολιτική τερματικού φόρτου εργασίας (1)

Αυτή είναι μια επιλογή για την προστασία των kubernetes pods σας. Το Calico υποστηρίζει τη συνεργασία με το Kubernetes NetworkPolicy, αλλά παρέχει επίσης πρόσθετες πολιτικές - Calico NetworkPolicy και GlobalNetworkPolicy. Το Calico δημιουργεί μια αλυσίδα για κάθε pod (φόρτο εργασίας) και συνδέει τις αλυσίδες INPUT και OUTPUT για το φόρτο εργασίας στον πίνακα φίλτρων της αλυσίδας FORWARD.

Καταληκτικά σημεία υποδοχής

Πολιτική τερματικού κεντρικού υπολογιστή (2)

Εκτός από το CNI (διεπαφή δικτύου κοντέινερ), οι πολιτικές Calico παρέχουν τη δυνατότητα προστασίας του ίδιου του κεντρικού υπολογιστή. Στο Calico, μπορείτε να δημιουργήσετε ένα τελικό σημείο κεντρικού υπολογιστή καθορίζοντας έναν συνδυασμό της διεπαφής κεντρικού υπολογιστή και, εάν είναι απαραίτητο, αριθμούς θυρών. Η επιβολή πολιτικής για αυτήν την οντότητα επιτυγχάνεται χρησιμοποιώντας έναν πίνακα φίλτρων στις αλυσίδες INPUT και OUTPUT. Όπως μπορείτε να δείτε από το διάγραμμα, (2) εφαρμόζονται σε τοπικές διεργασίες στον κόμβο/κεντρικό υπολογιστή. Δηλαδή, εάν δημιουργήσετε μια πολιτική που ισχύει για το τελικό σημείο του κεντρικού υπολογιστή, δεν θα επηρεάσει την επισκεψιμότητα που πηγαίνει προς/από τις ομάδες σας. Ωστόσο, παρέχει μια ενιαία διεπαφή/σύνταξη για τον αποκλεισμό της επισκεψιμότητας για τον κεντρικό υπολογιστή και τα pod σας χρησιμοποιώντας τις πολιτικές Calico. Αυτό απλοποιεί σε μεγάλο βαθμό τη διαδικασία διαχείρισης πολιτικών για ένα ετερογενές δίκτυο. Η διαμόρφωση πολιτικών τερματικού σημείου κεντρικού υπολογιστή για τη βελτίωση της ασφάλειας συμπλέγματος είναι μια άλλη σημαντική περίπτωση χρήσης.

Πολιτική ApplyOnForward (3)

Η επιλογή ApplyOnForward είναι διαθέσιμη στην παγκόσμια πολιτική δικτύου Calico για να επιτρέπει την εφαρμογή πολιτικών σε όλη την κίνηση που διέρχεται από το τελικό σημείο του κεντρικού υπολογιστή, συμπεριλαμβανομένης της κυκλοφορίας που θα προωθηθεί από τον κεντρικό υπολογιστή. Αυτό περιλαμβάνει κίνηση που προωθείται στο τοπικό pod ή οπουδήποτε αλλού στο δίκτυο. Το Calico απαιτεί να είναι ενεργοποιημένη αυτή η ρύθμιση για πολιτικές που χρησιμοποιούν PreDNAT και να μην παρακολουθείται, δείτε τις παρακάτω ενότητες. Επιπλέον, το ApplyOnForward μπορεί να χρησιμοποιηθεί για την παρακολούθηση της κυκλοφορίας του κεντρικού υπολογιστή σε περιπτώσεις όπου χρησιμοποιείται εικονικός δρομολογητής ή λογισμικό NAT.

Λάβετε υπόψη ότι εάν πρέπει να εφαρμόσετε την ίδια πολιτική δικτύου τόσο στις διεργασίες όσο και στις ομάδες κεντρικού υπολογιστή, τότε δεν χρειάζεται να χρησιμοποιήσετε την επιλογή ApplyOnForward. Το μόνο που χρειάζεται να κάνετε είναι να δημιουργήσετε μια ετικέτα για το απαιτούμενο τελικό σημείο υποδοχής και το τελικό σημείο φόρτου εργασίας (pod). Το Calico είναι αρκετά έξυπνο ώστε να επιβάλλει την πολιτική που βασίζεται σε ετικέτες, ανεξάρτητα από τον τύπο τελικού σημείου (hostendpoint ή φόρτο εργασίας).

Πολιτική PreDNAT (4)

Στο Kubernetes, οι θύρες οντοτήτων υπηρεσίας μπορούν να εκτεθούν εξωτερικά χρησιμοποιώντας την επιλογή NodePorts ή, προαιρετικά (όταν χρησιμοποιείται Calico), διαφημίζοντάς τες χρησιμοποιώντας τις επιλογές Cluster IP ή Εξωτερικές IP. Ο διακομιστής μεσολάβησης Kube εξισορροπεί την εισερχόμενη κίνηση που συνδέεται με μια υπηρεσία στα pods της αντίστοιχης υπηρεσίας χρησιμοποιώντας DNAT. Δεδομένου αυτού, πώς επιβάλλετε πολιτικές για την επισκεψιμότητα που έρχεται μέσω των NodePorts; Για να διασφαλιστεί ότι αυτές οι πολιτικές εφαρμόζονται πριν από την επεξεργασία της κίνησης από το DNAT (η οποία είναι μια αντιστοίχιση μεταξύ host:port και αντίστοιχης υπηρεσίας), το Calico παρέχει μια παράμετρο για το globalNetworkPolicy που ονομάζεται "preDNAT: true".

Όταν είναι ενεργοποιημένο το pre-DNAT, αυτές οι πολιτικές εφαρμόζονται στο (4) στο διάγραμμα - στον πίνακα mangle της αλυσίδας PREROUTING - αμέσως πριν από το DNAT. Η συνήθης σειρά των πολιτικών δεν ακολουθείται εδώ, καθώς η εφαρμογή αυτών των πολιτικών γίνεται πολύ νωρίτερα στη διαδρομή επεξεργασίας κίνησης. Ωστόσο, οι πολιτικές preDNAT σέβονται τη σειρά εφαρμογής μεταξύ τους.

Κατά τη δημιουργία πολιτικών με προ-DNAT, είναι σημαντικό να είστε προσεκτικοί σχετικά με την επισκεψιμότητα που θέλετε να επεξεργαστείτε και να επιτρέψετε στην πλειοψηφία να απορριφθεί. Η επισκεψιμότητα που έχει επισημανθεί ως "να επιτρέπεται" στην πολιτική πριν από το DNAT δεν θα ελέγχεται πλέον από την πολιτική σημείου κεντρικού υπολογιστή, ενώ η επισκεψιμότητα που αποτυγχάνει στην πολιτική πριν από το DNAT θα συνεχίζεται μέσω των υπόλοιπων αλυσίδων.
Το Calico έχει καταστήσει υποχρεωτική την ενεργοποίηση της επιλογής applyOnForward κατά τη χρήση του preDNAT, καθώς εξ ορισμού ο προορισμός της κίνησης δεν έχει ακόμη επιλεγεί. Η επισκεψιμότητα μπορεί να κατευθυνθεί στη διεργασία του κεντρικού υπολογιστή ή μπορεί να προωθηθεί σε μια ομάδα ή σε άλλο κόμβο.

Πολιτική χωρίς παρακολούθηση (5)

Τα δίκτυα και οι εφαρμογές μπορεί να έχουν μεγάλες διαφορές στη συμπεριφορά. Σε ορισμένες ακραίες περιπτώσεις, οι εφαρμογές ενδέχεται να δημιουργήσουν πολλές βραχύβιες συνδέσεις. Αυτό μπορεί να προκαλέσει την εξάντληση της μνήμης του conntrack (ένα βασικό στοιχείο της στοίβας δικτύωσης Linux). Παραδοσιακά, για να εκτελέσετε αυτούς τους τύπους εφαρμογών σε Linux, θα έπρεπε να ρυθμίσετε ή να απενεργοποιήσετε με μη αυτόματο τρόπο το conntrack ή να γράψετε κανόνες iptables για να παρακάμψετε το conntrack. Η πολιτική χωρίς παρακολούθηση στο Calico είναι μια απλούστερη και πιο αποτελεσματική επιλογή εάν θέλετε να επεξεργαστείτε τις συνδέσεις όσο το δυνατόν γρηγορότερα. Για παράδειγμα, εάν χρησιμοποιείτε μαζική memcache ή ως πρόσθετο μέτρο προστασίας έναντι DDOS.

Διάβασε αυτό ανάρτησηη μετάφρασή μας) για περισσότερες πληροφορίες, συμπεριλαμβανομένων των δοκιμών απόδοσης χρησιμοποιώντας πολιτική χωρίς παρακολούθηση.

Όταν ορίζετε την επιλογή "doNotTrack: true" στο Calico globalNetworkPolicy, γίνεται μια πολιτική **χωρίς παρακολούθηση** και εφαρμόζεται πολύ νωρίς στον αγωγό επεξεργασίας πακέτων Linux. Εξετάζοντας το παραπάνω διάγραμμα, εφαρμόζονται πολιτικές χωρίς παρακολούθηση στις αλυσίδες PREROUTING και OUTPUT στον πρωτογενή πίνακα πριν ξεκινήσει η παρακολούθηση σύνδεσης (conntrack). Όταν ένα πακέτο επιτρέπεται από την πολιτική χωρίς παρακολούθηση, επισημαίνεται ότι απενεργοποιεί την παρακολούθηση σύνδεσης για αυτό το πακέτο. Σημαίνει:

  • Η πολιτική χωρίς παρακολούθηση εφαρμόζεται σε βάση ανά πακέτο. Δεν υπάρχει έννοια σύνδεσης (ή ροής). Η έλλειψη συνδέσεων έχει πολλές σημαντικές συνέπειες:
  • Εάν θέλετε να επιτρέψετε την κυκλοφορία αιτημάτων και απόκρισης, χρειάζεστε έναν κανόνα τόσο για εισερχόμενες όσο και για εξερχόμενες (καθώς το Calico χρησιμοποιεί συνήθως το conntrack για να επισημάνει την επισκεψιμότητα απόκρισης ως επιτρεπόμενη).
  • Η πολιτική χωρίς παρακολούθηση δεν λειτουργεί για φόρτους εργασίας (pods) Kubernetes, επειδή σε αυτήν την περίπτωση δεν υπάρχει τρόπος παρακολούθησης της εξερχόμενης σύνδεσης από το pod.
  • Το NAT δεν λειτουργεί σωστά με πακέτα χωρίς παρακολούθηση (καθώς ο πυρήνας αποθηκεύει την αντιστοίχιση NAT στο conntrack).
  • Όταν περνάτε από τον κανόνα "να επιτρέπονται όλα" στην πολιτική χωρίς παρακολούθηση, όλα τα πακέτα θα επισημαίνονται ως μη παρακολούθηση. Σχεδόν πάντα αυτό δεν είναι αυτό που θέλετε, επομένως είναι σημαντικό να είστε πολύ επιλεκτικοί σχετικά με τα πακέτα που επιτρέπονται από τις μη παρακολουθούμενες πολιτικές (και να επιτρέπετε στην περισσότερη επισκεψιμότητα να διέρχεται από κανονικές πολιτικές παρακολούθησης).
  • Οι πολιτικές χωρίς παρακολούθηση εφαρμόζονται στην αρχή του αγωγού επεξεργασίας πακέτων. Αυτό είναι πολύ σημαντικό να το κατανοήσετε κατά τη δημιουργία πολιτικών Calico. Μπορείτε να έχετε μια πολιτική pod με παραγγελία:1 και μια πολιτική χωρίς παρακολούθηση με παραγγελία:1000. Δεν θα έχει σημασία. Η πολιτική Untracked θα εφαρμοστεί πριν από την πολιτική για το pod. Οι μη παρακολουθημένες πολιτικές σέβονται την εντολή εκτέλεσης μόνο μεταξύ τους.

Επειδή ένας από τους σκοπούς της πολιτικής doNotTrack είναι να επιβάλει την πολιτική πολύ νωρίς στον αγωγό επεξεργασίας πακέτων Linux, το Calico καθιστά υποχρεωτικό τον καθορισμό της επιλογής applyOnForward κατά τη χρήση του doNotTrack. Αναφερόμενοι στο διάγραμμα επεξεργασίας πακέτων, σημειώστε ότι η πολιτική untracked(5) εφαρμόζεται πριν από οποιεσδήποτε αποφάσεις δρομολόγησης. Η επισκεψιμότητα μπορεί να κατευθυνθεί στη διεργασία του κεντρικού υπολογιστή ή μπορεί να προωθηθεί σε μια ομάδα ή σε άλλο κόμβο.

Αποτελέσματα της

Εξετάσαμε τις διάφορες επιλογές πολιτικής (Τελικό σημείο κεντρικού υπολογιστή, ApplyOnForward, preDNAT και Untracked) στο Calico και πώς εφαρμόζονται στη διαδρομή επεξεργασίας πακέτων. Η κατανόηση του τρόπου λειτουργίας τους βοηθά στην ανάπτυξη αποτελεσματικών και ασφαλών πολιτικών. Με το Calico μπορείτε να χρησιμοποιήσετε μια παγκόσμια πολιτική δικτύου που ισχύει για μια ετικέτα (ομάδα κόμβων και λοβών) και να εφαρμόσετε πολιτικές με διάφορες παραμέτρους. Αυτό επιτρέπει στους επαγγελματίες της ασφάλειας και του σχεδιασμού δικτύων να προστατεύουν εύκολα τα "όλα" (τύποι τελικού σημείου) ταυτόχρονα χρησιμοποιώντας μια γλώσσα πολιτικής με τις πολιτικές Calico.

Αναγνώριση: Θα ήθελα να ευχαριστήσω Σον Κράμπτον и Alexa Pollitta για την κριτική και τις πολύτιμες πληροφορίες τους.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο