Kubernetes: kubeadminit後のx509証明書の問題

作成日 2017年07月01日  ·  28コメント  ·  ソース: kubernetes/kubernetes

バグレポート:(私は思いますか?)

何が起こったのか

Ubuntu16.04で次の手順を実行しました。

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo su
  4. kubeadm reset
  5. kubeadm init --token [redacted] --apiserver-advertise-address=192.168.13.1 --pod-network-cidr=10.244.0.0/16
  6. exit
  7. mkdir -p $HOME/.kube
  8. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  10. kubectl get nodes

これを行うと、私は受け取ります:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

kubectlkubeadmkubeletを数回( --purge )アンインストールしてみましたが、何をしても(kubeadm 1.7 )動作するadmin.conf生成しません。 しかし、私は以下を実行します:

curl --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key https://192.168.13.1:6443

そして取得:

{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/apis/apiextensions.k8s.io",
    "/apis/apiextensions.k8s.io/v1beta1",
    "/apis/apiregistration.k8s.io",
    "/apis/apiregistration.k8s.io/v1beta1",
    "/apis/apps",
    "/apis/apps/v1beta1",
    "/apis/authentication.k8s.io",
    "/apis/authentication.k8s.io/v1",
    "/apis/authentication.k8s.io/v1beta1",
    "/apis/authorization.k8s.io",
    "/apis/authorization.k8s.io/v1",
    "/apis/authorization.k8s.io/v1beta1",
    "/apis/autoscaling",
    "/apis/autoscaling/v1",
    "/apis/batch",
    "/apis/batch/v1",
    "/apis/certificates.k8s.io",
    "/apis/certificates.k8s.io/v1beta1",
    "/apis/extensions",
    "/apis/extensions/v1beta1",
    "/apis/networking.k8s.io",
    "/apis/networking.k8s.io/v1",
    "/apis/policy",
    "/apis/policy/v1beta1",
    "/apis/rbac.authorization.k8s.io",
    "/apis/rbac.authorization.k8s.io/v1alpha1",
    "/apis/rbac.authorization.k8s.io/v1beta1",
    "/apis/settings.k8s.io",
    "/apis/settings.k8s.io/v1alpha1",
    "/apis/storage.k8s.io",
    "/apis/storage.k8s.io/v1",
    "/apis/storage.k8s.io/v1beta1",
    "/healthz",
    "/healthz/autoregister-completion",
    "/healthz/ping",
    "/healthz/poststarthook/apiservice-registration-controller",
    "/healthz/poststarthook/apiservice-status-available-controller",
    "/healthz/poststarthook/bootstrap-controller",
    "/healthz/poststarthook/ca-registration",
    "/healthz/poststarthook/extensions/third-party-resources",
    "/healthz/poststarthook/generic-apiserver-start-informers",
    "/healthz/poststarthook/kube-apiserver-autoregistration",
    "/healthz/poststarthook/rbac/bootstrap-roles",
    "/healthz/poststarthook/start-apiextensions-controllers",
    "/healthz/poststarthook/start-apiextensions-informers",
    "/healthz/poststarthook/start-kube-aggregator-informers",
    "/healthz/poststarthook/start-kube-apiserver-informers",
    "/logs",
    "/metrics",
    "/swagger-2.0.0.json",
    "/swagger-2.0.0.pb-v1",
    "/swagger-2.0.0.pb-v1.gz",
    "/swagger.json",
    "/swaggerapi",
    "/ui",
    "/ui/",
    "/version"
  ]
}

あなたが起こると期待したこと

kubeadm initを介してマスターを初期化した後、 kubectlを使用してネットワークプラグインをインストールできると期待していました。 x509なので、それはできません。

環境

  • Kubernetesバージョン( kubectl version ):1.7
  • OS(例:/ etc / os-releaseから):Ubuntu 16.04.2 LTS
  • カーネル(例: uname -a ):Linux radium-control 4.4.0-83-generic#106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux
arekubeadm sicluster-lifecycle

最も参考になるコメント

$KUBECONFIG指す/etc/kubernetes/kubelet.confますか?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

全てのコメント28件

@carldanleyこの問題に関するsigラベルはありません。 次の方法でsigラベルを追加してください。
(1)sigに言及する: @kubernetes/sig-<team-name>-misc
例:APIマシナリーの場合は@kubernetes/sig-api-machinery-*
(2)ラベルを手動で指定する: /sig <label>
例:sig / scalabilityの場合は/sig scalability

