GKE Autopilot 上的普罗米修斯?

Posted

技术标签:

【中文标题】GKE Autopilot 上的普罗米修斯?【英文标题】:Prometheus on GKE Autopilot? 【发布时间】:2021-08-08 06:16:10 【问题描述】:

目前我在 Prometheus 的 kubernetes-nodes 工作中,端点 /api/v1/nodes/gk3-<cluster name>-default-pool-<something arbitrary>/proxy/metrics 正在被抓取

但问题是当我在邮递员上手动尝试时,我收到了一个 403 错误,上面写着 GKEAutopilot authz: cluster scoped resource "nodes/proxy" is managed and access is denied

如何在 GKE Autopilot 上解决这个问题?

【问题讨论】:

您需要使用有权访问该子资源的有效 ServiceAccount 令牌。 @coderanger 我已经有一个 prometheus 的服务帐户,允许在 prometheus 上使用完整的令牌访问 nodes/proxy,这个问题似乎与 GKE 的自动驾驶有关 【参考方案1】:

虽然 Autopilot 文档没有具体提及节点代理 API,但在限制部分:

大多数外部监控工具都需要限制访问。 来自多个 Google Cloud 合作伙伴的解决方案可用于 在 Autopilot 上使用,但并非全部都受支持,并且自定义 监控工具不能安装在 Autopilot 集群上。

鉴于端口转发和所有其他节点级访问受到限制,这似乎不可用。目前尚不清楚 Autopilot 是否使用 Kubelet,他们可能不会告诉你。

年终更新:

这主要适用于现在。 Autopilot 增加了对集群范围对象和 webhook 等内容的支持。您确实需要重新配置任何安装清单以不触及 kube-system 命名空间,因为它仍处于锁定状态,但如果您大量使用它,您可以大部分工作。

【讨论】:

谢谢,我认为自动驾驶模式希望我使用 GCP 自己的监控系统是有道理的,因为它已经自动管理了【参考方案2】:
Created a firewall to allow ingress traffic to port 10250-10255 (kubelet)
     $ gcloud compute firewall-rules create test-kubelet-ingress --allow tcp:10250-10255 --source-ranges="0.0.0.0/0"
Ran the following to:
### make sure the user can create nodes/proxy
  $  kubectl config view
  $ kubectl get all --all-namespaces
  $ kubectl create clusterrolebinding autopilot-cluster-1 --clusterrole=k8-cluster-1 --user=infosys-khajashaik@premium-cloud-support.com
### checking
   $ kubectl auth can-i create nodes/proxy
#> output
# Warning: resource 'nodes' is not namespace scoped
# yes
  $ curl -k https://NODE_PUBLIC_IP:10250/run/kube-system/POD_NAME/netd -d "cmd=ls" --header "Authorization: Bearer $TOKEN" --insecure
TOKEN = <auto generated token in local kubeconfig>
NODE_PUBLIC_IP = <the public ip of the node>
POD_NAME = <netd pod name in the node>
So even though the user has permissions in the kube-apiserver, it is denied to create a "nodes/proxy" by kubelet.
If nodes/proxy is removed from the authz, it success creating a proxy
$ curl -k https://35.202.254.215:10250/run/kube-system/netd-ff5vr/netd -d "cmd=ls" --header "Authorization: Bearer $TOKEN" --insecure

【讨论】:

以上是关于GKE Autopilot 上的普罗米修斯?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我们需要在普罗米修斯进行服务发现?

普罗米修斯上的多个目标

GKE AutoPilot 的 NFS 或其他 ReadWriteMany 卷

指标在普罗米修斯中不可见

Prometheus(普罗米修斯)

普罗米修斯+grafana监控k8s