kubernetes 错误:您必须登录到服务器-服务器已要求客户端提供凭据-“kubectl logs”命令给出错误

hvvq6cgz  于 5个月前  发布在  Kubernetes
关注(0)|答案(8)|浏览(160)

我们在CoreOS上安装了kubernetes 1.10.1,有三个节点。安装成功

NAME                STATUS    ROLES     AGE       VERSION
node1.example.com   Ready     master    19h       v1.10.1+coreos.0
node2.example.com   Ready     node      19h       v1.10.1+coreos.0
node3.example.com   Ready     node      19h       v1.10.1+coreos.0

NAMESPACE     NAME                                        READY     STATUS    RESTARTS   AGE
default            pod-nginx2-689b9cdffb-qrpjn       1/1       Running   0          16h
kube-system   calico-kube-controllers-568dfff588-zxqjj    1/1       Running   0          18h
kube-system   calico-node-2wwcg                           2/2       Running   0          18h
kube-system   calico-node-78nzn                           2/2       Running   0          18h
kube-system   calico-node-gbvkn                           2/2       Running   0          18h
kube-system   calico-policy-controller-6d568cc5f7-fx6bv   1/1       Running   0          18h
kube-system   kube-apiserver-x66dh                        1/1       Running   4          18h
kube-system   kube-controller-manager-787f887b67-q6gts    1/1       Running   0          18h
kube-system   kube-dns-79ccb5d8df-b9skr                   3/3       Running   0          18h
kube-system   kube-proxy-gb2wj                            1/1       Running   0          18h
kube-system   kube-proxy-qtxgv                            1/1       Running   0          18h
kube-system   kube-proxy-v7wnf                            1/1       Running   0          18h
kube-system   kube-scheduler-68d5b648c-54925              1/1       Running   0          18h
kube-system   pod-checkpointer-vpvg5                      1/1       Running   0          18h

字符串
但是当我尝试查看任何pod的日志时,kubectl给出了以下错误:
kubectl logs -f pod-nginx 2 - 689 b 9 cdffb-qrpjn错误:您必须登录到服务器(服务器已要求客户端提供凭据(pods/log pod-nginx 2 - 689 b 9 cdffb-qrpjn))
尝试进入pod(使用kubectl的EXEC命令)也会出现以下错误:
kubectl exec -ti pod-nginx 2 - 689 b 9 cdffb-qrpjn bash错误:无法升级连接:未经授权

Kubelet服务文件:

Description=Kubelet via Hyperkube ACI
[Service]
EnvironmentFile=/etc/kubernetes/kubelet.env
Environment="RKT_RUN_ARGS=--uuid-file-save=/var/run/kubelet-pod.uuid \
  --volume=resolv,kind=host,source=/etc/resolv.conf \
  --mount volume=resolv,target=/etc/resolv.conf \
  --volume var-lib-cni,kind=host,source=/var/lib/cni \
  --mount volume=var-lib-cni,target=/var/lib/cni \
  --volume var-log,kind=host,source=/var/log \
  --mount volume=var-log,target=/var/log"
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
ExecStartPre=/bin/mkdir -p /etc/kubernetes/checkpoint-secrets
ExecStartPre=/bin/mkdir -p /etc/kubernetes/inactive-manifests
ExecStartPre=/bin/mkdir -p /var/lib/cni
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/run/kubelet-pod.uuid
ExecStart=/usr/lib/coreos/kubelet-wrapper \
  --kubeconfig=/etc/kubernetes/kubeconfig \
  --config=/etc/kubernetes/config \
  --cni-conf-dir=/etc/kubernetes/cni/net.d \
  --network-plugin=cni \
  --allow-privileged \
  --lock-file=/var/run/lock/kubelet.lock \
  --exit-on-lock-contention \
  --hostname-override=node1.example.com \
  --node-labels=node-role.kubernetes.io/master \
  --register-with-taints=node-role.kubernetes.io/master=:NoSchedule
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/run/kubelet-pod.uuid
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

KubeletConfiguration文件

kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
staticPodPath: "/etc/kubernetes/manifests"
clusterDomain: "cluster.local"
clusterDNS: [ "10.3.0.10" ]
nodeStatusUpdateFrequency: "5s"
clientCAFile: "/etc/kubernetes/ca.crt"


我们还在kube-apiserver.yaml文件中指定了“--kubelet-client-certificate”和“--kubelet-client-key”标志:

- --kubelet-client-certificate=/etc/kubernetes/secrets/apiserver.crt
- --kubelet-client-key=/etc/kubernetes/secrets/apiserver.key


所以我们在这里错过了什么?提前感谢:)

2guxujil

2guxujil1#

在我的情况下,问题是不知何故,上下文被改变了。

