Kubelet Authentication & Authorization
Πιστοποίηση του Kubelet
Από προεπιλογή, οι αιτήσεις προς το HTTPS endpoint του kubelet που δεν απορρίπτονται από άλλες παραμετροποιημένες μεθόδους πιστοποίησης θεωρούνται ως ανώνυμες αιτήσεις και δίνονται ένα όνομα χρήστη system:anonymous
και μια ομάδα system:unauthenticated
.
Οι 3 μέθοδοι πιστοποίησης είναι:
Ανώνυμη (προεπιλογή): Χρησιμοποιήστε την ρύθμιση
--anonymous-auth=true
ή τον παραμετροποιημένο κατάλογο:
Webhook: Αυτό θα ενεργοποιήσει τα κλειδιά πρόσβασης API του kubectl ως αδειοδότηση (οποιοδήποτε έγκυρο κλειδί θα είναι έγκυρο). Επιτρέψτε το με:
βεβαιωθείτε ότι η ομάδα API
authentication.k8s.io/v1beta1
είναι ενεργοποιημένη στον διακομιστή APIξεκινήστε το kubelet με τις σημαίες
--authentication-token-webhook
και--kubeconfig
ή χρησιμοποιήστε την παρακάτω ρύθμιση:
Το kubelet καλεί το TokenReview
API στον διαμορφωμένο API server για να προσδιορίσει πληροφορίες χρήστη από τα bearer tokens.
Πιστοποιητικά πελάτη X509: Επιτρέπουν την πιστοποίηση μέσω πιστοποιητικών πελάτη X509
Δείτε την τεκμηρίωση πιστοποίησης apiserver για περισσότερες λεπτομέρειες
Ξεκινήστε το kubelet με τη σημαία
--client-ca-file
, παρέχοντας ένα αρχείο CA bundle για τον έλεγχο των πιστοποιητικών πελατών. Ή με τη διαμόρφωση:
Εξουσιοδότηση Kubelet
Οποιοδήποτε αίτημα που έχει επιτυχή πιστοποίηση (συμπεριλαμβανομένου ενός ανώνυμου αιτήματος) εξουσιοδοτείται. Ο προεπιλεγμένος τρόπος εξουσιοδότησης είναι ο AlwaysAllow
, ο οποίος επιτρέπει όλα τα αιτήματα.
Ωστόσο, η άλλη δυνατή τιμή είναι η webhook
(αυτό που θα βρείτε κυρίως εκεί έξω). Αυτή η λειτουργία θα ελέγχει τα δικαιώματα του πιστοποιημένου χρήστη για να επιτρέψει ή να απαγορεύσει μια ενέργεια.
Σημειώστε ότι ακόμη και αν η ανώνυμη πιστοποίηση είναι ενεργοποιημένη, η ανώνυμη πρόσβαση μπορεί να μην έχει καμία άδεια για να εκτελέσει οποιαδήποτε ενέργεια.
Η εξουσιοδότηση μέσω webhook μπορεί να ρυθμιστεί χρησιμοποιώντας την παράμετρο --authorization-mode=Webhook
ή μέσω του αρχείου διαμόρφωσης με:
Το kubelet καλεί το API SubjectAccessReview
στον διαμορφωμένο API server για να καθορίσει εάν κάθε αίτηση είναι εξουσιοδοτημένη.
Το kubelet εξουσιοδοτεί τις αιτήσεις API χρησιμοποιώντας την ίδια προσέγγιση χαρακτηριστικών αιτήματος όπως το apiserver:
Ενέργεια
HTTP ρήμα | ρήμα αίτησης |
---|---|
POST | create |
GET, HEAD | get (για μεμονωμένους πόρους), list (για συλλογές, συμπεριλαμβανομένου του πλήρους περιεχομένου αντικειμένου), watch (για παρακολούθηση ενός μεμονωμένου πόρου ή συλλογής πόρων) |
PUT | update |
PATCH | patch |
DELETE | delete (για μεμονωμένους πόρους), deletecollection (για συλλογές) |
Ο πόρος που επικοινωνεί με το Kubelet api είναι πάντα κόμβοι και ο υποπόρος καθορίζεται από τη διαδρομή του εισερχόμενου αιτήματος:
Kubelet API | πόρος | υποπόρος |
---|---|---|
/stats/* | κόμβοι | στατιστικά |
/metrics/* | κόμβοι | μετρήσεις |
/logs/* | κόμβοι | καταγραφή |
/spec/* | κόμβοι | προδιαγραφή |
όλα τα άλλα | κόμβοι | διαμεσολαβητής |
Για παράδειγμα, η παρακάτω αίτηση προσπάθησε να αποκτήσει πρόσβαση στις πληροφορίες των pods του kubelet χωρίς άδεια:
Πήραμε ένα Απαγορευμένο, οπότε το αίτημα πέρασε τον έλεγχο Ταυτοποίησης. Αν δεν ήταν έτσι, θα είχαμε λάβει απλά ένα μήνυμα
Μη εξουσιοδοτημένο
.Μπορούμε να δούμε το όνομα χρήστη (σε αυτήν την περίπτωση από το τοκέν)
Ελέγξτε πώς ο πόρος ήταν κόμβοι και ο υποπόρος proxy (που έχει νόημα με βάση τις προηγούμενες πληροφορίες)
Αναφορές
Last updated