Kubernetes 升级至 1.13.0 后,kubectl 日志中出现 Forbidden 错误

Kubernetes 升级至 1.13.0 后,kubectl 日志中出现 Forbidden 错误

我最近将本地 Kubernetes 集群从 1.12.1 升级到了 1.13.0,以便显而易见的原因但是现在我在主节点上运行的 kubectl 无法从主节点本身以外的任何节点获取容器日志。

这个问题既发生在 kubelet 已升级到 1.13.0 的节点上,也发生在 kubelet 仍在 1.12.1 版本下运行的节点上。这让我认为这不是 kubelet 本身的问题,而是 1.13.0 版本中配置处理的一些变化导致日志记录失败。

当我执行时kubectl logs -f pod/podname-749c5c589f-vt7hj,我得到:

Error from server: Get https://10.48.76.46:10250/containerLogs/default/podname-749c5c589f-vt7hj/podname?follow=true: Forbidden

我检查了所有显而易见的东西,比如主节点和运行此 pod 的从节点之间的网络连接,以及可能配置的任何代理,但它总是失败。此外,从节点上的 kubelet 日志没有记录任何错误。

此外,此 pod 的其他常用 kubelet 命令(如attach和 )也exec适用于此 pod,因此节点间通信正常。此外,pod 本身运行良好,我只是看不到它的日志。

知道 1.13.0 中发生了什么可能会导致这种情况发生吗?

答案1

我在 kube-apiserver.yaml 配置文件中为 minion 节点的主机名设置了一个 no_proxy 环境变量,但出于某种原因,kube-apiserver 连接到 minion 节点的 IP 地址而不是主机名。在 1.12.1 版本之前它没有这样做,因为它只通过其 IP 地址连接到主节点。我在配置中添加了所有 minion 节点的 IP 地址,重新启动了 kubelet(以及 kube-apiserver),现在问题已经解决。

专家提示:如果您需要使用 http/https 代理从互联网上提取图像,请确保在 no_proxy 环境变量中添加所有主节点和从属节点的主机名和 IP 地址。

相关内容