CNI 구성하기

이 새로운 기능을 활성화 하기 위해 Amazon EKS 클러스터에는 쿠버네티스 컨트롤 플레인에서 실행되는 두 가지 새로운 구성 요소가 있습니다.

  • 보안 그룹이 필요한 파드에 제한 및 요청을 추가하는 변형(mutation) webhook

  • 해당 파드와 관련된 네트워크 인터페이스 관리를 담당하는 리소스 컨트롤러

이 기능을 용이하게 하기 위해 각 워커 노드는 단일 트렁크 네트워크 인터페이스 및 여러 분기 네트워크 인터페이스와 연결 됩니다. 트렁크 인터페이스는 인스턴스에 연결된 표준 네트워크 인터페이스 역할을 합니다. 그런 다음 VPC 리소스 컨트롤러는 분기 인터페이스를 트렁크 인터페이스에 연결 합니다. 이렇게 하면 인스턴스당 연결할 수 있는 네트워크 인터페이스 수가 늘어납니다. 보안 그룹이 네트워크 인터페이스로 지정 되었으므로 이제 워커 노드에 할당된 추가 네트워크 인터페이스에 특정 보안 그룹이 필요한 파드를 예약 할 수 있습니다.

먼저 EC2 인스턴스가 네트워크 인터페이스, 프라이빗 IP 주소 및 인스턴스와의 연결 및 분리를 관리 할 수 ​​있도록 새로운 IAM 정책 노드 그룹 역할을 연결해야 합니다.

다음 명령은 AmazonEKSVPCResourceController 정책을 클러스터 역할에 추가합니다.

aws iam attach-role-policy \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController \
    --role-name ${ROLE_NAME}
    

다음으로, CNI 플러그인이 enable_pod_eni 변수를 aws-node daemonset에서 trunk로 설정 하여 파드에 대한 네트워크 인터페이스를 관리 할 수 있게 해줍니다.

kubectl -n kube-system set env daemonset aws-node ENABLE_POD_ENI=true

daemonset의 롤링 업데이트를 진행 합니다.

kubectl -n kube-system rollout status ds aws-node

이 설정이 true로 세팅되면 플러그인은 클러스터의 각 노드에 대해 vpc.amazonaws.com / has-trunk-attached = true 값이 있는 레이블을 호환되는 인스턴스에 추가합니다. VPC 리소스 컨트롤러는 설명이 aws-k8s-trunk-eni인 트렁크 네트워크 인터페이스라는 특수 네트워크 인터페이스를 생성하고 연결합니다.

 kubectl get nodes \
  --selector alpha.eksctl.io/nodegroup-name=nodegroup-sec-group \
  --show-labels
  

Last updated