故障診斷 Kubernetes Amazon EKS 的網路政策 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

故障診斷 Kubernetes Amazon EKS 的網路政策

您可以透過讀取網路政策日誌並從 eWord 執行工具,來疑難排解和調查使用網路政策的網路連線BPFSDK

網路政策日誌

網路政策是否允許或拒絕連線會記錄在流程日誌中。每個節點上的網路政策日誌均包含具有網路政策的每個 Pod 之流程日誌。網路政策日誌會儲存於 /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"}

網路政策日誌預設為停用。若要啟用網路政策日誌,請遵循下列步驟:

注意

網路政策日誌需要額外 1 個 vCNICPU,用於 VPC aws-node常駐程式清單清單中的aws-network-policy-agent容器。

Amazon EKS 附加元件

AWS Management Console
  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中,選取叢集,然後選取您要設定 Amazon VPC CNI 附加元件的叢集名稱。

  3. 選擇附加元件索引標籤。

  4. 選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。

  5. 設定 上 name of addon 頁面:

    1. 版本下拉式清單中,選取 v1.14.0-eksbuild.3 或更高版本。

    2. 展開選用組態設定

    3. 輸入頂層 JSON 金鑰"nodeAgent":,且值是組態值"true"中具有 金鑰"enablePolicyEventLogs":和 值的物件。產生的文字必須是有效的 JSON 物件。下列範例顯示網路政策和網路政策日誌已啟用,且網路政策日誌會傳送至 CloudWatch Logs:

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

下列螢幕擷取畫面展示了案例的範例。

<shared id="consolelong"/> 顯示選用組態中具有網路政策和 CloudWatch Logs 的 VPC CNI附加元件。
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

如果您已安裝 Amazon VPC CNI plugin for Kubernetes 透過 helm,您可以更新組態以寫入網路政策日誌。

  1. 執行下列命令以啟用網路政策。

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

如果您已安裝 Amazon VPC CNI plugin for Kubernetes 透過 kubectl,您可以更新組態以寫入網路政策日誌。

  1. 在您的編輯器中開啟 aws-node DaemonSet

    kubectl edit daemonset -n kube-system aws-node
  2. 在 VPC CNI aws-node 常駐程式清單true--enable-policy-event-logs=falseargs:aws-network-policy-agent容器中,將 中的命令引數中的 取代false為 。

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

將網路政策日誌傳送至 Amazon CloudWatch Logs

您可以使用 Amazon CloudWatch Logs 等服務來監控網路政策日誌。您可以使用下列方法來將網路政策日誌傳送至 CloudWatch Logs。

對於 EKS 叢集,政策日誌會位於自我管理 K8S 叢集下,/aws/eks/cluster-name/cluster/而對於自我管理的 K8S 叢集,日誌會放置在 /aws/k8s-cluster/cluster/ 下。 K8S

使用 傳送網路政策日誌 Amazon VPC CNI plugin for Kubernetes

如果您啟用網路政策,系統會將第二個容器新增至節點代理程式aws-node Pod。此節點代理程式可以將網路政策日誌傳送至 CloudWatch Logs。

注意

網路政策日誌僅會由節點代理程式傳送。不包括 VPC CNI 所做的其他日誌。

必要條件

  • 將下列許可作為 stanza 或個別政策新增至您用於 IAM 的 VPC 角色CNI。

    { "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. 選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。

  5. 設定 上 name of addon 頁面:

    1. 版本下拉式清單中,選取 v1.14.0-eksbuild.3 或更高版本。

    2. 展開選用組態設定

    3. 組態"true"中輸入頂層 JSON 金鑰"nodeAgent":,值是具有 金鑰"enableCloudWatchLogs":和 值的物件。產生的文字必須是有效的 JSON 物件。下列範例顯示網路政策和網路政策日誌已啟用,日誌會傳送至 CloudWatch Logs:

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

下列螢幕擷取畫面展示了案例的範例。

+ image::images/console-cni-config-network-policy-logs-cwl.png【在選用組態中AWS Management Console 顯示具有網路政策和 CloudWatch Logs 的 VPC CNI附加元件。,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

如果您已安裝 Amazon VPC CNI plugin for Kubernetes 透過 helm,您可以更新組態,將網路政策日誌傳送至 CloudWatch Logs。

  1. 執行下列命令以啟用網路政策日誌,並將其傳送至 CloudWatch 日誌。

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. 在您的編輯器中開啟 aws-node DaemonSet

    kubectl edit daemonset -n kube-system aws-node
  2. 在 VPC CNI 常駐程式清單清單中args:true將 取代false為兩個命令引數--enable-cloudwatch-logs=false中的 --enable-policy-event-logs=falseaws-network-policy-agent容器中的 aws-node

    - 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

若要執行此命令,您可以使用任何方法連接到節點。