本連載では、エンタープライズシステムでコンテナ/Kubernetesを活用した業務システムを開発・運用するエンジニアに向けて、Kubernetesセキュリティの基礎知識、Microsoftが提供するパブリッククラウド「Azure」を使ったクラウドでのKubernetesセキュリティ対策のポイント、注意点などの実践的なノウハウを紹介しています。
前回から、「Kubernetesの監視と監査」について説明しています。2回目となる今回は、Azure Monitorによる監視のポイントを見ていきます。
Azure MonitorでKubernetesを監視するメリット
前回に述べたように、Kubernetesの監視対象の一つにコンテナやノードの監視があります。コンテナから出力されるアプリケーションのログ、コンテナのCPU使用率・メモリ使用量、ノードのCPU使用率・メモリ使用量、Pod の数、ノードの数など、監視対象は広範囲にわたります。
Kubernetes標準のツールに、継続的に監視するツールはありませんが、オープンソースやサードパーティーなどのさまざまなツールを利用できます。しかし、それらのツールの展開やバージョンアップの継続的な対応を考えると、Kubernetesの運用に加えてさらに運用負荷が増えることになります。
そこで、Azure Monitorを利用すると、Azureのマネージドなツールがコンテナとして展開され、バージョンアップも自動的に行われる上、アラートの発報も可能です。以下、Azure Monitorの機能とその仕組みを紹介します。
Azure MonitorでAKSを監視するための基本設定
Azure MonitorでAKSを監視するには、Log Analytics の展開と監視の有効化を行います。詳細な手順は、次のドキュメントを参照してください。
新しい Azure Kubernetes Service (AKS) クラスターの監視を有効にする
AKSの監視は、Log Analyticsのソリューションの一つであり、Container InsightsとAzure Monitorのメトリックを利用して行われます。Log Analyticsは、AzureポータルやAzure CLIから有効化すると自動的に展開されます。Log Analyticsのアクセス制御やほかのリソースとライフサイクルを分けたい場合はあらかじめ展開しておき、そのLog Analyticsを利用する必要があります。Azure Monitorのメトリックを確認する際、特に設定を行う必要はありません。
以下は、Azure Monitorを使用したAKSの監視のアーキテクチャです。
AKSの監視に利用できる機能
Azure Monitorを効果的に活用するために、AKS としてどのような監視が必要か、監視をするためにどのような機能があるかを紹介します。
これまで、Kubernetesは、ハードウェアやOSを含め、さまざまなコンポーネントで構成されていることを説明してきました。そして、どのコンポーネントでどのような問題が発生しているかを迅速に確認できるような監視が必要になります。以下のドキュメントにあるように、階層を分けてAKSの監視を考えると、利用できるツールや検討事項を整理できます。
コンテナーの分析情報を使用して AKS のレイヤーを監視する
"分析情報"は、AKS のメニュー内の"監視"から選択します。以下、4つのレベルに分けて、具体的な監視の内容を紹介します。
Level 1:ノードの監視
まずは、クラスタを構成するノードを監視します。AKSにおいて、KubernetesはVMSSで実現されているため、それぞれの仮想マシンの状態やCPU使用率、メモリ使用量、ネットワークの利用状況を確認します。1台の仮想マシンに障害が発生している場合、ホストに障害が発生していること可能性があるため、スケールアウトを行うことで一時的に障害を回避できる可能性があります。
Azure Monitor のクラスター監視では、基本的なメトリックの確認ができます。また、ブックを確認するとディスク容量やディスク I/O、ネットワークの利用状況などを確認できます。
Level 2:Kubernetes のコンポーネントの監視
次に、Kubernetesを構成するコンポーネントの監視を行います。例えば、API Serverやkubeletがそれに該当します。Container Insights のブックでは、あらかじめkubeletに関するブックが用意されており、コンテナの作成やイメージのプル等の操作の回数、エラーの回数などを確認できます。
また、現在の Container InsightsではAPI Serverに関するメトリックを確認できませんが、Prometheusからメトリックを収集することで、API Serverのメトリックを確認できます。
Container insights で Prometheus メトリックのスクレイピングを構成する
なお、診断設定では、AKSのAPI Serverを含めた各 Kubernetes のコンポーネントからのログを収集できます。Log Analytics へ収集したうえで以下の Kusto クエリを実行するとログが確認できます。
AzureDiagnostics
| where Category == "kube-apiserver"
Level 3:ワークロードの監視
続いて、ワーカーノード上で起動しているコンテナに関する監視を行います。Container Insightsを利用すると、Podの状態やCPU使用率、メモリ使用量、コンテナのライブログを確認できます。
Level 4:アプリケーションの監視、Level 5:外部サービスの監視
Kubernetesよりも上位のレイヤーや外部のサービスになるため、Container Insightsでの監視はできませんが、 Azure Monitorでは、Application Insightsによるアプリケーションの監視、リソースごとのログ・メトリックを監視できます。
"問題の診断と解決"の活用
このように、AKS の状態を分かりやすく可視化している機能である"分析情報"ですが、よりトラブルシューティングに特化したツールとして、"問題の診断と解決" 機能があります。
この機能は、Azure のエンジニアが利用しているツールの一部をAzure ポータルからも利用できるようにした高度なトラブルシューティングツールです。簡易的なヘルスアセスメント機能も持っており、ノード異常やベストプラクティスでない構成を検出できます。
運用前の最終チェックやトラブルがあった場合に初めにチェックするツールとして活用できます。例えば、"Cluster Insights"を確認するとクラスタに関するさまざまなチェックが可能です。