我们在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
型
所以我们在这里错过了什么?提前感谢:)
8条答案
按热度按时间2guxujil1#
在我的情况下,问题是不知何故,上下文被改变了。
字符串
然后把它改回正确的
型
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_PROFILE
或AWS_DEFAULT_REGION
)的值之间存在**不匹配。4.C)新凭证(
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)已创建并导出到终端,其中可能包含以前会话的旧值(AWS_SESSION_TOKEN
),需要替换或取消设置。z0qdvdin3#
在我的情况下,我已经注意到这个问题上运行的集群,这是没有触及很长一段时间-答案是更适用于谷歌搜索,因为这个链接是在顶部的错误经历的问题。
问题是证书过期。
您可以在Kubernetes主服务器上检查:
字符串
e0bqpujr4#
看起来像你misconfigured kublet:
您的Kubelet服务文件中缺少
--client-ca-file
标志这就是为什么你可以从master获取一些一般信息,但不能访问节点。
此标志负责证书;没有此标志,您无法访问节点。
5us2dqdw5#
对我来说,这个问题与~/.kube/config文件中的错误配置有关,在使用kubectl config view --raw >~/.kube/config恢复配置后,问题得到了解决
crcmnpdw6#
一般来说,许多不同的.kube/config文件错误都会触发这个错误消息。在我的情况下,我只是在配置文件中指定了错误的集群名称(并花了很多时间试图调试它)。
当我指定了错误的集群名称时,我收到了2个MFA令牌代码请求,后面是
error: You must be logged in to the server (the server has asked for the client to provide credentials)
消息。范例:
字符串
snz8szmq7#
我刚刚遇到了这个问题。在证书更新(kubeadm certs renew all)和控制平面重启(包括所有主节点上的kubelet)之后,我必须在所有工作节点上重启kubelet。
字符串
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,因此最后一个命令可能与您的情况不同