ワークステーションから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を使用してクラスターを展開しましたが、これらの手順を手動で行う方法がわかりません。
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
新しい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名を追加することをお勧めします。
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
問題の原因:$ 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