Amazon EKS の Kubernetes ネットワークポリシーのトラブルシューティング - Amazon EKS

Amazon EKS の Kubernetes ネットワークポリシーのトラブルシューティング

ネットワークポリシーのログを読み、eBPF SDK のツールを実行することにより、ネットワークポリシーを使用するネットワーク接続をトラブルシューティングおよび調査できます。

ネットワークポリシーのログ

ネットワークポリシーによって接続が許可されているか拒否されているかは、フローログに記録されています。各ノードのネットワークポリシーログには、ネットワークポリシーが設定されているすべてのポッドのフローログが含まれます。ネットワークポリシーログは /var/log/aws-routed-eni/network-policy-agent.log に保存されます。次の例は network-policy-agent.log ファイルからのものです。

{"level":"info","timestamp":"2023-05-30T16:05:32.573Z","logger":"ebpf-client","msg":"Flow Info: ","Src IP":"192.168.87.155","Src Port":38971,"Dest IP":"64.6.160","Dest Port":53,"Proto":"UDP","Verdict":"ACCEPT"}

ネットワークポリシーログはデフォルトで無効になっています。ネットワークポリシーログを有効にするには、次の手順に従います。

注記

ネットワークポリシーログには、VPC CNI aws-node デーモンセットマニフェストの aws-network-policy-agent コンテナ用に 1 つの vCPU を追加する必要があります。

Amazon EKS アドオン

AWS Management Console
  1. Amazon EKS コンソールを開きます。

  2. 左のナビゲーションペインで、[クラスター] を選択し、 Amazon VPC CNI アドオンを設定するクラスターの名前を選択します。

  3. [アドオン] タブを選択します。

  4. アドオンボックスの右上にあるボックスを選択し、次に [編集] を選択します。

  5. [アドオンの名前の設定] ページで次のことを行います。

    1. [バージョン] ドロップダウンリストで v1.14.0-eksbuild.3 以降のバージョンを選択します。

    2. [オプションの構成設定] を展開します。

    3. 最上位の JSON キー "nodeAgent": を入力します。値は [設定値] にキー "enablePolicyEventLogs": と "true" の値を持つオブジェクトです。結果のテキストは有効な JSON オブジェクトでなければなりません。次の例は、ネットワークポリシーとネットワークポリシーログが有効になっており、ネットワークポリシーログが CloudWatch Logs に送信されていることを示しています。

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true" } }

次のスクリーンショットは、このシナリオの例を示しています。

オプション設定でネットワークポリシーおよび CloudWatch ログが設定されている VPC CNI アドオンを示す <shared id="consolelong"/>。
AWS CLI
  1. 次の AWS CLI コマンドを実行します。my-cluster をクラスターの名前に置き換え、IAM ロール ARN を使用するロールに置き換えます。

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true"}}'

セルフマネージド型アドオン

Helm

helm を通して Amazon VPC CNI plugin for Kubernetes をインストールしている場合、設定を更新してネットワークポリシーを記述できます。

  1. 次のコマンドを実行してネットワークポリシーを有効にします。

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl

kubectl を通して Amazon VPC CNI plugin for Kubernetes をインストールしている場合、設定を更新してネットワークポリシーを記述できます。

  1. エディターで aws-nodeDaemonSet を開きます。

    kubectl edit daemonset -n kube-system aws-node
  2. VPC CNI aws-node デーモンセットマニフェストの aws-network-policy-agent コンテナで、args: のコマンド引数 --enable-policy-event-logs=false の false を true に置き換えます。

    - args: - --enable-policy-event-logs=true

ネットワークポリシーログを Amazon CloudWatch Logs に送信する

Amazon CloudWatch Logs などのサービスを使用して、ネットワークポリシーログをモニタリングできます。次の方法を使用して、ネットワークポリシーログを CloudWatch Logs に送信できます。

