シナリオ
人為的誤操作が発生し、アプリケーションにbugが発生し、悪意のあるプログラムがapiserverインターフェースを呼び出し、クラスターリソースが削除または変更されたとします。このときクラスター審査機能によってapiserverのインターフェース呼び出しを記録し、条件検索および分析審査ログに基づいて問題の原因を見つけることができます。ここではクラスター審査機能の具体的なユースケースおよび使用例をご紹介します。このドキュメントを参照してクラスター審査機能の使用を開始できます。
注意
ここではTencent Kubernetes Engine(TKE)クラスターにのみ適用されます。
前提条件
TKEコンソールにログインし、クラスター審査機能を有効化すること。詳細については、クラスター審査の有効化をご参照ください。 ユースケース
分析結果
1. CLSコンソールにログインし、左側のナビゲーションバーの検索分析をクリックします。 2. 検索分析ページで、検索待ちのログセット、ログトピックおよび選択時間範囲を選択できます。
3. 分析ステートメントを入力した後、検索分析をクリックすると、分析結果を取得することができます。
事例1:ノードをブロックしたオペレータを照会する
例えば、ノードをブロックしたオペレータを照会する必要がある場合、以下のコマンドを実行して検索を行うことができます。
objectRef.resource:nodes AND requestObject:unschedulable
検索分析ページで、レイアウトのデフォルト設定を選択すると、照会結果が下図に示すとおりです。
事例2:ワークロードを削除したオペレータを照会する
例えば、ワークロードを削除したオペレータを照会する必要がある場合、以下のコマンドを実行して検索を行うことができます。
objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete"
検索結果に基づいてこのサブアカウントの詳細情報を取得することができます。 事例3:apiserver頻度制限の原因を特定する
悪意のあるプログラムまたはbugによりapiserverに対するリクエスト頻度が高すぎることによってapiserver/etcdに高い負荷がかかり、正常なリクエストに影響を与えることを回避します。apiserverはデフォルトリクエスト頻度の制限保護機能を搭載しています。頻度制限が発生した場合、審査によって大量のリクエストを送信するクライアントを見つけることができます。
1. 下図のように、userAgentによって統計をリクエストするクライアントを分析する必要がある場合、「キー値インデックス」ウィンドウでログトピックを変更し、userAgentフィールドを有効にして統計する必要があります。 2. 以下のコマンドを実行して、各クライアントに対してapiserverをリクエストするQPSサイズを統計します。
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,userAgent GROUP BY time,userAgent ORDER BY time
3. 下図のように、統計チャートに切り替え、シーケンス図を選択し、基本情報、座標軸などを設定することができます。 下図のように、データを取得した後、クリックしてダッシュボードに追加し、拡大表示することができます。
図からわかるように、kube-state-metricsクライアントのapiserverに対するリクエスト頻度はその他のクライアントよりはるかに高くなります。ログを確認するとわかるように、RBAC認証問題によってkube-state-metricsは停止することなくapiserverのリトライをリクエストするため、apiserverの頻度制限をトリガーします。ログは次に示すとおりです。
I1009 13:13:09.760767 1 request.go:538] Throttling request took 1.393921018s, request: GET:https://172.16.252.1:443/api/v1/endpoints?limit=500&resourceVersion=1029843735
E1009 13:13:09.766106 1 reflector.go:156] pkg/mod/k8s.io/client-go@v0.0.0-20191109102209-3c0d1af94be5/tools/cache/reflector.go:108: Failed to list *v1.Endpoints: endpoints is forbidden: User "system:serviceaccount:monitoring:kube-state-metrics" cannot list resource "endpoints" in API group "" at the cluster scope
同様に、その他のフィールドを使用することで統計するクライアントを区分する場合、必要に応じて柔軟にSQLを変更することができます。例えばuser.usernameを使用することで区分します。SQLステートメントは以下の例を参照することができます。
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,user.username GROUP BY time,user.username ORDER BY time
関連ドキュメント
Tencent Kubernetes Engine(TKE)のクラスター審査の概要と基本操作については、クラスター審査をご参照ください。 クラスター審査のデータはログサービスに保存されています。CLSコンソール内で審査結果に検索と分析を行う必要がある場合、検索構文についてはログ検索構文とルールをご参照ください。 分析を行うにはCLSがサポートするSQLステートメントを提供する必要があります。詳細については、ログ分析の概要をご参照ください。