web-dev-qa-db-ja.com

Kubernetesマスターの無効なx509証明書

ワークステーションからk8sマスターに到達しようとしています。 LANからマスターにアクセスできますが、ワークステーションからはアクセスできません。エラーメッセージは次のとおりです。

% 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を使用してクラスターを展開しましたが、これらの手順を手動で行う方法がわかりません。

18
user1208081

1つのオプションは、証明書を検証しないことを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
31
Janos Lenart

新しい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

また、次回にこのような問題を回避するために、--apiserver-cert-extra-sansにdns名を追加することをお勧めします。

17
kvaps

Kubeadm 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
6
Marcin Król

問題の原因:$ HOME/.kube /の設定に古いIPアドレスが含まれています。

実行してみて、

rm $HOME/.kube/* -rf
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5
Sarath kumar S

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.*)を削除する必要があります!

1
Marc

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
0
zjor

次のコマンドを使用します。

kubeadm init phase certs all
0
KlSoft