セルフマネージド Kubernetes インスタンス用の エージェントをインストールする - Amazon CloudWatch

セルフマネージド Kubernetes インスタンス用の エージェントをインストールする

このセクションの手順に従って、セルフマネージド Kubernetes クラスターにワークロード用の Network Flow Monitor エージェントをインストールします。ステップを完了すると、Network Flow Monitor エージェントポッドはすべてのセルフマネージド Kubernetes クラスターノードで実行されます。

Amazon Elastic Kubernetes Service (Amazon EKS) を使用する場合、実行するインストール手順については、次のセクションの「EKS AWS Network Flow Monitor Agent アドオンをインストールする」を参照してください。

[開始する前に]

インストールプロセスを開始する前に、このセクションのステップに従って、適切な Kubernetes クラスターにエージェントを正常にインストールするように環境が設定されていることを確認します。

お使いの Kubernetes のバージョンが対応していることを確認します。

Network Flow Monitor エージェントのインストールには、Kubernetes バージョン 1.25 またはこれ以降のバージョンが必要です。

必要なツールがインストールされていることを確認する

このインストールプロセスで使用するスクリプトでは、次のツールをインストールする必要があります。ツールがまだインストールされていない場合は、提供されているリンクで詳細を確認してください。

KubeConfig 環境変数が有効で正しく設定されていることを確認します。

Network Flow Monitor エージェントのインストールでは、Helm パッケージマネージャーツールを使用します。このツールでは、kubeconfig 変数 $HELM_KUBECONTEXT を使用して、使用するターゲット Kubernetes クラスターを決定します。また、Helm がインストールスクリプトを実行すると、デフォルトで標準 ~/.kube/config ファイルを参照することに注意してください。設定の環境変数を変更して、別の設定ファイルを使用するか ($KUBECONFIG を更新することによる)、連携するターゲットクラスターを定義できます ($HELM_KUBECONTEXT を更新することによる)。

Network Flow Monitor Kubernetes 名前空間を作成する

Network Flow Monitor エージェントの Kubernetes アプリケーションは、そのリソースを特定の名前空間にインストールします。インストールを成功させるには、名前空間が存在している必要があります。必要な名前空間を確実に設定するには、次のいずれかを実行します。

  • 開始する前に、デフォルトの名前空間 amazon-network-flow-monitor を作成します。

  • 別の名前空間を作成し、インストールを実行してターゲットを作成するときに $NAMESPACE 環境変数で定義します。

Helm チャートをダウンロードしてエージェントをインストールする

次のコマンドを使用して、AWS パブリックリポジトリから Network Flow Monitor エージェント Helm チャートをダウンロードできます。まず、GitHub アカウントで確実に認証してください。

git clone https://github.com/aws/network-flow-monitor-agent.git

./charts/amazon-network-flow-monitor-agent ディレクトリでは、Network Flow Monitor エージェントの Helm チャートとエージェントのインストールに使用するインストールの make ターゲットを含む Makefile があります。Network Flow Monitor のエージェントをインストールするには、Makefile ターゲット helm/install/customer を使用します。

インストールをカスタマイズするには、たとえば、次の操作を行います。

# Overwrite the kubeconfig files to use KUBECONFIG=<MY_KUBECONFIG_ABS_PATH> make helm/install/customer # Overwrite the Kubernetes namespace to use NAMESPACE=<MY_K8S_NAMESPACE> make helm/install/customer

Network Flow Monitor エージェントの Kubernetes アプリケーションポッドが正常に作成され、デプロイされたことを確認するには、それらの状態が Running であることを確認します。コマンド kubectl get pods -o wide -A | grep amazon-network-flow-monitor を実行すれば、エージェントのステータスを確認できます。

エージェントがメトリクスを配信するためのアクセス許可を設定する

Network Flow Monitor のエージェントをインストールしたら、エージェントが Network Flow Monitor の取り込み API にネットワークメトリクスを送信できるようにする必要があります。Network Flow Monitor のエージェントは、インスタンスごとに収集したネットワークフローメトリクスを配信できるように、Network Flow Monitor の取り込み API にアクセスするための許可を持っている必要があります。このアクセス許可は、サービスアカウント (IRSA) の IAM ロールを実装することによって付与されます。

エージェントがネットワークメトリクスを Network Flow Monitor に配信できるようにするには、このセクションのステップに従います。

  1. サービスアカウントの IAM ロールを実行

    サービスアカウントの IAM ロールには、Amazon EC2 インスタンスプロファイルから Amazon EC2 インスタンスに認証情報を提供する場合と同じような方法で、アプリケーションの認証情報を管理する機能があります。IRSA の実装は、Network Flow Monitor エージェントが Network Flow Monitor 取り込み API に正常にアクセスするために必要なすべてのアクセス許可を付与するために推奨される方法です。詳細については、「Amazon EKS ユーザーガイド」の「サービスアカウントの IAM ロール」を参照してください。

    Network Flow Monitor エージェントに IRSA を設定するときは、次の情報を使用します。

    • [ServiceAccount:] IAM ロールの信頼ポリシーを定義するときに、ServiceAccountaws-network-flow-monitor-agent-service-account を指定します。

    • [名前空間:] namespace には、amazon-network-flow-monitor を指定します。

    • [一時的な認証情報のデプロイ:] Network Flow Monitor エージェントポッドをデプロイした後にアクセス許可を設定する場合、IAM ロールで ServiceAccount を更新すると、Kubernetes は IAM ロールの認証情報をデプロイしません。Network Flow Monitor エージェントが、指定した IAM ロールの認証情報を確実に取得するには、DaemonSet の再起動をロールアウトする必要があります。例えば、以下のようなコマンドを使用します。

      kubectl rollout restart daemonset -n amazon-network-flow-monitor aws-network-flow-monitor-agent

  2. Network Flow Monitor エージェントが Network Flow Monitor 取り込み API に正常にアクセスしていることを確認する

    Network Flow Monitor エージェントポッドの HTTP 200 ログを使用して、エージェントの設定が正しく動作していることを確認できます。まず、Network Flow Monitor エージェントポッドを検索してから、ログファイルを検索して、成功した HTTP 200 リクエストを見つけます。例えば、次のオペレーションを実行できます。

    1. Network Flow Monitor のエージェントポッド名を見つけます。例えば、次のコマンドを使用できます。

      RANDOM_AGENT_POD_NAME=$(kubectl get pods -o wide -A | grep amazon-network-flow-monitor | grep Running | head -n 1 | tr -s ' ' | cut -d " " -f 2)
    2. 指定したポッド名の HTTP ログをすべてグレップします。NAMESPACE を変更した場合は、新しいものを使用してください。

      NAMESPACE=amazon-network-flow-monitor kubectl logs $RANDOM_AGENT_POD_NAME -\-namespace ${NAMESPACE} | grep HTTP

    アクセスが正常に許可されると、次のようなログエントリが表示されます。

    ... {"level":"INFO","message":"HTTP request complete","status":200,"target":"amzn_nefmon::reports::publisher_endpoint","timestamp":1737027525679} {"level":"INFO","message":"HTTP request complete","status":200,"target":"amzn_nefmon::reports::publisher_endpoint","timestamp":1737027552827}

    Network Flow Monitor エージェントは、Network Flow Monitor 取り込み API を呼び出して、30 秒ごとにネットワークフローレポートを発行することに注意してください。