_注:方法(1)は、チームへの通知をトリガーします。 チームリストはこちら、ラベルリストはこちら_

/ sigcluster-ライフサイクル

わからないこのことができますが、私は同じを持っていた私は、古いセットアップガイドを使用してコピーした実現であれば/etc/kubernetes/admin.conf~/.kube/admin.confと設定$KUBECONFIG=$HOME/.kube/admin.conf 。 環境変数をクリアすると、 kubectlデフォルトで~/.kube/config

kubeadmv1.7を使用してこれも確認しています-ノードがクラスターに参加するのを妨げています

私のインストールでも同じエラーが発生します。 v1.6.5と1.6.7で試してみてください。正常に動作します。

ここでも同じ問題があります。

kubeadm initは大丈夫のようです)

ns2 ~ # kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.3
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] WARNING: docker version is greater than the most recently validated version. Docker version: 17.03.1-ce. Max validated version: 1.12
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: socat not found in system path
[preflight] No supported init system detected, won't ensure kubelet is running.
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [ns2 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 ip_of_my_server]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 36.004283 seconds
[token] Using token: 62af23.9fba33a48799d425
[apiconfig] Created RBAC rules
[addons] Applied essential addon: kube-proxy
[addons] Applied essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token [some string] [ip_of_my_server]:6443

kubeadm joinも大丈夫そうです)

h1 ~ # kubeadm join --token [some string] [ip_of_my_server]:6443 --skip-preflight-checks 
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Skipping pre-flight checks
[discovery] Trying to connect to API Server "192.168.0.254:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://192.168.0.254:6443"
[discovery] Cluster info signature and contents are valid, will use API Server "https://192.168.0.254:6443"
[discovery] Successfully established connection with API Server "192.168.0.254:6443"
[bootstrap] Detected server version: v1.7.3
[bootstrap] The server supports the Certificates API (certificates.k8s.io/v1beta1)
[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request
[csr] Received signed certificate from the API server, generating KubeConfig...
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

(ただし、 kubectl get nodes失敗します)

byungnam2<strong i="17">@ns2</strong> ~ $ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

$KUBECONFIG指す/etc/kubernetes/kubelet.confますか?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

@liggitt $KUBECONFIG/etc/kubernetes/kubelet.confに設定すると、タイムアウトエラーが発生します。

ns2 ~ # ./kubernetes/kubernetes/server/bin/kubectl get nodes
Error from server (ServerTimeout): the server cannot complete the requested operation at this time, try again later (get nodes)

そして今、私が参照しているマニュアルにはそのようなステートメントがないので、 $KUBECONFIGがどこから来たのかが欲しいです。

node joinコマンドの出力から:

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

kubeadmで遊んでいるときに同じ問題が発生しました。

kubeadm initkubeadm resetを数回実行すると、 certificate signed by unknown authority (kubeletログ内)が原因で、kubeletはapiserverとの通信に失敗します。 また、永遠にkubeadm initブロック。

/run/kubernetes/手動で削除すると、すべてが元に戻ります。 kubeadm reset実行しているときに、証明書のクリーニングに問題があるのではないでしょうか。

/ area kubeadm

私はkubeadm1.8を使用していますが、この問題は引き続き発生します。

ubuntu@ip-172-31-9-157:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$

/var/run/kubernetesを手動でチェックしました。 kubeadm resetを実行したときにクリーンアップされました。 実際の問題が何であるかわからない。

注意:「クラスターの使用を開始するには、(通常のユーザーとして)実行する必要があります」

[ root @ master1〜] #kubectlgetnodes
サーバーに接続できません:x509:不明な認証局によって署名された証明書(認証局の候補証明書「kubernetes」を検証しようとしたときに「crypto / rsa:検証エラー」が原因である可能性があります)

[ root @ master1〜 ]#su-regular_user

[ regular_user @ master1〜] $ mkdir -p $ HOME / .kube
[ regular_user @ master1〜] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1〜 ] $ sudo chown $(id -u):$(id -g)$ HOME / .kube / config

[ regular_user @ master1〜] $ kubectlgetnodes
名前ステータスロール年齢バージョン
master1.virti.corpNotReadyマスター6mv1.8.1
master2.virti.corp NotReady4m v1.8.1

@ jeffbr13ありがとう。 できます。

この回避策でドキュメントを更新してください

