Эта инструкция поможет добавить альтернативное имя субъекта (SAN) в TLS-сертификат сервера API Kubernetes, развернутого через Kubespray. Процесс полезен, например, при добавлении балансировщика нагрузки или нового имени хоста для доступа к серверу API. Инструкция подходит для кластеров с одной или несколькими мастер-нодами.
Шаги по обновлению сертификата сервера API
Зайдите на мастер ноду по ssh.
Нам понадобится файл конфигурации kubeadm
. Чтобы извлечь конфигурацию из кластера во внешний файл, выполните следующую команду:
kubectl -n kube-system get configmap kubeadm-config \ -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
Это создает файл с именем kubeadm.yaml
, содержимое которого может выглядеть примерно так (файл из вашего кластера может иметь другие значения):
В этом конкретном примере дополнительные SAN не указаны. Чтобы добавить хотя бы один SAN, добавьте их в certSANs
в разделе apiServer:
Этот пример добавляет SAN для IP-адреса 185.205.3.15 - белый IP edge gateway vOrg, в которой развернут кластер. Это дополняет стандартный список имен SAN, включающий localhost и некоторые служебные имена для Kubernetes, которые создаются по умолчанию.
Теперь следует переместить существующие сертификаты, иначе кубернетес не даст выпустить новые.
Выполняем команду:
mv /etc/kubernetes/pki/apiserver.{crt,key} ~
Она переместит сертификаты в домашнюю директорию пользователя.
Генерируем новые сертификаты и ключ для API-сервера, с помощью следующей команды:
kubeadm init phase certs apiserver --config kubeadm.yaml
Перезапустим API сервер, для применения изменений:
Выполните команду
crictl pods | grep kube-apiserver | cut -d' ' -f1
чтобы получить идентификатор пода API.
Останавливаем под:
crictl stopp <id_пода_API>
Удаляем под:
crictl rmp <id_пода_API>
Kubelet автоматически перезапустит контейнер, который получит новый сертификат. Как только API-сервер перезапустится, вы сразу же сможете подключиться к нему, используя один из добавленных IP-адресов или имён хостов.
Осталось только добавить порт 6443 в правила NAT и создать разрешающее правило на фаерволе. О том как это сделать описано в этой статье.