EKS クラスターの場合、ポリシーログは /aws/eks/cluster-name/cluster/ に配置され、セルフマネージド型 K8S クラスターの場合、ログは /aws/k8s-cluster/cluster/ に配置されます。

ネットワークポリシーログを Amazon VPC CNI plugin for Kubernetes で送信する

ネットワークポリシーを有効にすると、2 つ目のコンテナがノードエージェントの aws-node ポッドに追加されます。このノードエージェントは、ネットワークポリシーログを CloudWatch Logs に送信できます。

注記

ノードエージェントはネットワークポリシーログのみを送信します。VPC CNI によって作成された他のログは含まれません。

前提条件

  • VPC CNI に使用している IAM ロールに、次の権限をスタンザまたは個別のポリシーとして追加します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Amazon EKS アドオン

AWS Management Console
  1. Amazon EKS コンソールを開きます。

  2. 左のナビゲーションペインで、[クラスター] を選択し、 Amazon VPC CNI アドオンを設定するクラスターの名前を選択します。

  3. [アドオン] タブを選択します。

  4. アドオンボックスの右上にあるボックスを選択し、次に [編集] を選択します。

  5. [アドオンの名前の設定] ページで次のことを行います。

    1. [バージョン] ドロップダウンリストで v1.14.0-eksbuild.3 以降のバージョンを選択します。

    2. [オプションの構成設定] を展開します。

    3. 最上位の JSON キー "nodeAgent": を入力します。値は [設定値] にキー "enableCloudWatchLogs": と "true" の値を持つオブジェクトです。結果のテキストは有効な JSON オブジェクトでなければなりません。次の例は、ネットワークポリシーとネットワークポリシーログが有効になっており、ログが CloudWatch Logs に送信されていることを示しています。

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true", } }

次のスクリーンショットは、このシナリオの例を示しています。

+ image::images/console-cni-config-network-policy-logs-cwl.png[オプション設定でネットワークポリシーおよび CloudWatch ログが設定されている VPC CNI アドオンを示す AWS Management Console.,scaledwidth=80%]

AWS CLI
  1. 次の AWS CLI コマンドを実行します。my-cluster をクラスターの名前に置き換え、IAM ロール ARN を使用するロールに置き換えます。

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true"}}'

セルフマネージド型アドオン

Helm

helm を通して Amazon VPC CNI plugin for Kubernetes をインストールしている場合、設定を更新してネットワークポリシーログを CloudWatch Logs に送信できます。

  1. 次のコマンドを実行してネットワークポリシーログを有効にし、CloudWatch Logs に送信します。

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. エディターで aws-nodeDaemonSet を開きます。

    kubectl edit daemonset -n kube-system aws-node
  2. VPC CNI aws-node デーモンセットマニフェストの aws-network-policy-agent コンテナで、args: の 2 つのコマンド引数 --enable-policy-event-logs=false--enable-cloudwatch-logs=falsefalsetrue に置き換えます。

    - args: - --enable-policy-event-logs=true - --enable-cloudwatch-logs=true

ネットワークポリシーログを Fluent Bit デーモンセットで送信する

ノードからログを送信するためにデーモンセットの Fluent Bit を使用している場合、ネットワークポリシーのネットワークポリシーログを含めるように設定を追加できます。次の設定例を使用できます。

[INPUT] Name tail Tag eksnp.* Path /var/log/aws-routed-eni/network-policy-agent*.log Parser json DB /var/log/aws-routed-eni/flb_npagent.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10

eBPF SDK を含む

Amazon VPC CNI plugin for Kubernetes は、ノードに eBPF SDK ツールのコレクションをインストールします。eBPF SDK ツールを使用して、ネットワークポリシーの問題を特定できます。例えば、次のコマンドはノードで実行されているプログラムを一覧表示します。

sudo /opt/cni/bin/aws-eks-na-cli ebpf progs

このコマンドを実行するために、任意の方法を使用してノードに接続できます。