![Kubernetes 升级至 1.13.0 后,kubectl 日志中出现 Forbidden 错误](https://linux22.com/image/730626/Kubernetes%20%E5%8D%87%E7%BA%A7%E8%87%B3%201.13.0%20%E5%90%8E%EF%BC%8Ckubectl%20%E6%97%A5%E5%BF%97%E4%B8%AD%E5%87%BA%E7%8E%B0%20Forbidden%20%E9%94%99%E8%AF%AF.png)
我最近将本地 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 地址。