kubectl config current-context

字符串
然后把它改回正确的

kubectl config use-context docker-desktop

huwehgph

huwehgph2#

这是一个非常常见的一般性错误,与针对API服务器的身份验证问题有关。
我相信很多人搜索这个标题,所以我会提供一些方向与不同类型的情况下的例子。
1)(* 一般
常见于所有类型的部署-检查凭据是否过期
2)(
Pod和服务帐户 *)
身份验证与其中一个Pod相关,该Pod使用的服务帐户存在令牌无效等问题
3)(IoC或部署工具
使用Terraform等IoC工具运行,您未能正确通过证书,如本例所示。
4)(
云或其他Sass提供商
我在AWS EKS遇到的几个案例:
4.A)如果您不是集群创建者-您可能没有访问集群的权限
当创建EKS集群时,创建集群的用户(或角色)将自动在集群的RBAC配置中被授予system:master权限。其他需要与集群交互的用户或角色需要显式添加-在这里阅读更多内容。
4.B)如果您通过CLI在多个集群/环境/帐户上工作,则需要重新验证当前使用的配置文件,或者需要访问的集群与shell变量
(如AWS_DEFAULT_PROFILEAWS_DEFAULT_REGION)的值之间存在**不匹配。
4.C)新凭证AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY已创建并导出到终端,其中可能包含以前会话的旧值AWS_SESSION_TOKEN),需要替换或取消设置。

z0qdvdin

z0qdvdin3#

在我的情况下,我已经注意到这个问题上运行的集群,这是没有触及很长一段时间-答案是更适用于谷歌搜索,因为这个链接是在顶部的错误经历的问题。
问题是证书过期。
您可以在Kubernetes主服务器上检查:

# find /etc/kubernetes/pki/ -type f -name "*.crt" -print | egrep -v 'ca.crt$' | xargs -L 1 -t  -i bash -c 'openssl x509  -noout -text -in {}|grep After'
bash -c openssl x509  -noout -text -in /etc/kubernetes/pki/apiserver.crt|grep After
            Not After : Jan 19 14:54:15 2022 GMT
bash -c openssl x509  -noout -text -in /etc/kubernetes/pki/apiserver-kubelet-client.crt|grep After
            Not After : Nov 13 01:46:12 2021 GMT
bash -c openssl x509  -noout -text -in /etc/kubernetes/pki/front-proxy-client.crt|grep After
            Not After : Nov 13 01:46:12 2021 GMT

字符串

e0bqpujr

e0bqpujr4#

看起来像你misconfigured kublet
您的Kubelet服务文件中缺少--client-ca-file标志
这就是为什么你可以从master获取一些一般信息,但不能访问节点。
此标志负责证书;没有此标志,您无法访问节点。

5us2dqdw

5us2dqdw5#

对我来说,这个问题与~/.kube/config文件中的错误配置有关,在使用kubectl config view --raw >~/.kube/config恢复配置后,问题得到了解决

crcmnpdw

crcmnpdw6#

一般来说,许多不同的.kube/config文件错误都会触发这个错误消息。在我的情况下,我只是在配置文件中指定了错误的集群名称(并花了很多时间试图调试它)。
当我指定了错误的集群名称时,我收到了2个MFA令牌代码请求,后面是error: You must be logged in to the server (the server has asked for the client to provide credentials)消息。
范例:

# kubectl create -f scripts/aws-auth-cm.yaml
Assume Role MFA token code: 123456
Assume Role MFA token code: 123456
could not get token: AccessDenied: MultiFactorAuthentication failed with invalid MFA one time pass code.

字符串

snz8szmq

snz8szmq7#

我刚刚遇到了这个问题。在证书更新(kubeadm certs renew all)和控制平面重启(包括所有主节点上的kubelet)之后,我必须在所有工作节点上重启kubelet。

$ sudo systemctl restart kubelet

字符串

n6lpvg4x

n6lpvg4x8#

在我的例子中,我在尝试运行不同的kubectl命令时遇到了多个错误,比如未经授权,服务器要求客户端提供凭据等。在花费了几个小时后,我推断到我的云集群的同步不知何故变得混乱。所以我运行以下命令来刷新配置,它再次开始工作:
1.取消设置用户:
第一个月
1.删除群集:
kubectl config delete-cluster <full-cluster-name-as-found-in: kubectl config view>
1.删除上下文:
kubectl config delete-context <full-context-name-as-found-in: kubectl config view>
1.默认上下文:
kubectl config use-context contexts
1.从云获取新的集群配置:
ibmcloud cs cluster config --cluster <cluster-name>
注意:我的集群使用的是ibmcloud,因此最后一个命令可能与您的情况不同

相关问题