Неверный сертификат x509 для мастера kubernetes
Я пытаюсь связаться с мастером k8s с моей рабочей станции. Я могу получить доступ к мастеру из локальной сети нормально, но не с моей рабочей станции. Сообщение об ошибке:
% kubectl --context=employee-context get pods
Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.161.233.80, not 114.215.201.87
Как я могу сделать, чтобы добавить 114.215.201.87 к сертификату? Нужно ли мне удалить мой старый кластер ca.crt, воссоздать его, перезапустить весь кластер, а затем отказаться от сертификата клиента? Я развернул свой кластер с помощью kubeadm, и я не уверен, как выполнить эти шаги вручную.
4 ответа
Один из вариантов - рассказать kubectl
что вы не хотите, чтобы сертификат был проверен. Очевидно, что это вызывает проблемы с безопасностью, но я думаю, что вы только тестируете, так что вот и все:
kubectl --insecure-skip-tls-verify --context=employee-context get pods
Лучший вариант - исправить сертификат. Проще всего, если вы повторно инициализируете кластер, запустив kubeadm reset
на всех узлах, включая мастер, а затем сделать
kubeadm init --apiserver-cert-extra-sans=114.215.201.87
Можно также исправить этот сертификат, не стирая все, но это немного сложнее. Выполните что-то вроде этого на мастере от имени root:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs selfsign --apiserver-advertise-address=0.0.0.0 --cert-altnames=10.161.233.80 --cert-altnames=114.215.201.87
docker rm `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
Эта команда для новых kubernetes >=1.8:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=10.161.233.80,114.215.201.87
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
Также было бы лучше добавить имя DNS в --apiserver-cert-extra-sans
чтобы избежать подобных проблем в следующий раз.
Для кубеадм v1.13.3
rm /etc/kubernetes/pki/apiserver.*
kubeadm init phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=114.215.201.87
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
Причина проблемы: ваши конфиги в $HOME/.kube/ присутствуют с вашим старым IP-адресом.
Попробуйте запустить,
rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Если вы использовали kubespray для обеспечения кластера, вам нужно добавить "плавающий ip" (в вашем случае это "114.215.201.87"). Эта переменная называется supplementary_addresses_in_ssl_keys
в group_vars/k8s-cluster/k8s-cluster.yml
файл. После обновления просто перезапустите ansible-playbook -b -v -i inventory/<WHATEVER-YOU-NAMED-IT>/hosts.ini cluster.yml
,
ПРИМЕЧАНИЕ: вам все равно нужно удалить все сертификаты apiserver ( rm /etc/kubernetes/pki/apiserver.*
) от каждого из ваших мастер-узлов до запуска!
Для Kubernetes 1.12.2/CentOS 7.4 последовательность выглядит следующим образом:
rm /etc/kubernetes/pki/apiserver.*
kubeadm alpha phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=51.158.75.136
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
Для меня, когда я пытался получить доступ через root (после sudo -i), я получил ошибку. Я был взволнован, и с обычным пользователем все заработало.
Мне помогло следующее:
rm -rf ~/.minikube
minikube delete
minikube start
Наверное, пунктов 2 и 3 хватило бы