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
컨테이너용 vCPU 1개가 추가로 필요합니다.
Amazon EKS 추가 기능
- AWS Management Console
-
-
Amazon EKS 콘솔
을 엽니다. -
왼쪽 탐색 창에서 클러스터를 선택한 다음 Amazon VPC CNI 추가 기능을 구성할 클러스터의 이름을 선택합니다.
-
추가 기능(Add-ons) 탭을 선택합니다.
-
추가 기능 상자의 오른쪽 상단에 있는 상자를 선택한 다음에 Edit(편집)를 선택합니다.
-
name of add-on
구성 페이지에서 다음을 수행합니다.-
버전 드롭다운 목록에서
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로 네트워크 정책 로그 전송
네트워크 정책을 활성화하면 두 번째 컨테이너가 노드 에이전트용 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 추가 기능을 구성할 클러스터의 이름을 선택합니다.
-
추가 기능(Add-ons) 탭을 선택합니다.
-
추가 기능 상자의 오른쪽 상단에 있는 상자를 선택한 다음에 Edit(편집)를 선택합니다.
-
name of add-on
구성 페이지에서 다음을 수행합니다.-
버전 드롭다운 목록에서
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[AWS Management Console 옵션 구성에 네트워크 정책 및 CloudWatch 로그가 있는 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
-
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:
에서 두 명령 인수--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
이 명령을 실행하려면 임의의 방법을 사용하여 노드에 연결할 수 있습니다.