У меня есть одноузловой кластер Kubernetes, которому нужно изменить IP. Я вижу, что текущий IP находится во многих конфигурационных файлах, что не является большой проблемой. Более серьезная проблема заключается в том, что когда я изменил адрес, у меня возникла ошибка, что сертификат действителен только для старого IP, а не для нового.
Как я должен выполнить изменение? Я предполагаю, что могу изменить IP в конфигурационных файлах на DNS-распознаваемое имя хоста, тогда конфигурации будут действительны для обоих IP. Можно ли перегенерировать сертификат для имени хоста, чтобы он работал независимо от IP?
Edit:
Я нашел команду для перегенерации сертификата:
kubeadm alpha phase certs selfsign --apiserver-advertise-address=0.0.0.0 --cert-altnames=10.161.233.80 --cert-altnames=114.215.201.87
К сожалению, она не работает:
Error: unknown flag: --apiserver-advertise-address
Я также попытался выполнить эти команды:
sudo mv /etc/kubernetes/pki /etc/kubernetes/pki_bak
sudo kubeadm init phase certs all
Она воссоздала сертификаты с правильным ip-адресом, но в /etc/kubernetes/admin.conf
все еще неверный. Любой kubectl --kubeconfig=/etc/kubernetes/admin.conf
без --insecure-skip-tls-verify
не работает. То же самое для kubeadm config view
:
sudo kubeadm config view --v=5
I0330 04:32:11.754422 21907 config.go:296] [config] retrieving ClientSet from file
I0330 04:32:11.769423 21907 config.go:400] [config] getting the cluster configuration
Get https://10.202.91.41:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config: x509: certificate is valid for 10.96.0.1, 10.202.91.129, not 10.202.91.41
Конфигурация моего кластера довольно распределенная, поэтому я хотел бы избежать необходимости воссоздавать кластер с нуля, поскольку сделать это будет довольно сложно.
В настоящее время я использую версию 1.16.
Edit2:
Я удалил файл admin.conf
и выполнил команду kubeadm init phase kubeconfig admin
. Она воссоздала admin.conf
, но снова с неправильным сертификатом.
Следующие шаги из этой статьи помогли: https://blog.scottlowe.org/2019/07/30/adding-a-name-to-kubernetes-api-server-certificate/