Kubernetes 普罗米修斯-库伯内特斯RBAC

Kubernetes 普罗米修斯-库伯内特斯RBAC,kubernetes,google-kubernetes-engine,prometheus,Kubernetes,Google Kubernetes Engine,Prometheus,我将我的GKEAPI服务器升级到1.6,并且正在将节点升级到1.6,但是遇到了一个障碍 我有一个prometheus服务器(版本1.5.2),运行在一个由Kubernetes部署管理的pod中,其中两个节点运行版本1.5.4 Kubelet,一个新节点运行版本1.6 普罗米修斯无法连接到新节点——它的度量端点正在返回401个未经授权的节点 这似乎是RBAC的问题,但我不确定如何继续。我找不到普罗米修斯服务器需要什么角色的文档,甚至找不到如何将它们授予服务器的文档 通过coreos/prometh

我将我的GKEAPI服务器升级到1.6,并且正在将节点升级到1.6,但是遇到了一个障碍

我有一个prometheus服务器(版本1.5.2),运行在一个由Kubernetes部署管理的pod中,其中两个节点运行版本1.5.4 Kubelet,一个新节点运行版本1.6

普罗米修斯无法连接到新节点——它的度量端点正在返回401个未经授权的节点

这似乎是RBAC的问题,但我不确定如何继续。我找不到普罗米修斯服务器需要什么角色的文档,甚至找不到如何将它们授予服务器的文档

通过coreos/prometheus运营商repo,我能够拼凑出一个我可能会用到的配置:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: default
---

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: default
secrets:
- name: prometheus-token-xxxxx

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: prometheus-prometheus
    component: server
    release: prometheus
  name: prometheus-server
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-prometheus
      component: server
      release: prometheus
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: prometheus-prometheus
        component: server
        release: prometheus
    spec:
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      serviceAccount: prometheus
      serviceAccountName: prometheus
      ...
但是普罗米修斯仍然有401秒


更新:正如乔丹所说,这似乎是一个库伯尼特斯认证问题。在这里看到新的、更集中的问题

401表示未经验证,这意味着它不是RBAC问题。我相信GKE不再允许匿名访问1.6中的kubelet。您使用什么凭证认证kubelet?

根据@JorritSalverda的票证讨论

由于GKE不允许您获得客户机证书,从而允许您使用kubelet对自己进行身份验证,因此GKE上用户的最佳解决方案似乎是使用kubernetes API服务器作为对节点的代理请求

为此(引用@JorritSalverda)

“对于在GKE中运行的Prometheus服务器,我现在使用以下重新标记运行它:

relabel_configs:
- action: labelmap
  regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
  replacement: kubernetes.default.svc.cluster.local:443
- target_label: __scheme__
  replacement: https
- source_labels: [__meta_kubernetes_node_name]
  regex: (.+)
  target_label: __metrics_path__
  replacement: /api/v1/nodes/${1}/proxy/metrics
以及以下绑定到普罗米修斯使用的服务帐户的ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]

因为GKE集群在RBAC失败的情况下仍然有ABAC回退,我不能100%确定这是否涵盖了所有必需的权限。

这就是我为角色定义和绑定所做的工作

apiVersion:rbac.authorization.k8s.io/v1beta1 种类:ClusterRole 元数据: 姓名:普罗米修斯 规则: -apiGroups:[“”] 资源: -节点 -服务 -端点 -豆荚 动词:[“获取”、“列表”、“监视”] -非源URL:[“/metrics”] 动词:[“get”] --- 版本:v1 种类:服务帐户 元数据: 姓名:普罗米修斯 名称空间:默认值 --- apiVersion:rbac.authorization.k8s.io/v1beta1 种类:簇状卷边 元数据: 姓名:普罗米修斯 roleRef: apiGroup:rbac.authorization.k8s.io 种类:ClusterRole 姓名:普罗米修斯 学科: -种类:服务帐户 姓名:普罗米修斯
名称空间:defaultHey Jordan!是的,这就是问题所在,我只是不知道如何对其进行身份验证。我在过去一个小时里一直在努力从Coreos/prometheus operator repo中拼凑出一些东西,我已经用我所拥有的更新了问题。谢谢!@Jordan Liggit你有关于删除匿名访问的来源吗正如Jordan所说,我面临着与OPIn相同的问题,在我的案例中,它看起来像是一个身份验证问题。当我试图手动
curl
在同一个pod中的容器中的端点时(通过部署进行管理,配置为使用
prometheus
服务帐户):
curl-vsSk-H”授权:承载人$(