kubeadmをリセットしてからkubeadminitを再度実行し、以下をrootとして実行したことがある場合は、新しい構成を取得するために(rootとして)再度実行する必要があります。
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $(id -u):$(id -g)$ HOME / .kube / config

その後、rootとして実行できます。

「sudokubeadmreset」を実行する予定がある場合は、キャッシュされたdirをクリアするために.kubeディレクトリを削除する必要があります。
その後、@ petersonwsantosをフォローできます
ああ、必ずKUBECONFIGを、設定ファイルの名前を$ HOME / .kube / configなどに(名前を変更して)設定してください。

戦車は真のintを友好します。

次の行として構成します。_$ kubectlgetnodes_は機能します。

_root:〜/ k8s#cat 04-config.sh
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $(id -u):$(id -g)$ HOME / .kube / config
sudo chmod 777 $ HOME / .kube / config
KUBECONFIG = / etc / kubernetes /kubelet.confをエクスポートします
KUBECONFIG = / home / ubuntu / .kube / configをエクスポートします
kubectlgetノード

これは、マルチマスターセットアップがあり、各マスターで/etc/kubernetes/pki/ca.*を生成したことが原因である可能性があります。 それらを最初のマスターから残りのマスターにコピーするのではなく。

kubernetesのドキュメントで解決策を見つけました
ドキュメントをフォローしている間、このコマンドを使用して.kubeディレクトリを作成することを忘れないでください
mkdir -p $HOME/.kube

このコマンドが必要になると、.kubeディレクトリが移動するためです。
mv $HOME/.kube $HOME/.kube.bak

https://kubernetes.io/docs/setup/independent/troubleshooting-kubeadm/

この問題が発生している可能性がある他のユーザーの場合は、/ root / .kubeフォルダーが存在する場合はバックアップ場所に移動して、再試行することをお勧めします。 kubeadmをsudoとして実行するため、キャッシュされたルートバージョンが使用されていない可能性があります。

私の問題は、KubeEdgeスタートガイドで作成したカスタム証明書があることでした。 sslとkubeedgeをいじり回さなくても機能しました。

注意:「クラスターの使用を開始するには、(通常のユーザーとして)実行する必要があります」

[ root @ master1〜] #kubectlgetnodes
サーバーに接続できません:x509:不明な認証局によって署名された証明書(認証局の候補証明書「kubernetes」を検証しようとしたときに「crypto / rsa:検証エラー」が原因である可能性があります)

[ root @ master1〜 ]#su-regular_user

[ regular_user @ master1〜] $ mkdir -p $ HOME / .kube
[ regular_user @ master1〜] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1〜 ] $ sudo chown $(id -u):$(id -g)$ HOME / .kube / config

これは機能します。 変更されたため、KUBECONFIGを再度設定する必要があったことを除いて

KUBECONFIG = $ HOME / .kube / configをエクスポートします

[ regular_user @ master1〜] $ kubectlgetnodes
名前ステータスロール年齢バージョン
master1.virti.corpNotReadyマスター6mv1.8.1
master2.virti.corp NotReady 4m v1.8.1

$KUBECONFIG指す/etc/kubernetes/kubelet.confますか?

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

それは私のために働きます、どうもありがとう。

KUBECONFIG = / etc / kubernetes /kubelet.confをエクスポートします
kubectlgetノード

私の仕事です

注意:「クラスターの使用を開始するには、(通常のユーザーとして)実行する必要があります」

[ root @ master1〜] #kubectlgetnodes
サーバーに接続できません:x509:不明な認証局によって署名された証明書(認証局の候補証明書「kubernetes」を検証しようとしたときに「crypto / rsa:検証エラー」が原因である可能性があります)

[ root @ master1〜 ]#su-regular_user

[ regular_user @ master1〜] $ mkdir -p $ HOME / .kube
[ regular_user @ master1〜] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ regular_user @ master1〜 ] $ sudo chown $(id -u):$(id -g)$ HOME / .kube / config

[ regular_user @ master1〜] $ kubectlgetnodes
名前ステータスロール年齢バージョン
master1.virti.corpNotReadyマスター6mv1.8.1
master2.virti.corp NotReady 4m v1.8.1

これはうまくいきました!

kubeadm init後、$ HOME / .kubeフォルダーを削除して、新しいフォルダーを作成する必要があります。

mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $(id -u):$(id -g)$ HOME / .kube / config

このページは役に立ちましたか?
0 / 5 - 0 評価