本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
故障診斷 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
-
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要設定 Amazon VPC CNI 附加元件的叢集名稱。
-
選擇附加元件索引標籤。
-
選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。
-
在 設定 上
name of addon
頁面:-
在版本下拉式清單中,選取
v1.14.0-eksbuild.3
或更高版本。 -
展開選用組態設定。
-
輸入頂層 JSON 金鑰
"nodeAgent":
,且值是組態值"true"
中具有 金鑰"enablePolicyEventLogs":
和 值的物件。產生的文字必須是有效的 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
-
如果您已安裝 Amazon VPC CNI plugin for Kubernetes 透過
helm
,您可以更新組態以寫入網路政策日誌。-
執行下列命令以啟用網路政策。
helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
- kubectl
-
如果您已安裝 Amazon VPC CNI plugin for Kubernetes 透過
kubectl
,您可以更新組態以寫入網路政策日誌。-
在您的編輯器中開啟
aws-node
DaemonSet
。kubectl edit daemonset -n kube-system aws-node
-
在 VPC CNI
aws-node
常駐程式清單true
的--enable-policy-event-logs=false
args:
aws-network-policy-agent
容器中,將 中的命令引數中的 取代false
為 。- args: - --enable-policy-event-logs=true
-
將網路政策日誌傳送至 Amazon CloudWatch Logs
您可以使用 Amazon CloudWatch Logs 等服務來監控網路政策日誌。您可以使用下列方法來將網路政策日誌傳送至 CloudWatch Logs。
對於 EKS 叢集,政策日誌會位於自我管理 K8S 叢集下,/aws/eks/
而對於自我管理的 K8S 叢集,日誌會放置在 cluster-name
/cluster//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
-
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要設定 Amazon VPC CNI 附加元件的叢集名稱。
-
選擇附加元件索引標籤。
-
選取附加元件方塊右上方的方塊,然後選擇 Edit (編輯)。
-
在 設定 上
name of addon
頁面:-
在版本下拉式清單中,選取
v1.14.0-eksbuild.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
-
-
執行下列 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。-
執行下列命令以啟用網路政策日誌,並將其傳送至 CloudWatch 日誌。
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 常駐程式清單清單中
args:
,true
將 取代false
為兩個命令引數--enable-cloudwatch-logs=false
中的--enable-policy-event-logs=false
和aws-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
若要執行此命令,您可以使用任何方法連接到節點。