Рейтинг:1

Ошибка создания токена kubeadm на самоподписанном сертификате ca

флаг cn
Ted

Я пытаюсь развернуть кластер k8s с помощью kubespray поверх кластера openstack серверов ubuntu. Установка завершается сбоем, когда kubeadm пытается инициализировать облачного провайдера, отправляя почтовый запрос на конечную точку keystone xxx:5000/v3/ для создания токена начальной загрузки. Не удается запустить kubelet.service, так как конечная точка keystone подписана самозаверяющим сертификатом. Смотри ниже. Я сохранил сертификат ca из конечной точки keystone и поместил его на главный узел в /etc/kubernetes/ssl/, где kubelet и kubeadm ищут сертификаты. Я также обновил /etc/kubernetes/kubeadm-config.yaml на основе документации здесь и здесь, я обновил конфигурацию соединения kubeadm по умолчанию, включив в нее «unsafeSkipCAVerification: true», но kubelet.service по-прежнему не работает с самозаверяющим сертификатом. Kubeadm должен проходить аутентификацию с помощью имени пользователя/пароля, которые хранятся в файле /etc/kubernetes/cloud_config, и я проверил правильность этих значений. Я не уверен, где еще искать, чтобы изменить поведение. Мы будем очень признательны за любые рекомендации.

ubuntu:/etc/kubernetes# конфигурация kubeadm print join-defaults
Версия API: kubeadm.k8s.io/v1beta3
caCertPath: /etc/kubernetes/pki/ca.crt
открытие:
  Токен начальной загрузки:
  apiServerEndpoint: kube-apiserver:6443
  токен: abcdef.0123456789abcdef
  unsafeSkipCAVerification: правда
  таймаут: 5м0с
  tlsBootstrapToken: abcdef.0123456789abcdef
тип: джоинконфигуратион
  узелРегистрация:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: Ифноптресент
  имя: mdap-узел-01
  пороки: ноль

трассировка стека kubelet:

 15 декабря 22:19:51 ubuntu kubelet[388780]: E1215 22:19:51.760564 388780 server.go:294] «Не удалось запустить kubelet» err = «не удалось запустить Kubelet: не удалось инициализировать облачного провайдера «openstack» : Сообщение \"https://XXX.XXX.XXX.132:5000/v3/auth/tokens\": x509: сертификат, подписанный неизвестным органом"
 15 декабря 22:19:51 ubuntu systemd[1]: kubelet.service: основной процесс завершен, код = завершен, статус = 1/FAILURE


НЕУДАЧА — ПОВТОРНАЯ Попытка: создать токен kubeadm для присоединения к узлам со сроком действия 24 часа (по умолчанию) (осталось 4 попытки). Результат: {
"попытки": 2,
«изменено»: ложь,
"команд": [
    "/usr/локальные/бин/кубидм",
    "--кубеконфиг",
    "/etc/kubernetes/admin.conf",
    "жетон",
    "Создайте"
],
"дельта": "0:01:15.035670",
"конец": "2021-12-16 15:03:22.901080",
"вызов": {
    "module_args": {
        "_raw_params": "/usr/local/bin/kubeadm --kubeconfig /etc/kubernetes/admin.conf создать токен",
        "_uses_shell": ложь,
        "аргв": ноль,
        "chdir": ноль,
        "создает": ноль,
        "исполняемый": ноль,
        "удаляет": ноль,
        "стандартный ввод": ноль
        "stdin_add_newline": правда,
        "strip_empty_ends": правда,
        "предупреждать": правда
    }
},
"msg": "ненулевой код возврата",
"рс": 1,
"повторных попыток": 6,
"старт": "2021-12-16 15:02:07.865410",
"stderr": "время ожидания условия истекло\nЧтобы увидеть, как трассировка стека этой ошибки выполняется с параметром --v=5 или выше",
"stderr_lines": [
    "время ожидания условия истекло",
    "Чтобы увидеть трассировку стека этой ошибки, выполните --v=5 или выше"
],
"стандартный вывод": "",
"stdout_lines": []
kkopczak avatar
флаг ng
Здравствуйте, @Ted, какую версию Kubernetes вы использовали и как настроили кластер? Вы использовали установку на «голое железо» или какого-то облачного провайдера?
Ted avatar
флаг cn
Ted
@kkopczak по запросу клиента. Я использовал terraform v1.1.0 для развертывания серверов Ubuntu v20.04.3 в кластере openstack, который будет служить узлами k8s. Я использую kubespray для развертывания кластера kubernetes v1.22.4. Кроме того, для kubespray я использую облачного провайдера openstack внутри дерева, поскольку в конечном итоге предполагается, что это будет закрытая система. https://kubespray.io/#/docs/openstack?id=the-in-tree-cloud-provider
Ted avatar
флаг cn
Ted
похоже, я неправильно понял поставщиков облачных услуг в дереве: https://kubernetes.io/blog/2019/04/17/the-future-of-cloud-providers-in-kubernetes/
kkopczak avatar
флаг ng
Простите за поздний ответ. [Здесь](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) находится документация по управлению сертификатами. Не могли бы вы проверить вывод этой команды `kubeadm certs check-expiration` (это может показать, управляется ли сертификат извне)?
Wytrzymały Wiktor avatar
флаг it
Привет @Тед. Любые обновления?
Ted avatar
флаг cn
Ted
@WytrzymaÅyWiktor В итоге я удалил настройки облачного провайдера openstack из конфигурации kubespray в ./kubespray/inventory/my_inventory/group_vars/all/all.yml, потому что мы используем openstack для предоставления серверов, но не используем openstack.keystone для управления сертификатами/токенами на уровне k8s. Тем не менее, кажется, что это должно быть возможно.
Ted avatar
флаг cn
Ted
после того, как я удалил облачного провайдера, kubespray успешно установил кластер k8s. мое понимание ошибки, которую я опубликовал, заключается в том, что keystone использует самозаверяющий сертификат, которому процесс kubelet не доверял. Я попытался добавить общедоступный сертификат keystone в папку /etc/kuberenetes/ssl на том же сервере, что и процесс kubelet, но kubespray повторно предоставляет эти сертификаты при каждом запуске. Я прочитаю документ, присланный @kkopczak, чтобы понять, смогу ли я лучше понять это.
Wytrzymały Wiktor avatar
флаг it
Привет @Тед. Как сейчас тема? Какой-либо прогресс?
Рейтинг:2
флаг ng

Чтобы уточнить, я публикую ответ сообщества Wiki.

Чтобы решить эту проблему, вы удалили настройки облачного провайдера openstack. После этого с помощью kubespray вы смогли успешно установить кластер k8s.

Чтобы прочитать о сертификате - как я уже упоминал ранее, документация по управлению сертификатами находится под эта ссылка. Чтобы проверить, управляется ли сертификат извне, вы можете использовать следующую команду:

срок действия сертификатов kubeadm

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

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