Рейтинг:0

Срок действия файла /var/lib/kubelet/pki/kubelet.crt истек, как его обновить?

флаг cn

кубернет кластер в 1.21.2. кубелет есть и на 1.21.2

кубелет --версия
Кубернетес v1.21.2

версия kubeadm
версия kubeadm: &version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:57: 56Z", версия Go: "go1.16.5", компилятор: "gc", платформа: "linux/amd64"}

Когда я пытаюсь "кл получить нет"Я получаю ошибку ниже

кл получить нет
ошибка: Вы должны войти на сервер (неавторизованный)
**Примечание: kl — это псевдоним kubectl**
Я проверил свой файл /var/lib/kubelet/pki/kubelet.crt, и срок его действия истек.

В kubelet.crt эмитент указан ниже

Тема: CN=aparapu@1591592441
        Информация об открытом ключе субъекта:
            Алгоритм открытого ключа: rsaEncryption

Нужна помощь в обновлении этого kubelet.crt.

флаг in
Привет, шактират, добро пожаловать в S.F. Не зная больше о том, как вы подготовили свой Node, никто не может сказать _точно_, но в _большинстве случаев_ `rm -rf /var/lib/kubelet && rm -rf /etc/kubernetes && systemctl restart kubelet.service` заставит kubelet работать обратно через первоначальный процесс запроса сертификата, и apiserver либо предложит вам, либо автоматически утвердит запрос сертификата узла. Не стесняйтесь использовать `mv` вместо `rm` и, при желании, сначала остановите kubelet
shaktirath avatar
флаг cn
Зачем удалять /etc/kubernetes? Я подготовил узел через kubeadm, который присутствует в документации kubernetes.
shaktirath avatar
флаг cn
Просто чтобы добавить еще одну вещь, сертификат обновления kubeadm не для /var/lib/kubelet/kubelet.crt. Если вы все еще уверены, дайте мне подробные шаги.
Mikołaj Głodziak avatar
флаг id
Привет, @shaktirath, если я хорошо понимаю ваш вопрос, вам должно помочь [обновление сертификата вручную] (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal). Попробуйте выполнить «обновление сертификатов kubeadm».
shaktirath avatar
флаг cn
Эта ссылка выше ни о чем не говорит, как обновить файл /var/lib/kubelet/kubelet.crt. Я также попробовал ссылку ниже, но, к сожалению, мой kubectl не работает. https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs
Mikołaj Głodziak avatar
флаг id
Как вы настроили свой кластер? Вы используете «голое железо» или какой-то облачный провайдер? Посмотрите также на [эту аналогичную проблему] (https://github.com/kubernetes/kubeadm/issues/2186)
shaktirath avatar
флаг cn
Да. Мой кластер состоит из голого металла.
Рейтинг:1
флаг my

Я видел эти проблемы на многих других форумах и наконец нашел решение, которое работает от меня.

Во-первых, мои проблемы были исключительно из-за сертификата /var/lib/кубелет/pki/kubelet.crt, срок действия которого истек:

эхо -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-НАЧАТЬ СЕРТИФИКАТ-/,/-КОНЕЦ СЕРТИФИКАТА-/p' | openssl x509 -текст -noout | grep -A 2 Валидность

или же

sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -text -noout | grep -A 2 Валидность

Во-первых, вам нужно включить --rotate-сертификаты = истина и --rotate-server-certificates=true в вашем кубеле. В моем случае я установил кластер, используя кубадм, так что я могу редактировать /etc/systemd/system/kubelet.service.d/10-kubeadm.conf, и добавьте следующее в KUBELET_EXTRA_ARGS:

Environment="KUBELET_EXTRA_ARGS=--rotate-certificates=true --rotate-server-certificates=true --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"

В общем, это просто добавление этих флагов в выполнение kubelet /usr/bin/kubelet --rotate-certificates=true --rotate-server-certificates=true.

И перезагрузите и перезапустите kubelet с помощью:

sudo systemctl демон-перезагрузка
перезапуск службы sudo kubelet

После перезагрузки я вижу что-то вроде 14114 log.go:172] http: ошибка рукопожатия TLS от 20.0.0.13:57738: для kubelet нет сертификата обслуживания, что означает, что сертификат необходимо добавить и утвердить.

Во-вторых, нам необходимо утвердить csr из kubernetes (это то, на что я никогда раньше не смотрел...):

kubectl получить csr

Там вы увидите сертификат, ожидающий утверждения, поэтому только что утвержденный:

сертификат kubectl утверждает csr-dlcf6

Теперь ваш кластер должен иметь обновленный сертификат сервера kubelet. Чтобы проверить еще раз:

эхо -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-НАЧАТЬ СЕРТИФИКАТ-/,/-КОНЕЦ СЕРТИФИКАТА-/p' | openssl x509 -текст -noout | grep -A 2 Валидность

Некоторые примечания:

  • Мы включили ротацию как для клиента, так и для сервера. Ротация клиентов также является частью сценария автоматического обновления сертификата (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)
  • После того, как мы включили вращение /var/lib/кубелет/pki/kubelet.crt больше не используется, вместо этого символическая ссылка /var/lib/kubelet/pki/kubelet-server-current.pem используется и указывает на последний ротированный сертификат.

Использованная литература:

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.