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 컨테이너용 vCPU 1개가 추가로 필요합니다.

Amazon EKS 추가 기능

AWS Management Console
  1. Amazon EKS 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 클러스터를 선택한 다음 Amazon VPC CNI 추가 기능을 구성할 클러스터의 이름을 선택합니다.

  3. 추가 기능(Add-ons) 탭을 선택합니다.

  4. 추가 기능 상자의 오른쪽 상단에 있는 상자를 선택한 다음에 Edit(편집)를 선택합니다.

  5. name of add-on 구성 페이지에서 다음을 수행합니다.

    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-node DaemonSet를 엽니다.

    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로 네트워크 정책 로그 전송

네트워크 정책을 활성화하면 두 번째 컨테이너가 노드 에이전트용 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. 추가 기능(Add-ons) 탭을 선택합니다.

  4. 추가 기능 상자의 오른쪽 상단에 있는 상자를 선택한 다음에 Edit(편집)를 선택합니다.

  5. name of add-on 구성 페이지에서 다음을 수행합니다.

    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[AWS Management Console 옵션 구성에 네트워크 정책 및 CloudWatch 로그가 있는 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

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-node DaemonSet를 엽니다.

    kubectl edit daemonset -n kube-system aws-node
  2. VPC CNI aws-node 데몬 세트 매니페스트의 aws-network-policy-agent 컨테이너에 있는 args:에서 두 명령 인수 --enable-policy-event-logs=false--enable-cloudwatch-logs=false에서 falsetrue로 바꿉니다.

    - 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

이 명령을 실행하려면 임의의 방법을 사용하여 노드에 연결할 수 있습니다.