Неверный сертификат 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

Используйте следующую команду:

kubeadm init phase certs all

Для меня, когда я пытался получить доступ через root (после sudo -i), я получил ошибку. Я был взволнован, и с обычным пользователем все заработало.

Мне помогло следующее:

  1. rm -rf ~/.minikube
  2. minikube delete
  3. minikube start

Наверное, пунктов 2 и 3 хватило бы

Другие вопросы по тегам