我将我的GKE API服务器升级到1.6,并且正在将节点升级到1.6,但是遇到了问题...
我有一个Prometheus服务器(版本1.5.2)在由Kubernetes部署管理的Pod中运行,该Pod中有几个运行1.5.4 Kubelet版本的节点,一个新节点运行1.6。
Prometheus无法连接到新节点-它的指标端点返回401 Unauthorized。
这似乎是RBAC的问题,但是我不确定如何进行。我找不到有关Prometheus服务器需要什么角色,甚至如何将它们授予服务器的文档。
从coreos / prometheus-operator存储库中,我可以拼凑出一个我期望可以使用的配置:
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
...
但是普罗米修斯仍在获得401s。
更新:就像乔丹所说的那样,似乎是一个kubernetes身份验证问题。在这里查看新的,更集中的问题;https://serverfault.com/questions/843751/kubernetes-node-metrics-endpoint-returns-401
根据有关@JorritSalverda门票的讨论;https://github.com/prometheus/prometheus/issues/2606#issuecomment-294869099
由于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绑定到Prometheus使用的服务帐户:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
因为在RBAC失败的情况下,GKE群集仍然具有ABAC后备功能,所以我不确定100%是否可以涵盖所有必需的权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句