%20-%20%E4%BF%AE%E6%AD%A3%E6%96%B9%E6%B3%95.png)
インフラストラクチャを変更せずに、kubectl コマンドを実行すると、次のようになります。
kubectl get nodes
エラーが発生します
You must be logged in to the server (Unauthorized)
Kubernetes クラスターは正常に動作しており、変更も行っていません... これをデバッグする方法はありますか? kubectl には、詳細情報を提供する -vv od デバッグ フラグがありません。
もし私が試したら
kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0",
(...)
error: You must be logged in to the server (the server has asked for the client to provide credentials)
答え1
私の場合、問題は kubernates 証明書を更新した後に発生し、これにより既存の証明書~/.kube/config
に古いキーと証明書の値が含まれるようになりました。
解決策は、価値観 client-certificate-data
同じ名前の更新されたファイルの値を含むclient-key-data
ファイル。~/.kube/config
/etc/kubernetes/kubelet.conf
答え2
Kubernetesの最新バージョンでは、 および をファイルclient-certificate-data
にclient-key-data
コピー/etc/kubernetes/admin.conf
できます。~/.kube/config
この答え証明書の有効期限を決定します。
答え3
私も今日同様の問題に直面しましたが、上記のコメントのおかげで問題を解決することができました。同様の設定をしている人にとって役立つかもしれないので、シナリオの詳細を追加します。
k8s クラスター (EC2 インスタンスの通常のクラスター) に接続するための別のユーザーがいます。 ClusterRoleBindings を追加して、アクセスが制限されたユーザー arunlal を作成しました。
クラスターへの API の実行中に次のエラーが発生した場合 (私の場合は Kubectl):
error: You must be logged in to the server (Unauthorized)
以下の順序で実行してください。
- まず、構成ファイルで使用されている証明書を確認します(ローカルクライアント)
メイン構成には他の k8s および okd クラスターの資格情報に関する詳細が含まれていたため、ローカル システムには別の構成がありました。そのため、ラップトップに 2 番目の構成を作成しました (/Users/arunlal/.kube/config_two)。この場合、次のエイリアスがあります。
alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"
- このファイルから、使用している証明書を取得します。
[[メールアドレス]~] cat /Users/arunlal/.kube/config_two| grep -A 5 ユーザー ユーザー: - 名前: アルンラル ユーザー: クライアント証明書: /Users/arunlal/.arunlal-keys/arunlal.crt クライアントキー: /Users/arunlal/.arunlal-keys/arunlal.key
- クライアント構成で証明書を取得したら、openssl コマンドを使用して有効性を確認できます。
[[メールアドレス]~] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt notBefore=2021年6月22日 23:43:22 GMT notAfter=2021年9月30日 23:43:22 GMT
- 有効期限を検証する
ユーザーを作成するときに、日数を 5 として渡しましたが、それが問題でした。ユーザーをどのように作成しましたか?
openssl genrsa -out arunlal.key 2048
openssl req -new -key arunlal.key -out arunlal.csr -subj "/CN=arunlal/O=crybit"
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 5
kubectl config set-credentials arunlal --client-certificate=/root/arunlal-keys/arunlal.crt --client-key=/root/arunlal-keys/arunlal.key
- 修正するには、日数を増やして証明書を再作成しました
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 100
- これは k8s クラスターから実行する必要があります。
- 証明書をローカルで置き換えました。
新しい証明書で /Users/arunlal/.arunlal-keys/arunlal.crt を変更しました。
これが誰かの役に立つことを願っています。ありがとうございます!
~ アルン
答え4
kubeconfig 証明書が変更されている可能性があります。Terraform を使用してクラスターをデプロイした場合は、terraform apply を実行して新しい kubeconfig ファイルを生成します。