Kubernetes 错误:您必须登录到服务器-服务器已要求客户端提供凭据-“;kubectl原木“;命令给出错误
我们在CoreOS上安装了kubernetes 1.10.1,其中有三个节点。 安装成功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
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版本
为您提供了什么?