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

Kubernetes 错误:您必须登录到服务器-服务器已要求客户端提供凭据-“;kubectl原木“;命令给出错误,kubernetes,Kubernetes,我们在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

我们在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
但当我试图查看任何吊舱的日志时,kubectl给出了以下错误:

kubectl日志-f pod-nginx2-689b9cdffb-qrpjn错误:必须记录您的日志 在服务器中(服务器已要求客户端提供 凭证(pods/log pod-nginx2-689b9cdffb-qrpjn))

同时,尝试进入POD内部(使用kubectl的EXEC命令)会出现以下错误:

kubectl exec-ti pod-nginx2-689b9cdffb-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客户端证书”和“-kubelet客户端密钥”标志:

- --kubelet-client-certificate=/etc/kubernetes/secrets/apiserver.crt
- --kubelet-client-key=/etc/kubernetes/secrets/apiserver.key
那么,我们在这里遗漏了什么? 提前感谢:)

看起来你:

您错过了Kubelet服务文件中的
--客户端ca文件
标志

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"
这就是为什么您可以从master获取一些常规信息,但无法访问节点


此标志负责证书;如果没有此标志,您将无法访问节点。

通常,许多不同的.kube/config文件错误将触发此错误消息。在我的例子中,我只是在配置文件中指定了错误的集群名称(并且花了很多时间试图调试它)

当我指定了错误的集群名称时,我收到了两个请求MFA令牌代码的请求,然后是
错误:您必须登录到服务器(服务器要求客户端提供凭据)
消息

例如:

# 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.

在我的例子中,我在尝试运行不同的kubectl命令时遇到了多个错误,如未经授权、服务器要求客户端提供凭据等。在花了几个小时后,我推断与我的云端集群的同步不知何故会出错。因此,我运行以下命令来刷新配置,它再次开始工作:

  • 取消设置用户:

    kubectl config取消设置用户。

  • 删除群集:

    kubectl配置删除集群

  • 删除上下文:

    kubectl配置删除上下文

  • 默认上下文:

    kubectl配置使用上下文上下文

  • 从云获取新的群集配置:

    ibmcloud cs群集配置--群集


  • 注意:我在集群中使用ibmcloud,因此最后一个命令可能与您的情况不同

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

    这是一个常见的常规错误,与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\u DEFAULT\u profile
    AWS\u DEFAULT\u REGION

    4.C)新凭证
    AWS\u ACCESS\u KEY\u ID
    AWS\u SECRET\u ACCESS\u KEY
    已创建并导出到终端,该终端可能包含以前会话的旧值(
    AWS\u session\u TOKEN
    ),需要更换或取消设置



    您是如何设置kubectl的?yout kube配置文件是什么样子的?您是否使用了正确的客户端/服务器证书?
    kubectl版本
    为您提供了什么?