Kubelet Authentication & Authorization
Kubelet Authentication
За замовчуванням запити до HTTPS-інтерфейсу kubelet, які не відхилені іншими налаштованими методами аутентифікації, розглядаються як анонімні запити і отримують ім'я користувача system:anonymous
та групу system:unauthenticated
.
3 методи аутентифікації:
Анонімний (за замовчуванням): Використовуйте налаштування, встановивши параметр
--anonymous-auth=true
або конфігурацію:
Webhook: Це дозволить токени API bearer kubectl як авторизацію (будь-який дійсний токен буде дійсним). Дозвольте це з:
переконайтеся, що група API
authentication.k8s.io/v1beta1
увімкнена на сервері APIзапустіть kubelet з прапорами
--authentication-token-webhook
та--kubeconfig
або використайте наступне налаштування:
Kubelet викликає TokenReview
API на налаштованому API сервері, щоб визначити інформацію про користувача з токенів доступу
X509 клієнтські сертифікати: Дозволяють аутентифікацію через X509 клієнтські сертифікати
дивіться документацію з аутентифікації apiserver для отримання додаткової інформації
запустіть kubelet з прапором
--client-ca-file
, надаючи пакет CA для перевірки клієнтських сертифікатів. Або з конфігурацією:
Kubelet Authorization
Будь-який запит, який успішно аутентифікований (включаючи анонімний запит) потім авторизується. За замовчуванням режим авторизації - AlwaysAllow
, який дозволяє всі запити.
Однак інше можливе значення - webhook
(що ви в основному будете знаходити там). Цей режим перевіряє дозволи аутентифікованого користувача для дозволу або заборони дії.
Зверніть увагу, що навіть якщо анонімна аутентифікація увімкнена, анонімний доступ може не мати жодних дозволів для виконання будь-якої дії.
Авторизація через webhook може бути налаштована за допомогою параметра --authorization-mode=Webhook
або через конфігураційний файл з:
The kubelet викликає SubjectAccessReview
API на налаштованому API сервері, щоб визначити, чи кожен запит є авторизованим.
Kubelet авторизує API запити, використовуючи той же атрибути запиту підхід, що й apiserver:
Дія
HTTP verb | request verb |
---|---|
POST | create |
GET, HEAD | get (для окремих ресурсів), list (для колекцій, включаючи повний вміст об'єкта), watch (для спостереження за окремим ресурсом або колекцією ресурсів) |
PUT | update |
PATCH | patch |
DELETE | delete (для окремих ресурсів), deletecollection (для колекцій) |
Ресурс, що спілкується з Kubelet API, є завжди вузлами, а підресурс визначається з шляху вхідного запиту:
Kubelet API | ресурс | підресурс |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
всі інші | nodes | proxy |
Наприклад, наступний запит намагався отримати доступ до інформації про поди kubelet без дозволу:
Ми отримали Заборонено, тому запит пройшов перевірку автентифікації. Якщо б ні, ми отримали б лише повідомлення
Неавторизовано
.Ми можемо бачити ім'я користувача (в даному випадку з токена)
Перевірте, як ресурсом були вузли, а додатковим ресурсом проксі (що має сенс з попередньою інформацією)
Посилання
Last updated