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
-
-
Amazon EKS コンソール
を開きます。 -
左のナビゲーションペインで、[クラスター] を選択し、 Amazon VPC CNI アドオンを設定するクラスターの名前を選択します。
-
[アドオン] タブを選択します。
-
アドオンボックスの右上にあるボックスを選択し、次に [編集] を選択します。
-
[
アドオンの名前
の設定] ページで次のことを行います。-
[バージョン] ドロップダウンリストで
v1.14.0-eksbuild.3
以降のバージョンを選択します。 -
[オプションの構成設定] を展開します。
-
最上位の JSON キー
"nodeAgent":
を入力します。値は [設定値] にキー"enablePolicyEventLogs":
と"true"
の値を持つオブジェクトです。結果のテキストは有効な JSON オブジェクトでなければなりません。次の例は、ネットワークポリシーとネットワークポリシーログが有効になっており、ネットワークポリシーログが CloudWatch Logs に送信されていることを示しています。{ "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true" } }
-
-
次のスクリーンショットは、このシナリオの例を示しています。
- AWS CLI
-
-
次の 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 をインストールしている場合、設定を更新してネットワークポリシーを記述できます。-
次のコマンドを実行してネットワークポリシーを有効にします。
helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
- kubectl
-
kubectl
を通して Amazon VPC CNI plugin for Kubernetes をインストールしている場合、設定を更新してネットワークポリシーを記述できます。-
エディターで
aws-node
DaemonSet
を開きます。kubectl edit daemonset -n kube-system aws-node
-
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/
に配置され、セルフマネージド型 K8S クラスターの場合、ログは cluster-name
/cluster//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
-
-
Amazon EKS コンソール
を開きます。 -
左のナビゲーションペインで、[クラスター] を選択し、 Amazon VPC CNI アドオンを設定するクラスターの名前を選択します。
-
[アドオン] タブを選択します。
-
アドオンボックスの右上にあるボックスを選択し、次に [編集] を選択します。
-
[
アドオンの名前
の設定] ページで次のことを行います。-
[バージョン] ドロップダウンリストで
v1.14.0-eksbuild.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
-
-
次の 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 に送信できます。-
次のコマンドを実行してネットワークポリシーログを有効にし、CloudWatch Logs に送信します。
helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
- kubectl
-
-
エディターで
aws-node
DaemonSet
を開きます。kubectl edit daemonset -n kube-system aws-node
-
VPC CNI
aws-node
デーモンセットマニフェストのaws-network-policy-agent
コンテナで、args:
の 2 つのコマンド引数--enable-policy-event-logs=false
と--enable-cloudwatch-logs=false
のfalse
をtrue
に置き換えます。- 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
このコマンドを実行するために、任意の方法を使用してノードに接続できます。