Не могу получить доступ к моему кластеру kubernetes, даже если все мои сертификаты сервера действительны - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь добиться, чтобы срок действия моего кластера kubernetes составлял 5 лет, поэтому я сделал свои ca.crt, apiserver.crt, kubelet-client.crt, front-proxy.crt сроком на 5 лет и поместил их в / etc / kubernetes / pki .

Кроме того, я включил свой кублет с ротацией сертификатов клиента

Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki --feature-gates=RotateKubeletClientCertificate=true"

Для проверкимой кластер работает нормально Я изменил дату в моей системе на 1 день до истечения 1 года, и чередование сертификатов выполнено правильно

Oct 22 06:00:16 ip-10-0-1-170.ec2.internal kubelet[28887]: I1022 06:00:16.806115   28887 reconciler.go:154] Reconciler: start to sync state
Oct 22 06:00:23 ip-10-0-1-170.ec2.internal kubelet[28887]: I1022 06:00:23.546154   28887 transport.go:126] certificate rotation detected, shutting down client connections to start using new credentials

Но как только мой кластер проходит один год, он начинает показывать ошибку на любом kubectl getКоманда node / pods: «ошибка: вы должны войти в систему на сервере (не авторизовано)»

Возможная проблема, которую я могу представить, заключается в том, что / etc / kubernetes / admin.conf имеет только одну проблему-годичные сертификатыСпасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я нашел способ регенерировать новый сертификат admin.conf до истечения срока действия кластера.

. Сгенерировать admin.key и admin.csr, используя openssl

openssl genrsa -out admin.key 2048 
openssl req -new -key admin.key -out admin.csr -subj "/O=system:masters/CN=kubernetes-admin"

. Теперь создайте CSR в kubernetes.используя выше openssl admin.csr

cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: admin_csr
spec:
  groups:
  - system:authenticated
  request: $(cat admin.csr | base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - client auth
EOF

Теперь утвердите CSR, сгенерированный с использованием сертификата kubectl, утвердите admin_csr

Теперь извлеките admin.crt из утвержденного CSR kubectl get csr admin_csr -o jsonpath = '{.status.certificate} '|base64 -d> admin.crt

Теперь измените текущего пользователя и контекст, чтобы использовать новый ключ администратора и сертификаты.

kubectl config set-credentials kubernetes-admin --client-certificate=/home/centos/certs/admin.crt  --client-key=/home/centos/certs/admin.key
kubectl config set-context kubernetes-admin@kubernetes --cluster=kubernetes --user=kubernetes-admin

После этого шага ваш kubeconfig, в моем случае это / root/.kube/config содержит новые данные и ключ сертификата клиента.

Надеюсь, это поможет.

0 голосов
/ 22 октября 2018

Ваш client-certificate ( / etc / kubernetes / admin.conf ) создается в течение одного года.Вы можете создать свой сертификат клиента, используя следующую команду:

kubeadm alpha phase kubeconfig admin --cert-dir /etc/kubernetes/pki --kubeconfig-dir /etc/kubernetes/
...