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

Ron*_*dya 11 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.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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试查看任何 pod 的日志时,kubectl 会出现以下错误:

kubectl logs -f pod-nginx2-689b9cdffb-qrpjn 错误:您必须登录到服务器(服务器已要求客户端提供凭据(pods/log pod-nginx2-689b9cdffb-qrpjn))

并且还试图进入 pods(使用 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
Run Code Online (Sandbox Code Playgroud)

Kubelet 配置文件

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"
Run Code Online (Sandbox Code Playgroud)

我们还在 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
Run Code Online (Sandbox Code Playgroud)

那么我们在这里缺少什么?提前致谢 :)

Tim*_*thy 20

就我而言,问题在于上下文以某种方式发生了变化。检查过

kubectl config current-context
Run Code Online (Sandbox Code Playgroud)

然后将其改回正确的

kubectl config use-context docker-desktop
Run Code Online (Sandbox Code Playgroud)


Rtm*_*tmY 13

这是一个安静的常见错误,与 API 服务器的身份验证问题有关。

我相信很多人都在搜索这个标题,所以我将提供一些指导以及针对不同类型案例的示例。

1)(常规
所有类型的部署都通用 - 检查凭据是否已过期

2)(Pod 和服务帐户)身份验证与使用存在无效令牌等问题的服务帐户的 Pod 之一
相关。

3)(IoC 或部署工具)使用Terraform 等IoC 工具
运行,但您无法像本例一样正确通过证书

4)(云或其他 Sass 提供商
我在使用 AWS EKS 时遇到的一些案例:

4.A)如果您不是集群创建者 - 您可能没有访问 cluster 的权限

创建 EKS 集群时,创建集群的用户(或角色)将自动被授予system:master集群 RBAC 配置中的权限。需要显式添加需要能够与集群交互的其他用户或角色 - 请在此处阅读更多信息。

4.B) 如果您通过 CLI 在多个集群/环境/帐户上工作,则需要重新验证当前使用的配置文件,或者需要访问的集群与以下值之间存在不匹配shell 变量如:AWS_DEFAULT_PROFILEAWS_DEFAULT_REGION.

4.C)创建了新凭据(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)并将其导出到终端,其中可能包含先前会话( AWS_SESSION_TOKEN) 的旧值,需要替换或取消设置。



Nic*_*Rak 2

看来您错误配置了 kublet

\n\n

您错过了Kubelet 服务文件--client-ca-file中的标志

\n\n

这就是为什么你可以从 master 获取一些一般信息,但不能访问节点的原因。

\n\n

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

\n