Вопрос или проблема
27.x
Когда я попытался посмотреть журналы пода, я получил: Не удалось загрузить журналы: Get “https://…?tailLines=502×tamps=true”: удаленная ошибка: tls: внутренняя ошибка Причина: неопределена (500)
Когда я смотрю на сертификаты, используя kubeadm, они кажутся действительными до следующего года, и я обновил их в январе.
Когда я смотрю на kubectl get csr -A, у меня есть сотни ожидающих CSR.
Эта проблема связана с ожидающими запросами на подпись сертификата для узлов, сделанными Kubelet, работающим на каждом узле. Чтобы проверить ожидающие CSR узлов
kubectl get csr --sort-by=.metadata.creationTimestamp
Одобрите CSR для каждого узла kubectl certificate approve <csr-id\>
, если у вас слишком много ожидающих узлов
kubectl get csr --no-headers | awk '{print $1}' | xargs kubectl certificate approve
Для получения более подробной информации о вашем узле используйте kubectl describe nodes
Согласно официальному документу Kubernetes о Включении подписанных сертификатов kubelet: “Одно ограничение заключается в том, что CSR (запросы на подпись сертификата) для этих сертификатов не могут быть автоматически одобрены стандартным подписчиком в kube-controller-manager - kubernetes.io/kubelet-serving
. Это потребует действий от пользователя или контроллера третьей стороны.”
Сотни ожидающих CSR указывают на значительные затруднения в процессе выдачи сертификатов. Следуйте приведенным ниже шагам по устранению неполадок, чтобы ограничить создание CSR и проблемы с загрузкой журналов:
-
Сервер CA может не иметь необходимых ресурсов для обработки нагрузки, поэтому проверьте доступность ресурсов, такие как достаточное количество CPU, памяти и дискового пространства на вашем сервере CA.
-
Проверьте настройки конфигурации, такие как лимиты очереди запросов и лимиты параллельности.
-
Убедитесь, что сертификаты для вашего кластера Kubernetes соответствуют домену, к которому вы пытаетесь получить доступ.
-
Убедитесь, что сервер настроен для разрешения TLS-соединений и что у него есть соответствующие сертификаты и пакет CA.
-
Убедитесь, что ваша версия Kubernetes совместима с используемым вами CA.
Редактирование1: Возврат tlsBootStrap к false: Это может временно сработать, но это отключает автоматическое управление сертификатами, требуя от вас вручную обрабатывать обновления сертификатов. Это менее идеальное долгосрочное решение.
Одобрив ожидающие CSR, вы можете сразу решить проблему, но вам нужно найти коренную причину чрезмерного создания CSR на основании вышеупомянутых шагов в разделе ответов.
Также используйте последнюю стабильную версию Kubernetes, чтобы воспользоваться исправлениями ошибок и улучшениями безопасности.
Поскольку я не могу комментировать из-за низкой репутации, я обновил свой ответ в этом разделе ответов как Редактирование1.
Ответ или решение
Почему Kubernetes генерирует сотни CSRs?
В Kubernetes возникла проблема с сотнями ожидающих запросов на подпись сертификатов (CSR), что может указывать на ряд проблем, связанных с управлением сертификатами. Давайте разберем, что такое CSR и почему они могут накапливаться, а также рассмотрим шаги по устранению этой проблемы.
Что такое CSR?
CSRs (Certificate Signing Requests) — это запросы, которые Kubelet отправляет в Kubernetes для получения новых сертификатов. Они необходимы для безопасной аутентификации узлов и компонентов в кластере Kubernetes. Ваша проблема с большим количеством ожидающих CSR может указывать на несколько причин:
-
Система не может обработать запросы: При увеличении количества узлов в кластере или при отсутствии необходимых ресурсов, таких как CPU и память, ваш централизованный сервер авторитета (CA) может просто не справляться с загрузкой.
-
Неверные настройки конфигурации: Некоторые параметры, такие как лимиты очереди запросов или уровень конкуренции, могут быть настроены неправильно, что приводит к накоплению CSRs.
-
Проблемы с сертификатами: Убедитесь, что сертификаты для вашего кластера Kubernetes правильно настроены и соответствуют домену, который вы пытаетесь использовать.
-
Проблемы с подключением TLS: Убедитесь, что сервер настроен на использование TLS и имеет соответствующие сертификаты и CA-пакет.
-
Совместимость версий: Проверьте, что ваша версия Kubernetes совместима с используемым CA.
Решение проблемы
Вот несколько шагов, которые можно предпринять, чтобы решить проблему с накопившимися CSR:
-
Проверьте ресурсы: Убедитесь, что сервер CA имеет достаточное количество ресурсов (CPU, память, дисковое пространство) для обработки входящих запросов.
-
Проверьте настройки конфигурации: Просмотрите параметры очереди запросов и ограничения уровня конкуренции на сервере CA.
-
Во избежание накопления CSRs: Используйте команду для просмотра ожидающих CSRs.
kubectl get csr --sort-by=.metadata.creationTimestamp
Затем одобрите каждый CSR с помощью:
kubectl certificate approve <csr-id>
Или для одобрения всех:
kubectl get csr --no-headers | awk '{print $1}' | xargs kubectl certificate approve
-
Проверка состояния узлов: Используйте команду:
kubectl describe nodes
для получения дополнительной информации о ваших узлах.
-
Review kube-controller-manager settings: Убедитесь, что параметры управления сертификатами правильно настроены.
Временное решение
Как временный обходной путь можно рассмотреть отключение автоматического управления сертификатами, изменив параметр tlsBootStrap
на false
. Однако данный подход менее идеален, так как он требует ручного управления сертификатами и их обновлением.
Заключение
Сотни ожидающих CSR могут привести к серьезным проблемам в доступности и безопасности вашего Kubernetes-кластера. Важно не только одобрить текущие запросы, но и выявить и устранить основную причину избыточной генерации CSRs. Используйте приведенные выше шаги для анализа и решения проблемы. Также рекомендуется обновить Kubernetes до последней стабильной версии для получения исправлений ошибок и улучшений безопасности.
Если проблема продолжает беспокоить, проконсультируйтесь с документацией Kubernetes или сообществом пользователей для получения дополнительной помощи и поддержки.