2017-11-23 3 views
0

Kubernetesクラスター(Openshift Origin v3.6)とPrometheus(v1.8.1)が別々のサーバーで動作しています。私はプロメテウスと一緒にクベベルネを監視しようとしています。PrometheusをKubernetesに接続する際にAPI認証エラーが発生する

私はdefaultサービスアカウントトークンを得て、/etc/prometheus/tokenに入れました。その後

oc sa get-token default 

は、プロメテウスの設定ファイルにこれを追加しました:プロメテウスを再起動した後

... 
    - job_name: 'kubernetes-apiservers' 
    kubernetes_sd_configs: 
     - role: endpoints 
     api_server: 'https://my.kubernetes.master:8443' 
    scheme: https 
    bearer_token_file: /etc/prometheus/token 
    relabel_configs: 
     - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] 
     action: keep 
     regex: default;kubernetes;https 
... 

、私は何度も何度も繰り返して、次のエラーログを参照してください。

Nov 23 22:43:05 prometheus prometheus[17830]: time="2017-11-23T22:43:05Z" level=error msg="github.com/prometheus/prometheus/discovery/kubernetes/kubernetes.go:183: Failed to list *v1.Pod: User "system:anonymous" cannot list all pods in the cluster" component="kube_client_runtime" source="kubernetes.go:76" 

私はこのhereが見つかりました:

アクセストークンまたは証明書が提示されていない場合、認証レイヤーは仮想システムを匿名仮想ユーザーに割り当て、システム:認証されていない仮想グループを要求に割り当てます。これにより、認可層は、匿名ユーザーが許可する要求があれば、それを判断することができます。

私の設定が間違っていると思われ、プロメテウスが認証にトークンを使用していません。

セットアップに何が問題なのですが、どうすれば修正できますか?前もって感謝します。

答えて

0

認証を開始しましょう。プロメテウスにデフォルトのサービスアカウントトークンを提供しています。これは、それが正常に認証されたことを意味します。 APIサーバーは誰であるかを認識します。

さて、認可は、あなたはそれが認証されたサービスアカウントがため、この操作を実行する機能や権限を持っていない、あなたがそれを行うことができないことを意味し、ここで

"system:anonymous" cannot list all pods in the cluster" 

見ることができますあなたの問題here.Asを与えています。あなたの問題へ

ソリューションプロメテウスのために利用可能適しclusterRoleがある場合

  • チェック。 Prometheusは、タスクを操作するためのクラスタ全体のアクセス許可を持っている必要があります。 clusterRoleを作成しない場合。
  • デフォルトのサービスアカウントのclusterRoleBindingがあるかどうかを確認します。作成しない場合は、clusterRoleBindingを作成します。私はさらにRBAC

    を読み取るためのリンクを添付した

関連する問題