Обновление сертификата плоскости управления в Kubernetes (kubeadm)

kubeadm создает сертификаты для плоскости управления Kubernetes, действительные в течение одного года. Они будут обновляться при каждом обновлении Kubernetes . Поскольку определенно рекомендуется обновлять кластер Kubernetes хотя бы раз в год, это должно привести к тому, что сертификаты никогда не истекают.

Однако у нас есть некоторые кластеры Kubernetes, работающие в среде с воздушным зазором (абсолютно без подключения к Интернету), где есть нет гарантии, что они когда-либо увидят обновления. Сертификаты, срок действия которых истекает в течение одного года, в таких условиях неприемлемы. Продление срока действия сертификата было бы одной из идей для исправления этой настройки, но автоматическое продление сертификатов кажется лучшим решением. Это легко сделать с помощью альфа-сертификатов kubeadm, обновить все (Kubernetes 1.15), запущенные cron или таймером systemd на каждом главном узле.

Я заметил, что сервер API, диспетчер контроллеров и планировщик выполняют не забирать новые сертификаты. Есть ли способ уведомить эти компоненты о новых сертификатах? Даже уничтожить модули не так просто, потому что модули уровня управления статичны, а kubectl delete pod просто удаляет зеркальный модуль , но не уничтожает контейнеры. Некоторый подверженный ошибкам docker | grep… мог бы выполнить эту работу, но мне интересно, есть ли вызов API или более разумный способ сделать это. Я не нашел других документов по этой теме.

1
задан 20 April 2020 в 16:30
1 ответ

Я думал, что существовал билет для такого поведения , но я смог найти только один для kubelet и kube-proxy

Вкратце, до тех пор, пока это поведение было "TBD", я не ожидал, что это будет исправлено в ближайшее время будущее. Если ваш кластер представляет собой конфигурацию высокой доступности с несколькими мастерами, я бы ожидал, что будет безопасно перезапускать модули уровня управления в непрерывном режиме. Процесс, который запускает kubeadm alphacerts, обновить все , может перезапустить машину, чтобы выйти из бизнеса по выборочному возврату отдельных докер-контейнеров.

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

for comp_name in kube-apiserver kube-controller-manager etcetc; do
  for c_id in $(docker ps -q \
        --filter "label=io.kubernetes.pod.namespace=kube-system" \
        --filter "label=io.kubernetes.pod.name=${comp_name}"); do
    docker kill $c_id
    docker rm   $c_id
  done
done
1
ответ дан 21 April 2020 в 04:00

Теги

Похожие вопросы