web-dev-qa-db-ja.com

kubernetesポッド/ノードは禁止されています

オンプレミスでkubernetesを使用しています

Kubernetesを使用してgitlabをビルドしている間、いくつかの問題があります。サービスアカウントまたはロールバインディングに関連していると思います。しかし、正しい方法を見つけることができませんでした

これらの投稿を見つけました

Kubernetesログ、ユーザー "system:serviceaccount:default:default"はネームスペースのサービスを取得できません

https://github.com/kubernetes/kops/issues/3551

私のエラーログ

==> /var/log/gitlab/prometheus/current <==
2018-12-24_03:06:08.88786 level=error ts=2018-12-24T03:06:08.887812767Z caller=main.go:240 component=k8s_client_runtime err="github.com/prometheus/prometheus/discovery/kubernetes/kubernetes.go:372: Failed to list *v1.Node: nodes is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"nodes\" in API group \"\" at the cluster scope"
2018-12-24_03:06:08.89075 level=error ts=2018-12-24T03:06:08.890719525Z caller=main.go:240 component=k8s_client_runtime err="github.com/prometheus/prometheus/discovery/kubernetes/kubernetes.go:320: Failed to list *v1.Pod: pods is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"pods\" in API group \"\" at the cluster scope"
6
Siner

この問題は、デフォルトのサービスアカウントに、クラスタースコープでノードまたはポッドを取得する権限がないためです。解決するための最小のクラスターロールとクラスターロールバインディングは次のとおりです。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prom-admin
rules:
# Just an example, feel free to change it
- apiGroups: [""]
  resources: ["pods", "nodes"]
  verbs: ["get", "watch", "list"]

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

上記のクラスターロールは、任意の名前空間のポッドまたはノードにアクセスするための既定のサービスアカウントへのアクセス許可を提供します。

クラスターの役割を変更して、サービスアカウントにより多くのアクセス許可を与えることができます。デフォルトのサービスアカウントへのすべてのアクセス許可を付与する場合は、resources: ["*"] in prom-admin

お役に立てれば。

9
Prafull Ladha