Pod에 여러 네트워크 인터페이스 연결

Pod에 여러 네트워크 인터페이스 연결

기본적으로 Amazon VPC CNI 플러그인은 각 Pod에 IP 주소 하나를 할당합니다. 이 IP 주소는 Pod의 모든 인바운드 및 아웃바운드 트래픽을 처리하는 탄력적 네트워크 인터페이스에 연결됩니다. 대역폭과 초당 패킷 수 성능을 높이려면 VPC CNI의 Multi-NIC 기능을 사용해 멀티홈(multi-homed) Pod를 구성할 수 있습니다. 멀티홈 Pod는 여러 네트워크 인터페이스(그리고 여러 IP 주소)를 사용하는 단일 Kubernetes Pod입니다. 멀티홈 Pod를 실행하면 동시 연결을 사용해 애플리케이션 트래픽을 여러 네트워크 인터페이스에 분산할 수 있습니다. 이는 인공지능(AI), 머신러닝(ML), 고성능 컴퓨팅(HPC) 사용 사례에 특히 유용합니다.

출처: 문서

본문

배경

Amazon EC2에서 탄력적 네트워크 인터페이스는 가상 네트워크 카드를 나타내는 VPC의 논리적 네트워킹 구성 요소입니다. 많은 EC2 인스턴스 유형에서 네트워크 인터페이스는 하드웨어에서 단일 네트워크 인터페이스 카드(NIC)를 공유합니다. 이 단일 NIC는 최대 대역폭과 초당 패킷 수를 가집니다.

Multi-NIC 기능이 활성화되면 VPC CNI는 기본적으로 하는 것처럼 IP 주소를 대량으로 할당하지 않습니다. 대신 VPC CNI는 새 Pod가 시작될 때 각 네트워크 카드의 네트워크 인터페이스에 IP 주소를 온디맨드로 하나씩 할당합니다. 이 동작은 멀티홈 Pod 사용으로 증가하는 IP 주소 고갈 속도를 낮춥니다. VPC CNI가 IP 주소를 온디맨드로 할당하므로 Multi-NIC 기능이 활성화된 인스턴스에서는 Pod가 시작되는 데 더 오래 걸릴 수 있습니다.

고려 사항

  • Kubernetes 클러스터가 VPC CNI 버전 1.20.0 이상을 실행 중인지 확인하세요. Multi-NIC 기능은 VPC CNI 버전 1.20.0 이상에서만 사용할 수 있습니다.
  • VPC CNI 플러그인에서 ENABLE_MULTI_NIC 환경 변수를 활성화하세요. 다음 명령으로 변수를 설정하고 DaemonSet 배포를 시작할 수 있습니다.
    kubectl set env daemonset aws-node -n kube-system ENABLE_MULTI_NIC=true
    
  • 여러 네트워크 인터페이스 카드(NIC)가 있는 워커 노드를 만들었는지 확인하세요. 여러 네트워크 인터페이스 카드가 있는 EC2 인스턴스 목록은 Amazon EC2 User Guide의 네트워크 카드(Network cards)를 참조하세요.
  • Multi-NIC 기능이 활성화되면 VPC CNI는 기본적으로 하는 것처럼 IP 주소를 대량으로 할당하지 않습니다. VPC CNI가 IP 주소를 온디맨드로 할당하므로 Multi-NIC 기능이 활성화된 인스턴스에서는 Pod가 시작되는 데 더 오래 걸릴 수 있습니다. 자세한 내용은 이전 섹션 배경을 참조하세요.
  • Multi-NIC 기능이 활성화되더라도 Pod는 기본적으로 여러 네트워크 인터페이스를 갖지 않습니다. 각 워크로드를 Multi-NIC을 사용하도록 구성해야 합니다. 여러 네트워크 인터페이스를 가져야 하는 워크로드에 k8s.amazonaws.com/nicConfig: multi-nic-attachment 주석(annotation)을 추가하세요.

IPv6 고려 사항

  • 사용자 지정 IAM 정책 – IPv6 클러스터의 경우 VPC CNI에 대해 다음 사용자 지정 IAM 정책을 만들고 사용하세요. 이 정책은 Multi-NIC 전용입니다. IPv6 클러스터에서 VPC CNI를 사용하는 일반적인 정보는 클러스터, Pod, 서비스의 IPv6 주소 알아보기를 참조하세요.
    {
        "Version":"2012-10-17",
        "Statement": [
            {
                "Sid": "AmazonEKSCNIPolicyIPv6MultiNIC",
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateNetworkInterface",
                    "ec2:DescribeInstances",
                    "ec2:AssignIpv6Addresses",
                    "ec2:DetachNetworkInterface",
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:DescribeTags",
                    "ec2:ModifyNetworkInterfaceAttribute",
                    "ec2:DeleteNetworkInterface",
                    "ec2:DescribeInstanceTypes",
                    "ec2:UnassignIpv6Addresses",
                    "ec2:AttachNetworkInterface",
                    "ec2:DescribeSubnets"
                ],
                "Resource": "*"
            },
            {
                "Sid": "AmazonEKSCNIPolicyENITagIPv6MultiNIC",
                "Effect": "Allow",
                "Action": "ec2:CreateTags",
                "Resource": "arn:aws:ec2:*:*:network-interface/*"
            }
        ]
    }
    
  • IPv6 전환 메커니즘 없음 – Multi-NIC 기능을 사용하면 VPC CNI는 IPv6 클러스터의 Pod에 IPv4 주소를 할당하지 않습니다. 그렇지 않으면 VPC CNI는 Pod가 다른 Amazon VPC나 인터넷의 외부 IPv4 리소스와 통신할 수 있도록 각 Pod에 host-local IPv4 주소를 할당합니다.

