Η Apple παρουσίασε ένα νέο framework ανοικτού κώδικα σε Swift με την ονομασία Containerization, σχεδιασμένο για να αναδιαμορφώσει ριζικά τον τρόπο με τον οποίο εκτελούνται τα Linux containers στο macOS
Βίντεο παρουσίαση
Το νέο framework στοχεύει να παρέχει σε κάθε container το ίδιο επίπεδο ισχυρής απομόνωσης που προηγουμένως προοριζόταν για μεγάλες, μονολιθικές εικονικές μηχανές, αλλά με την ταχύτητα και την αποδοτικότητα μιας ελαφριάς λύσης.
Έχουμε μιλήσει εκτενώς στα μαθήματα για το Docker και τα Containers οπότε πάμε να τα θυμηθούμε κάποια βασικά
Ο Παλιός Τρόπος: Μία Ενιαία, Βαριά Εικονική Μηχανή
Ιστορικά, η εκτέλεση Linux containers στο macOS απαιτούσε μία ενιαία, μεγάλη εικονική μηχανή (virtual machine – VM) για να φιλοξενήσει όλες τις περιπτώσεις των containers. Αυτή η προσέγγιση, αν και λειτουργική, είχε αρκετά μειονεκτήματα:
- Αναποτελεσματική Χρήση Πόρων: Στη μεγάλη VM εκχωρούνταν πόροι όπως CPU και μνήμη εκ των προτέρων, ανεξάρτητα από το πόσα containers εκτελούνταν.
- Ζητήματα Ασφάλειας & Ιδιωτικότητας: Η κοινή χρήση αρχείων από το Mac σε ένα container ήταν μια διαδικασία δύο βημάτων. Τα αρχεία μοιράζονταν πρώτα με ολόκληρη τη VM και στη συνέχεια με το συγκεκριμένο container, εκθέτοντας δυνητικά τα δεδομένα ευρύτερα από ό,τι ήταν επιθυμητό.
- Κόστος Συντήρησης: Η μεγάλη VM περιείχε μια πλήρη διανομή Linux με βασικά εργαλεία, δυναμικές βιβλιοθήκες και μια υλοποίηση
libc, αυξάνοντας την επιφάνεια επίθεσης και απαιτώντας συνεχείς ενημερώσεις.
Ένα Νέο Όραμα: Ασφάλεια, Ιδιωτικότητα και Απόδοση
Το framework Containerization δημιουργήθηκε με τρεις βασικούς στόχους για την αντιμετώπιση αυτών των προκλήσεων:
- Ασφάλεια: Να παρέχει σε κάθε container τη δική του απομονωμένη εικονική μηχανή. Αυτό μειώνει δραματικά την επιφάνεια επίθεσης, εξαλείφοντας τους κοινόχρηστους πυρήνες και τα βοηθητικά προγράμματα συστήματος μεταξύ των containers.
- Ιδιωτικότητα: Να επιτρέπει την κοινή χρήση αρχείων και καταλόγων σε αυστηρά ανά-container βάση. Μόνο το container που ζητά πρόσβαση σε έναν κατάλογο θα τη λαμβάνει.
- Απόδοση: Να επιτυγχάνει χρόνους εκκίνησης κάτω του δευτερολέπτου για τα containers, σεβόμενο παράλληλα τους πόρους του συστήματος του χρήστη. Εάν δεν εκτελείται κανένα container, δεν δεσμεύονται πόροι.
Κάτω από την Επιφάνεια: Πώς Λειτουργεί το Containerization
Το Containerization είναι κάτι περισσότερο από ένα απλό API. Είναι μια πλήρης επανεξέταση του runtime των containers στο macOS.
Ελαφριές, ανά-Container Εικονικές Μηχανές
Η πιο σημαντική αρχιτεκτονική αλλαγή είναι ότι κάθε container εκτελείται μέσα στη δική του αποκλειστική, ελαφριά εικονική μηχανή. Αυτή η προσέγγιση παρέχει σημαντικά οφέλη:
- Ισχυρή Απομόνωση: Κάθε container είναι απομονωμένο (sandboxed) μέσα στη δική του VM, εμποδίζοντας τις διεργασίες σε ένα container να βλέπουν ή να παρεμβαίνουν στον κεντρικό υπολογιστή (host) ή σε άλλα containers.
- Αποκλειστική Δικτύωση: Κάθε container λαμβάνει τη δική του αποκλειστική διεύθυνση IP, γεγονός που βελτιώνει την απόδοση του δικτύου και εξαλείφει την περίπλοκη ανάγκη για αντιστοίχιση θυρών (port mapping).
- Αποτελεσματικά Συστήματα Αρχείων: Το Containerization εκθέτει το σύστημα αρχείων του image στη Linux VM ως μια συσκευή μπλοκ (block device) διαμορφωμένη με
EXT4. Η Apple έχει αναπτύξει ακόμη και ένα πακέτο Swift για τη διαχείριση της δημιουργίας και της πλήρωσης αυτών των συστημάτων αρχείωνEXT4απευθείας από το macOS.
vminitd: Η Καρδιά του Container γραμμένη σε Swift
Μόλις ξεκινήσει μια VM, αναλαμβάνει μια ελάχιστη αρχική διεργασία που ονομάζεται vminitd. Δεν πρόκειται για ένα τυπικό σύστημα init του Linux. Είναι μια προσαρμοσμένη λύση με αξιοσημείωτα χαρακτηριστικά:
- Γραμμένο σε Swift: Το
vminitdείναι γραμμένο εξ ολοκλήρου σε Swift και εκτελείται ως η πρώτη διεργασία μέσα στη VM. - Εξαιρετικά Μινιμαλιστικό Περιβάλλον: Για τη μεγιστοποίηση της ασφάλειας, το σύστημα αρχείων στο οποίο εκτελείται το
vminitdείναι εντελώς βασικό. Δεν περιέχει κανένα βασικό εργαλείο (όπωςls,cp), καμία δυναμική βιβλιοθήκη και καμία υλοποίησηlibc. - Στατικά Μεταγλωττισμένο (Statically Compiled): Για να εκτελεστεί σε ένα τόσο περιορισμένο περιβάλλον, το
vminitdμεταγλωττίζεται σταυροειδώς (cross-compiled) από Mac σε ένα ενιαίο, στατικό εκτελέσιμο αρχείο Linux. Αυτό επιτυγχάνεται χρησιμοποιώντας το Static Linux SDK της Swift και το musl, μια υλοποίησηlibcβελτιστοποιημένη για στατική σύνδεση (static linking).
Το vminitd είναι υπεύθυνο για τη ρύθμιση ολόκληρου του περιβάλλοντος του container, συμπεριλαμβανομένης της ανάθεσης διευθύνσεων IP, της προσάρτησης του συστήματος αρχείων του container και της επίβλεψης όλων των διεργασιών που εκτελούνται εντός του.
Ξεκινώντας: Το Εργαλείο Γραμμής Εντολών container
Για να επιδείξει τη δύναμη του framework, η Apple κυκλοφόρησε επίσης ένα εργαλείο γραμμής εντολών ανοικτού κώδικα που ονομάζεται απλώς container. Αυτό το εργαλείο επιτρέπει στους προγραμματιστές να αρχίσουν αμέσως να εργάζονται με Linux containers σε αυτό το νέο, ασφαλές περιβάλλον.
Λήψη ενός image:
container image pull alpine:latest
Εκτέλεση ενός διαδραστικού κελύφους (interactive shell):
container run -ti alpine:latest sh
Μέσα σε χιλιοστά του δευτερολέπτου, ο χρήστης βρίσκεται σε ένα κέλυφος που εκτελείται μέσα σε ένα πλήρως απομονωμένο περιβάλλον Linux. Η εκτέλεση της εντολής ps aux μέσα από το container αποκαλύπτει μόνο τη διεργασία του κελύφους και την ίδια τη διεργασία ps, μια σαφής απόδειξη της ισχυρής απομόνωσης διεργασιών που εφαρμόζεται.
Μια Ανοιχτή Πρόσκληση στην Κοινότητα
Τόσο το framework Containerization όσο και το εργαλείο container είναι διαθέσιμα στο GitHub. Η Apple προσκαλεί τους προγραμματιστές να εξερευνήσουν τον πηγαίο κώδικα, να ενσωματώσουν το framework στα δικά τους έργα και να συμβάλουν στο μέλλον του υποβάλλοντας ζητήματα (issues) και αιτήματα ενσωμάτωσης (pull requests).
Αυτή η κίνηση σηματοδοτεί μια ισχυρή δέσμευση από την Apple να καταστήσει το macOS μια πλατφόρμα πρώτης κατηγορίας για τη σύγχρονη, βασισμένη σε containers ανάπτυξη λογισμικού, προσφέροντας μια λύση που είναι μοναδικά ασφαλής, ιδιωτική και αποδοτική.
Πηγές: