이 기능을 용이하게 하기 위해 각 워커 노드는 단일 트렁크 네트워크 인터페이스 및 여러 분기 네트워크 인터페이스와 연결 됩니다. 트렁크 인터페이스는 인스턴스에 연결된 표준 네트워크 인터페이스 역할을 합니다. 그런 다음 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