사용

VPC CNI에서 Multi-NIC 기능이 활성화되고 aws-node Pod가 다시 시작된 뒤 각 워크로드를 멀티홈으로 구성할 수 있습니다. 다음은 필요한 주석이 포함된 YAML 구성의 예시입니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: orders-deployment
  namespace: ecommerce
  labels:
    app: orders
spec:
  replicas: 3
  selector:
    matchLabels:
      app: orders
  template:
    metadata:
      annotations:
         k8s.amazonaws.com/nicConfig: multi-nic-attachment
      labels:
        app: orders
    spec:
...

자주 묻는 질문

1. 네트워크 인터페이스 카드(NIC)란 무엇인가요?

네트워크 인터페이스 카드(NIC)는 단순히 네트워크 카드라고도 하며, 기본 클라우드 컴퓨팅 하드웨어에 네트워크 연결을 가능하게 하는 물리적 장치입니다. 현대 EC2 서버에서는 이를 Nitro 네트워크 카드라고 합니다. 탄력적 네트워크 인터페이스(ENI)는 이 기본 네트워크 카드의 가상 표현입니다.

일부 EC2 인스턴스 유형은 더 큰 대역폭과 패킷 속도 성능을 위해 여러 NIC를 가집니다. 이러한 인스턴스에서는 추가 네트워크 카드에 보조 ENI를 할당할 수 있습니다. 예를 들어 ENI #1은 네트워크 카드 인덱스 0에 연결된 NIC의 인터페이스로 기능할 수 있고, ENI #2는 별도의 네트워크 카드 인덱스에 연결된 NIC의 인터페이스로 기능할 수 있습니다.

2. 멀티홈 Pod란 무엇인가요?

멀티홈 Pod는 여러 네트워크 인터페이스(따라서 여러 IP 주소)를 가진 단일 Kubernetes Pod입니다. 각 Pod 네트워크 인터페이스는 탄력적 네트워크 인터페이스(ENI)와 연결되며, 이 ENI는 기본 워커 노드의 별도 NIC를 논리적으로 표현한 것입니다. 여러 네트워크 인터페이스를 사용하면 멀티홈 Pod는 추가 데이터 전송 용량을 가지며 데이터 전송 속도도 높아집니다.

중요

VPC CNI는 NIC가 여러 개 있는 인스턴스 유형에서만 멀티홈 Pod를 구성할 수 있습니다.

3. 이 기능을 왜 사용해야 하나요?

Kubernetes 기반 워크로드에서 네트워크 성능을 확장해야 한다면 Multi-NIC 기능을 사용해 ENA 장치가 연결된 모든 기본 NIC와 인터페이스하는 멀티홈 Pod를 실행할 수 있습니다. 추가 네트워크 카드를 활용하면 애플리케이션 트래픽을 여러 동시 연결에 분산함으로써 애플리케이션의 대역폭 용량과 패킷 속도 성능이 높아집니다. 이는 인공지능(AI), 머신러닝(ML), 고성능 컴퓨팅(HPC) 사용 사례에 특히 유용합니다.

4. 이 기능을 어떻게 사용하나요?

먼저 Kubernetes 클러스터가 VPC CNI 버전 1.20 이상을 사용하는지 확인해야 합니다. EKS 추가 기능으로 VPC CNI를 업데이트하는 단계는 Amazon VPC CNI 업데이트(Amazon EKS 추가 기능)를 참조하세요. 그런 다음 ENABLE_MULTI_NIC 환경 변수를 사용해 VPC CNI에서 Multi-NIC 지원을 활성화해야 합니다. 그런 다음 네트워크 카드가 여러 개 있는 노드를 만들고 조인해야 합니다. 네트워크 카드가 여러 개 있는 EC2 인스턴스 유형 목록은 Amazon EC2 User Guide의 네트워크 카드(Network cards)를 참조하세요. 마지막으로 각 워크로드를 여러 네트워크 인터페이스(멀티홈 Pod)를 사용하거나 단일 네트워크 인터페이스를 사용하도록 구성합니다.

5. 지원되는 워커 노드에서 워크로드가 여러 NIC를 사용하도록 어떻게 구성하나요?

멀티홈 Pod를 사용하려면 k8s.amazonaws.com/nicConfig: multi-nic-attachment 주석을 추가해야 합니다. 그러면 기본 인스턴스의 모든 NIC에서 ENI를 Pod에 연결합니다(Pod와 NIC 사이의 일대다 매핑). 이 주석이 없으면 VPC CNI는 Pod에 네트워크 인터페이스가 1개만 필요하다고 가정하고 사용 가능한 NIC의 ENI에서 IP를 할당합니다.

