この記事では、Inspektor ガジェットを使用して Microsoft Azure Kubernetes Service (AKS) クラスターからリアルタイムのシステム分析情報を収集するプロセスについて説明します。 この記事には、AKS 環境にこのツールをインストールするための詳細な手順が含まれています。 また、Inspektor ガジェットが実際の問題の効果的なデバッグを行うために貴重な情報を収集する方法を示す実用的な例についても説明します。
デモ: リアルタイム DNS のトラブルシューティングと重要なファイル アクセスアラート
まず、次の簡単なデモを検討してください。 アプリケーションからの DNS 要求が失敗する理由を理解する必要があるとします。 Inspektor ガジェットを使用すると、 trace_dns ガジェット を実行して、アプリケーションが実行されている Kubernetes 名前空間の DNS トラフィックをキャプチャできます。
kubectl gadget run trace_dns \
--namespace my-ns \
--fields k8s.node,k8s.podName,id,qr,name,rcode,nameserver
K8S.NODE K8S.PODNAME ID QR NAME RCODE NAMESERVER
aks-nodepool-41788306-vmss000002 demo-pod 13cc Q example.com. 1.2.3.4
aks-nodepool-41788306-vmss000002 demo-pod 13cc Q example.com. 1.2.3.4
この情報から、DNS 要求は IP アドレス 1.2.3.4 (NAMESERVER 列に示されているように) DNS サーバーに送られますが、クエリ (Q列にQR) のみが表示され、応答 (R 列にQR) は表示されません。 これは、DNS サーバーがクエリに応答しなかったことを意味します。そのため、アプリケーションはドメイン名 www.example.comを解決できません。
ここで、 1.2.3.4 が既定のネーム サーバー構成ではなく、悪意のあるプロセスによって実行時に構成が変更されている可能性があるとします。 このような場合、Inspektor ガジェットは DNS 診断を超えています。 また、重要なファイル ( /etc/resolv.conf など) にアクセスするプロセスを監視し、それらのファイルを変更する意図を持つことができます。 これを行うには、同じ名前空間で trace_open ガジェット を実行し、ファイル名とファイル への書き込みの意図 を示すフラグで結果をフィルター処理します (書き込み専用で開くO_WRONLY 、読み取りと書き込みのために開く O_RDWR )。
kubectl gadget run trace_open \
--namespace my-ns \
--filter fname==/etc/resolv.conf,flags~'(O_WRONLY|O_RDWR)' \
--fields k8s.node,k8s.podName,comm,fname,flags,error
K8S.NODE K8S.PODNAME COMM FNAME FLAGS ERROR
aks-nodepool-41788306-vmss000002 demo-pod malicious-proc /etc/resolv.conf O_WRONLY
Inspektor ガジェットとは
Inspektor Gadget は、Linux および Kubernetes で実行されているワークロードの監視、トラブルシューティング、セキュリティ保護を容易にするフレームワークです。 eBPF プログラムを活用するツール (ガジェット) で構成されています。 主な目標は、特定のシステム シナリオに関する分析情報を提供するために、低レベルのカーネル データを収集することです。 Inspektor Gadget フレームワークは、Kubernetes リソースなどの高度な参照を使用して、収集されたデータの関連付けを管理します。 この統合により、低レベルの分析情報とそれに対応する高度なコンテキストの間にシームレスな接続が確実に存在します。 この統合により、トラブルシューティング プロセスと関連情報の収集が効率化されます。
ガジェット
Inspektor Gadget には、システム上の一般的な状況をデバッグして観察するように設計された一連の組み込みツールが用意されています。 たとえば、このようなガジェットを使用すると、クラスター内の次のイベントをトレースできます。
- プロセス作成
- ファイル アクセス
- TCP 接続や DNS 解決などのネットワーク アクティビティ
ガジェットは、さまざまなメカニズムを使用して収集された情報を提示します。 たとえば、一部のガジェットでは、特定の時刻にシステムの状態について通知できます。 他のガジェットは、特定のイベントが発生するたびに報告したり、定期的な更新を提供したりできます。
いくつかの例を示します。 非公式のドキュメントでは、各ガジェットの詳細な説明と例が示されているため、特定のユース ケースに最適なガジェットを判断できます。 ただし、既存のガジェットが現在カバーしていないユース ケースが見つかると、Inspektor Gadget では、 run コマンドを使用して独自の eBPF プログラムを実行できます。 Inspektor Gadget フレームワークは、カスタム プログラムのビルド、パッケージ化、展開を処理するため、独自の要件のプロセスを合理化します。 また、高度なメタデータを収集して、プログラムで収集したデータを強化します。
ユース ケース
この記事の冒頭で紹介したデモを補完するために、Inspektor Gadget がデバッグの課題に取り組むのにどのように役立つのかを示す問題と実用的なシナリオの一覧をまとめました。 次の例では、Inspektor ガジェットの可能性を示します。 ただし、このツールの機能は、これらのシナリオを超えて拡張されます。 これにより、Inspektor ガジェットは、Kubernetes のデバッグと監視の複雑さをナビゲートするための貴重な資産になります。
| 問題領域 | 現象 | トラブルシューティング |
|---|---|---|
| ディスクを集中的に使用するアプリケーション | メモリまたは CPU 使用率が高い、またはノードの準備が一貫性がない | アプリケーションは、広範なログ記録など、ディスクの読み取り/書き込み操作に一貫して関与する可能性があります。 Inspektor ガジェットを使用すると、より多くの ブロック I/Oを生成するコンテナーをリアルタイムで識別できます。 または、より具体的には、fileへの読み取りと書き込みが増えるコンテナーを見つけることができます。 |
| "常に DNS です" | アプリケーションの待機時間が長い、タイムアウト、またはエンドユーザー エクスペリエンスが低い | Inspektor ガジェットを使用すると、クラスター内のすべての DNS クエリと応答をトレースできます。 特に、Inspektor ガジェットは、DNS がアプリケーションのパフォーマンスに影響を与えるかどうかを判断するのに役立つ次の情報を提供します。
|
| ファイル システムへのアクセス | アプリケーションの動作が正しく動作しない、または正しく機能しない | アプリケーションは、ファイル システム内の特定の構成、ログ、またはその他の重要なファイルにアクセスできない可能性があります。 このようなシナリオでは、Inspektor ガジェットを使用すると、ポッド内で開いているすべてのファイルトレースしてアクセスの問題を診断できます。 アプリケーションがファイルを開こうとするたびに、次の情報を検出できます。
たとえば、エラー 2 (ENOENT) が原因でファイルを開こうとした場合、アプリケーションは存在しないファイルを開こうとしている可能性があります。 つまり、コードに入力ミスがあるか、ファイルが別のパスで使用できる可能性があります。 |
| リモート コード実行 (RCE) | アプリケーションのアイドル期間中の CPU 使用率が高い場合に明らかな、 cryptojacking などの未承認のコード実行 | 攻撃者がシステムに対してこのような攻撃を実行しようとすると、通常、 bashを使用してコードを実行する必要があります。 Inspektor Gadget を使用すると、新しいプロセストレースできます。 |
AKS クラスターに Inspektor ガジェットをインストールする方法
クラスターに Inspektor ガジェットをデプロイする方法について説明します。
"kubectl ガジェット" プラグインを実行して Inspektor ガジェットをインストールする
このセクションでは、 kubectl gadget プラグインを実行して、AKS クラスターに Inspektor Gadget をインストールする手順について説明します。 インストールは、次の 2 つの部分で構成されます。
ワークステーションへの
kubectl gadgetプラグインのインストールkubectl gadgetプラグインを実行してクラスターに Inspektor ガジェットをデプロイする
警告
Inspektor ガジェットの展開と使用には、多くのメカニズムを使用できます。 これらのメカニズムはそれぞれ、特定のユース ケースと要件に合わせて調整されています。 kubectl ガジェット プラグインを使用して、これらのメカニズムのいくつかを適用できますが、それらのすべてではありません。 たとえば、 kubectl gadget プラグインを使用して Inspektor Gadget をデプロイすることは、Kubernetes API サーバーの可用性によって異なります。 可用性が損なわれる可能性があるため、このようなコンポーネントに依存できない場合は、 kubectl gadget 展開メカニズムを使用しないことをお勧めします。 このユース ケースとその他のユース ケースの詳細については、 Inspektor Gadget のドキュメントを参照してください。
前提条件
Kubernetes kubectl コマンドライン ツール。 Azure CLI がある場合は、az aks install-cli コマンドを実行して kubectl をインストールできます。
AKS クラスター。 AKS クラスターがない場合、Azure CLI を使用して作成するかAzure portal を使用して作成するか。
パート 1: kubectl ガジェット プラグインをワークステーションにインストールする
ご自身のOSに合わせた手順を参照してください。
- Azure Linux 3.0
- Ubuntu 18.04 / 20.04 / 22.04
注
特定のリリースをインストールするか、ソースからコンパイルするには、GitHub kubectl ガジェットのインストール を参照してください。
Microsoft Cloud-Native リポジトリをシステムに追加します。
echo "[azurelinux-cloud-native] name=Azure Linux Cloud Native 3.0 baseurl=https://packages.microsoft.com/azurelinux/3.0/prod/cloud-native/$(uname -i) gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY gpgcheck=1 repo_gpgcheck=1 enabled=1 skip_if_unavailable=True sslverify=1 " > /etc/yum.repos.d/azurelinux-cloud-native.repokubectl gadgetプラグインをインストールします。tdnf install --refresh -y kubectl-gadget
次に、 version コマンドを実行してインストールを確認します。
kubectl gadget version
コマンド出力には、クライアントのバージョン (kubectl gadget プラグイン) が表示され、サーバー (クラスター) にまだインストールされていないことが示されます。
Client version: vX.Y.Z
Server version: not installed
パート 2: クラスターに Inspektor ガジェットをデプロイする
次のコマンドは、 DaemonSet コントローラーをデプロイします。
注
次の一覧に示すように、デプロイをカスタマイズするためにいくつかのオプションを使用できます。
- 特定のコンテナー イメージを使用する
- 特定のノードにデプロイする
- カスタム名前空間にデプロイする
これらのオプションの詳細については、公式ドキュメントの「 クラスターへのインストール 」セクションを参照してください。
kubectl gadget deploy
version コマンドをもう一度実行して、インストールを確認します。
kubectl gadget version
今回は、クライアントとサーバーの両方が正しくインストールされていることを示します。
Client version: vX.Y.Z
Server version: vX.Y.Z
Microsoft Cloud-Native リポジトリで使用可能な kubectl gadget プラグインを使用して Inspektor ガジェットをデプロイすると、DaemonSet に使用されるコンテナー イメージは、Microsoft Container Registry (MCR) から自動的にプルされます。
kubectl get daemonset gadget -n gadget -o jsonpath='{.spec.template.spec.containers[*].image}'
mcr.microsoft.com/oss/v2/inspektor-gadget/inspektor-gadget:vX.Y.Z
注
krew パッケージ マネージャーを使用して kubectl プラグインをインストールし、その GitHub リポジトリから直接 Inspektor Gadget をインストールする場合は、次のコマンドを使用して、kubectl gadget プラグインを簡単にインストールし、クラスターに Inspektor Gadget をデプロイできます。
kubectl krew install gadget
kubectl gadget deploy
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
サードパーティのお問い合わせ窓口に関する免責事項
サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。
お問い合わせはこちらから
ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。