Pod 无法访问 kubelet 端点
Posted
技术标签:
【中文标题】Pod 无法访问 kubelet 端点【英文标题】:Pod can't access kubelet endpoints 【发布时间】:2021-06-16 10:25:20 【问题描述】:当我的 pod 尝试查询任何 kubelet 端点(任何端口)时,它们会立即获得 connection refused
。
我的目标是让 prometheus 从 cadvisor 获取这些指标,我正在尝试创建一个 ServiceMonitor 来抓取 cadvisor 指标(有关 pod 级别资源使用情况的信息)。
从集群上的任何 pod 尝试 wget
会导致以下结果:
$ wget 10.116.0.10:4194
Connecting to 10.116.0.10:4194 (10.116.0.10:4194)
wget: can't connect to remote host (10.116.0.10): Connection refused
我在 DigitalOcean 托管的 Kubernetes 上运行
编辑:上述情况发生在任何端口,而不仅仅是 4194
服务监控:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kubelet
labels:
app: prometheus
spec:
jobLabel: k8s-app
endpoints:
- port: cadvisor
interval: 15s
honorLabels: true
tlsConfig:
insecureSkipVerify: true
selector:
matchLabels:
k8s-app: kubelet
app.kubernetes.io/managed-by: prometheus-operator
app.kubernetes.io/name: kubelet
namespaceSelector:
matchNames:
- kube-system
【问题讨论】:
在 Kubernetes 上,cAdvisor 位于 kubelet 二进制文件中,您应该知道。因此,您可以安装metrics-server
并直接从 kubernetes API 中删除数据,就像 Prometheus 打算做的那样。
@HectorVido 我很想抓取 metrics-server
,但它不是 Prometheus 格式,也没有列出单个端点上的所有指标。
使用kube-prometheus-stack时,抓取kubelet cadvisor指标应为enabled by default。如果您没有使用 promethus 堆栈,您仍然可以使用 kubelet/servicemonitor.yaml 并查看它是如何完成的。有什么有用的信息吗?
@Matt 我一直在尝试破译 helm 文件。我没有在安装中使用 helm,所以我需要将其转换为普通的 ServiceMonitor,但我会尝试!
@Matt 我在之后所做的事情一定是它,可能是不同的端口或使用正确的 TLS 配置或两者兼而有之,但它现在可以工作了!
【参考方案1】:
错误“连接被拒绝”表示防火墙可能会阻止该端口或没有服务正在侦听该端口。您确定使用正确的端口吗?
4194
端口是cAdvisor使用的端口,为什么要使用IP(10.116.0.10)访问它?它与 Kubelet 没有任何关系。
【讨论】:
我在上面添加了我的 ServiceMonitor。似乎这就是它决定使用该 IP 的原因,而该 IP 恰好是该节点的私有 IP。在Targets
选项卡中,所有内容都在访问某个 IP。我确定它是正确的端口,我可以在笔记本电脑上从kubectl
访问端点。
不是节点的私有IP,而是kubectl get endpoints
中列出的端点的私有IP以上是关于Pod 无法访问 kubelet 端点的主要内容,如果未能解决你的问题,请参考以下文章