6. 이 기능에서 지원되는 네트워크 인터페이스 어댑터는 무엇인가요?

IP 트래픽용 기본 네트워크 카드에 ENA가 하나 이상 연결되어 있으면 모든 네트워크 인터페이스 어댑터를 사용할 수 있습니다. ENA에 대한 자세한 내용은 Amazon EC2 User Guide의 탄력적 네트워크 어댑터(ENA)를 참조하세요.

지원되는 네트워크 장치 구성:

  • ENA 인터페이스는 VPC의 IP 네트워킹을 지원하는 데 필요한 모든 전통적인 IP 네트워킹 및 라우팅 기능을 제공합니다. 자세한 내용은 EC2 인스턴스에서 ENA로 향상된 네트워킹 활성화를 참조하세요.
  • EFA(ENA가 있는 EFA) 인터페이스는 IP 네트워킹용 ENA 장치와 저지연·고처리량 통신용 EFA 장치를 모두 제공합니다.

중요

네트워크 카드에 EFA 전용 어댑터만 연결되어 있으면 VPC CNI는 멀티홈 Pod의 네트워크 연결을 프로비저닝할 때 이를 건너뜁니다. 그러나 네트워크 카드에서 EFA 전용 어댑터와 ENA 어댑터를 결합하면 VPC CNI는 이 장치의 ENI도 관리합니다. EKS 클러스터에서 EFA 전용 인터페이스를 사용하려면 Elastic Fabric Adapter로 Amazon EKS에서 머신러닝 학습 실행을 참조하세요.

7. 클러스터의 노드가 ENA를 지원하는지 확인할 수 있나요?

네, AWS CLI 또는 EC2 API를 사용해 클러스터의 EC2 인스턴스에 대한 네트워크 정보를 검색할 수 있습니다. 이를 통해 인스턴스가 ENA를 지원하는지 여부에 대한 세부 정보를 얻을 수 있습니다. 다음 예시에서 <>를 노드의 EC2 인스턴스 ID로 바꿉니다.

AWS CLI 예시:

aws ec2 describe-instances --instance-ids  --query "Reservations[].Instances[].EnaSupport"

예시 출력:

[ true ]

8. Pod와 연결된 여러 IP 주소를 확인할 수 있나요?

아니요, 쉽게 확인할 수는 없습니다. 그러나 노드에서 nsenter를 사용해 ip route show 같은 일반적인 네트워크 도구를 실행하고 추가 IP 주소와 인터페이스를 볼 수는 있습니다.

9. Pod의 네트워크 인터페이스 수를 제어할 수 있나요?

아니요. 워크로드가 지원되는 인스턴스에서 여러 NIC를 사용하도록 구성되면 단일 Pod에 인스턴스의 모든 네트워크 카드에서 IP 주소가 자동으로 한 개씩 할당됩니다. 반대로 단일 홈(single-homed) Pod는 인스턴스의 한 NIC에 연결된 네트워크 인터페이스를 하나 갖습니다.

중요

EFA 전용 장치만 연결된 네트워크 카드는 VPC CNI가 건너뜁니다.

10. Pod가 특정 NIC를 사용하도록 구성할 수 있나요?

아니요, 지원되지 않습니다. Pod에 관련 주석이 있으면 VPC CNI는 워커 노드에서 ENA 어댑터가 있는 모든 NIC를 사용하도록 자동으로 구성합니다.

11. 이 기능은 다른 VPC CNI 네트워킹 기능과 함께 동작하나요?

네, VPC CNI의 Multi-NIC 기능은 사용자 지정 네트워킹과 향상된 서브넷 검색 모두와 함께 동작합니다. 그러나 멀티홈 Pod는 사용자 지정 서브넷이나 보안 그룹을 사용하지 않습니다. 대신 VPC CNI는 노드와 같은 서브넷 및 보안 그룹 구성을 사용해 멀티홈 Pod에 IP 주소와 네트워크 인터페이스를 할당합니다. 사용자 지정 네트워킹에 대한 자세한 내용은 사용자 지정 네트워킹으로 대체 서브넷에 Pod 배포를 참조하세요.

VPC CNI의 Multi-NIC 기능은 Pod용 보안 그룹과는 함께 동작하지 않으며 결합할 수 없습니다.

12. 이 기능과 함께 네트워크 정책을 사용할 수 있나요?

네, Multi-NIC과 함께 Kubernetes 네트워크 정책을 사용할 수 있습니다. Kubernetes 네트워크 정책은 Pod로 들어오고 나가는 네트워크 트래픽을 제한합니다. VPC CNI로 네트워크 정책을 적용하는 방법은 Kubernetes 네트워크 정책으로 Pod 트래픽 제한을 참조하세요.

13. EKS Auto Mode에서 Multi-NIC 지원이 활성화되나요?

EKS Auto Mode 클러스터에서는 Multi-NIC이 지원되지 않습니다.

더 알아보기 (Learn more)