Έλεγχος ταυτότητας Kubernetes με GitHub OAuth και Dex
Παρουσιάζω στην προσοχή σας ένα σεμινάριο για τη δημιουργία πρόσβασης σε ένα σύμπλεγμα Kubernetes χρησιμοποιώντας Dex, dex-k8s-authenticator και GitHub.
Τοπικό μιμίδιο από τη ρωσόφωνη συνομιλία Kubernetes Telegram
Εισαγωγή
Χρησιμοποιούμε το Kubernetes για να δημιουργήσουμε δυναμικά περιβάλλοντα για την ομάδα ανάπτυξης και QA. Θέλουμε λοιπόν να τους δώσουμε πρόσβαση στο σύμπλεγμα τόσο για τον πίνακα ελέγχου όσο και για το kubectl. Σε αντίθεση με το ίδιο OpenShift, το vanilla Kubernetes δεν διαθέτει εγγενή έλεγχο ταυτότητας, επομένως χρησιμοποιούμε εργαλεία τρίτων για αυτό.
GitHub - απλώς επειδή χρησιμοποιούμε το GitHub στην εταιρεία μας
Προσπαθήσαμε να χρησιμοποιήσουμε το Google OIDC, αλλά δυστυχώς απέτυχε να τα ξεκινήσουμε με ομάδες, οπότε η ενσωμάτωση με το GitHub μας ταίριαζε μια χαρά. Χωρίς ομαδική αντιστοίχιση, δεν θα είναι δυνατή η δημιουργία πολιτικών RBAC που βασίζονται σε ομάδες.
Λοιπόν, πώς λειτουργεί η διαδικασία εξουσιοδότησης Kubernetes σε μια οπτική αναπαράσταση:
Διαδικασία εξουσιοδότησης
Λίγο πιο αναλυτικά και σημείο προς σημείο:
Ο χρήστης συνδέεται στο dex-k8s-authenticator (login.k8s.example.com)
Το dex-k8s-authenticator ανακατευθύνει το αίτημα στο Dex (dex.k8s.example.com)
Ο Dex ανακατευθύνει στη σελίδα σύνδεσης του GitHub
Το GitHub δημιουργεί τις απαιτούμενες πληροφορίες εξουσιοδότησης και τις επιστρέφει στο Dex
Το Dex μεταβιβάζει τις ληφθείσες πληροφορίες στο dex-k8s-authenticator
Ο χρήστης λαμβάνει το διακριτικό OIDC από το GitHub
Το dex-k8s-authenticator προσθέτει διακριτικό στο kubeconfig
Το kubectl περνάει διακριτικό στον KubeAPIServer
Ο KubeAPIServer που βασίζεται στο διαβιβασμένο διακριτικό επιστρέφει πρόσβαση στο kubectl
Πρόσβαση χρήστη από το kubectl
Προπαρασκευαστικές ενέργειες
Φυσικά, έχουμε ήδη εγκαταστήσει ένα σύμπλεγμα Kubernetes (k8s.example.com), καθώς και το HELM προεγκατεστημένο. Έχουμε επίσης έναν οργανισμό στο GitHub (super-org).
Εάν δεν έχετε HELM, εγκαταστήστε το πολύ απλό.
Πρώτα πρέπει να ρυθμίσουμε το GitHub.
Μεταβείτε στη σελίδα ρυθμίσεων οργανισμού, (https://github.com/organizations/super-org/settings/applications) και δημιουργήστε μια νέα εφαρμογή (Authorized OAuth App):
Δημιουργήστε μια νέα εφαρμογή στο GitHub
Συμπληρώστε τα πεδία με τις απαιτούμενες διευθύνσεις URL, για παράδειγμα:
Να είστε προσεκτικοί με τους συνδέσμους, είναι σημαντικό να μην χάσετε κάθετο.
Σε απόκριση στη συμπληρωμένη φόρμα, το GitHub θα δημιουργήσει Client ID и Client secret, αποθηκεύστε τα σε ασφαλές μέρος, θα μας φανούν χρήσιμα (για παράδειγμα, χρησιμοποιούμε Θόλος για την τήρηση μυστικών):
Ας ελέγξουμε τη δυνατότητα συντήρησης των υπηρεσιών (το Dex θα πρέπει να επιστρέψει τον κωδικό 400 και το dex-k8s-authenticator θα πρέπει να επιστρέψει τον κωδικό 200):
curl -sI https://dex.k8s.example.com/callback | head -1
HTTP/2 400
curl -sI https://login.k8s.example.com/ | head -1
HTTP/2 200
Διαμόρφωση RBAC
Δημιουργήστε ένα ClusterRole για την ομάδα, στην περίπτωσή μας με πρόσβαση μόνο για ανάγνωση:
Μεταβείτε στη σελίδα σύνδεσηςhttps://login.k8s.example.com) και συνδεθείτε με έναν λογαριασμό GitHub:
Σελίδα εξουσιοδότησης
Η σελίδα εξουσιοδότησης ανακατευθυνθεί στο GitHub
Ακολουθήστε τις δημιουργημένες οδηγίες για να αποκτήσετε πρόσβαση
Μετά την αντιγραφή από την ιστοσελίδα, μπορούμε να χρησιμοποιήσουμε το kubectl για να διαχειριστούμε τους πόρους του συμπλέγματός μας:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
Και λειτουργεί, όλοι οι χρήστες του GitHub στον οργανισμό μας μπορούν να δουν πόρους και να συνδεθούν σε ομάδες, αλλά δεν έχουν άδεια να τους αλλάξουν.