我们在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-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
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
那么我们在这里缺少什么? 在此先感谢:)
答案 0 :(得分:1)
看起来像misconfigured kublet:
您错过了 Kubelet服务文件中的--client-ca-file
标记
这就是为什么你可以从master获取一些一般信息,但无法访问节点。
此标志负责证书;没有此标志,您将无法访问节点。
答案 1 :(得分:1)
这是一个安静的常见和一般错误,与针对 API 服务器的身份验证问题有关。
我相信很多人都在搜索这个标题,所以我将提供一些说明,并提供不同类型案例的示例。
1 ) (General)
适用于所有类型的部署 - 检查凭据是否已过期。
2 )(Pods 和服务帐户)
身份验证与其中一个使用服务帐户的 Pod 相关,该服务帐户存在令牌无效等问题 .
3 )(IoC 或部署工具)
使用 Terraform 等 IoC 工具运行,您未能正确通过证书 喜欢在this case。
4 )(云或其他 Sass 提供商)
我在使用 AWS EKS 时遇到的一些案例:
4.A) 如果您不是集群创建者 - 您可能没有访问集群的权限。
创建 EKS 集群后,创建集群的用户(或角色)会自动获得集群 RBAC 配置中的 system:master
权限。
需要能够与您的集群交互的其他用户或角色需要明确添加 - 在 here 中阅读更多内容。
4.B) 如果您通过 CLI 处理多个集群/环境/帐户,则需要重新验证当前使用的配置文件,或者需要重新验证集群之间的不匹配和 shell 变量的值如:AWS_DEFAULT_PROFILE
或 AWS_DEFAULT_REGION
。
4.C) 新凭据(AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
)被创建并导出到终端,其中可能包含前一个会话的旧值 (AWS_SESSION_TOKEN
) 并且需要替换或取消设置。
答案 2 :(得分:0)
通常,许多不同的.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.
答案 3 :(得分:0)
就我而言,在尝试运行不同的kubectl命令(例如未授权,服务器已要求客户端提供凭据等)时遇到了多个错误。花了几个小时后,我推断出与云上集群的同步有些混乱向上。因此,我运行以下命令来刷新配置,它再次开始工作:
取消用户设置:
kubectl config unset users.<full-user-name-as-found-in: kubectl config view>
删除集群:
kubectl config delete-cluster <full-cluster-name-as-found-in: kubectl config view>
删除上下文:
kubectl config delete-context <full-context-name-as-found-in: kubectl config view>
默认上下文:
kubectl config use-context contexts
从云中获取新的集群配置:
ibmcloud cs cluster config --cluster <cluster-name>
注意:我正在为集群使用ibmcloud,因此您的情况下的最后一个命令可能会有所不同
答案 4 :(得分:0)
对我来说,问题与〜/ .kube / config文件中的错误配置有关,使用kubectl config view --raw>〜/ .kube / config恢复配置后,此问题已解决