Kubelet Authentication & Authorization
Kubelet Autoryzacja
Domyślnie żądania do punktu końcowego HTTPS kubelet, które nie są odrzucane przez inne skonfigurowane metody uwierzytelniania, są traktowane jako żądania anonimowe i otrzymują nazwę użytkownika system:anonymous
oraz grupę system:unauthenticated
.
3 metody uwierzytelniania to:
Anonimowa (domyślna): Użyj ustawienia parametru
--anonymous-auth=true
lub konfiguracji:
Webhook: To włączyć kubectl API bearer tokens jako autoryzację (każdy ważny token będzie poprawny). Pozwól na to za pomocą:
upewnij się, że grupa API
authentication.k8s.io/v1beta1
jest włączona w serwerze APIuruchom kubelet z flagami
--authentication-token-webhook
i--kubeconfig
lub użyj następującej konfiguracji:
Kubelet wywołuje API TokenReview na skonfigurowanym serwerze API, aby określić informacje o użytkowniku na podstawie tokenów nosiciela.
Certyfikaty klienta X509: Pozwalają na uwierzytelnianie za pomocą certyfikatów klienta X509
zobacz dokumentację uwierzytelniania apiservera po więcej szczegółów
uruchom kubelet z flagą
--client-ca-file
, podając pakiet CA do weryfikacji certyfikatów klientów. Lub z konfiguracją:
Autoryzacja Kubelet
Każde żądanie, które zostało pomyślnie uwierzytelnione (w tym żądanie anonimowe) jest następnie autoryzowane. Domyślnym trybem autoryzacji jest AlwaysAllow
, który zezwala na wszystkie żądania.
Jednakże, inną możliwą wartością jest webhook
(co najczęściej znajdziesz). Ten tryb będzie sprawdzał uprawnienia uwierzytelnionego użytkownika w celu zezwolenia lub zabronienia działania.
Zauważ, że nawet jeśli uwierzytelnienie anonimowe jest włączone, dostęp anonimowy może nie mieć żadnych uprawnień do wykonania jakiejkolwiek akcji.
Autoryzacja za pomocą webhooka może być skonfigurowana za pomocą parametru --authorization-mode=Webhook
lub za pomocą pliku konfiguracyjnego:
Kubelet wywołuje API SubjectAccessReview
na skonfigurowanym serwerze API, aby ustalić, czy każde żądanie jest autoryzowane.
Kubelet autoryzuje żądania API, korzystając z tego samego podejścia do atrybutów żądania co apiserver:
Akcja
Metoda HTTP | czasownik żądania |
---|---|
POST | create |
GET, HEAD | get (dla poszczególnych zasobów), list (dla kolekcji, w tym pełnej zawartości obiektu), watch (do obserwowania pojedynczego zasobu lub kolekcji zasobów) |
PUT | update |
PATCH | patch |
DELETE | delete (dla poszczególnych zasobów), deletecollection (dla kolekcji) |
Zasób komunikujący się z API Kubelet zawsze to nodes, a podzasób jest ustalany na podstawie ścieżki przychodzącego żądania:
API Kubelet | zasób | podzasób |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
wszystkie inne | nodes | proxy |
Na przykład, poniższe żądanie próbowało uzyskać dostęp do informacji o podach kubelet bez uprawnień:
Otrzymaliśmy Zakazane, więc żądanie zdało sprawdzanie uwierzytelniania. Gdyby nie, otrzymalibyśmy tylko komunikat
Nieautoryzowane
.Możemy zobaczyć nazwę użytkownika (w tym przypadku z tokena)
Sprawdź, jakim był zasobem węzły i podzasobem proxy (co zgadza się z poprzednimi informacjami)
Referencje
Last updated