Size: a a a

Kubernetes — русскоговорящее сообщество

2020 November 05

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
- как именно apiserver верифицирует подключение к конкретному кубелету, если опция serverTLSBootstrap выключена, по дефолту kubeadm деплоит именно так.

*я знаю что нынче кубелетам положено использовать тип аутентификации Node, но как apisever может быть уверен что это тот самый кубелет запросил соединение?*
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
> Кубелеты генерят сертификаты используя свои собственные CA,
нет
они создают объекты типа certificatesigningrequests.certificates.k8s.io
и шлют их в аписервер через CertificateSigningRequest-апи
и если ты (или специально-обученный робот) эти CSR'ы аппрувит, то контроллер-манагер генерит сертификат и подписывает правильным CA
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Так вот по дефолту они этого не делают до тех пор, пока ты им явно в конфиге не пропишешь:
serverTLSBootstrap: true
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
и ещё
authentication:
 x509:
   clientCAFile: "/etc/kubernetes/ssl/ca-cluster_signing.pem"
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
там их два
один (client) для того, чтобы представляться в аписервере, а второй (server) - чтобы использовать для входящих запросов - аписервер, прометеи там всякие, метрикс-сервер, etc
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
кубеадм при kubeadm join делает это за тебя, поэтому бутстрап не нужен
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
всмысле выпускает сертификат, аппрувит, раскладывает, etc
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Это используетя для верификации запросов от apiserverа, с этим всё понятно:

authentication:
 anonymous:
   enabled: false
 webhook:
   cacheTTL: 0s
   enabled: true
 x509:
   clientCAFile: /etc/kubernetes/pki/ca.crt

в кубелете можно аутентифицироваться по сертификату подписанному CA, либо через вебхук.
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Вопрос в обратной связи, как apiserver верифицирует подключения от kubelet'a?
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
с помощью CN в его клиентском сертификате
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Неа не делает, точно тебе говорю
(я про серт для сервинга)
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
# openssl x509 -in /etc/kubernetes/ssl/kubelet-client-current.pem -noout -text | grep -Eo 'CN = system:(.+)'
CN = system:node:web05-amplifr-ru
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Да, точно!
У меня есть клиентский сертификат, подписанный CA
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Окей, тогда другой вопрос, если kubeadm выписыват клиентский сертификат, то почему он не делает того-же по умолчанию автоматически для kubelet server'а?
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
kubernetes.io/kube-apiserver-client-kubelet
- May be auto-approved by kube-controller-manager.

kubernetes.io/kubelet-serving
- Never auto-approved by kube-controller-manager.
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
видимо зона риска меньше
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от kvaps
Это объясняет зачем нужен authorization mode Node для kube-apiserver, по сути он выдаёт кубелету все права на его related-ресурсы но не больше.
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
Переслано от Maxim Filatov
не уверен, что это вопрос ко мне
но для запуска и регистрации ноды без предварительного бутстрапа достаточно клиентского, серверный можно выпустить и потом
наверное поэтому
источник

k

kvaps in Kubernetes — русскоговорящее сообщество
если есть мысли на этот счёт, с радостью их выслушаю
источник