awsvpc 네트워크 모드를 이용한 태스크 네트워킹 - Amazon Elastic Container Service

awsvpc 네트워크 모드를 이용한 태스크 네트워킹

awsvpc 네트워크 모드에서 제공하는 태스크 네트워킹 기능은 Amazon ECS 태스크에 Amazon EC2 인스턴스와 동일한 네트워킹 속성을 제공합니다. awsvpc 네트워크 모드는 컨테이너 네트워킹을 간소화하고 컨테이너화된 애플리케이션이 서로, 그리고 VPC 내 다른 서비스와 통신하는 방식을 더 세부적으로 제어할 수 있습니다. 또한 awsvpc 네트워크 모드는 태스크 내에서 더 세부적으로 보안 그룹 및 네트워크 모니터링 도구를 사용 가능하게 만들어 컨테이너의 보안을 강화합니다. 각 태스크는 고유한 탄력적 네트워크 인터페이스(ENI)를 받으므로 VPC 흐름 로그와 같은 기타 Amazon EC2 네트워킹 기능을 이용하여 태스크에서 주고받는 트래픽을 모니터링할 수도 있습니다. 또한 같은 태스크에 속한 컨테이너는 localhost 인터페이스로 통신할 수 있습니다.

작업 ENI는 Amazon ECS의 완전 관리형 기능입니다. Amazon ECS는 ENI를 생성하고 지정된 보안 그룹이 있는 호스트 Amazon EC2 인스턴스에 이를 연결합니다. 태스크는 Amazon EC2 인스턴스가 기본 네트워크 인터페이스에서 하는 것과 동일한 방식으로 ENI에서 네트워크 트래픽을 보내고 받습니다. 각 태스크 ENI는 기본적으로 프라이빗 IPv4 주소가 할당됩니다. VPC가 듀얼 스택 모드를 사용하도록 설정되어 있고 IPv6 CIDR 블록과 함께 서브넷을 사용하는 경우 태스크 ENI도 IPv6 주소를 수신합니다. 각 태스크는 ENI를 하나만 가질 수 있습니다.

이 ENI는 계정의 Amazon EC2 콘솔에서 볼 수 있지만 계정에서 수동으로 분리하거나 수정할 수는 없습니다. 이는 실행 중인 태스크와 연결된 ENI가 우발적으로 삭제되는 일을 방지하기 위한 것입니다. Amazon ECS 콘솔 또는 DescribeTasks API 태스크를 통해 태스크에 대한 ENI 연결 정보를 볼 수 있습니다. 태스크가 중지되거나 서비스의 규모가 작아진 경우에는 태스크 ENI가 분리되고 삭제됩니다.

계정, IAM 사용자 또는 역할이 awsvpcTrunking 계정 설정에 옵트인하고 늘어난 ENI 밀도와 함께 컨테이너 인스턴스를 시작한 경우 Amazon ECS에서 컨테이너 인스턴스에 대한 “트렁크” 네트워크 인터페이스를 생성하고 연결하기도 합니다. 트렁크 네트워크는 Amazon ECS에서 완전히 관리됩니다. 트렁크 ENI는 Amazon ECS 클러스터에서 컨테이너 인스턴스를 종료하거나 등록 취소할 때 삭제됩니다. awsvpcTrunking 계정 설정으로 옵트인에 대한 자세한 정보는 늘어난 ENI 제한이 있는 컨테이너 인스턴스 작업 섹션을 참조하세요.

고려 사항

awsvpc 네트워크 모드 사용 시 고려할 사항이 몇 가지 있습니다.

Linux 운영 체제를 사용할 때는 다음 사항을 고려하세요.

  • awsvpc 네트워크 모드를 사용하는 태스크 및 서비스는 사용자를 대신하여 Amazon ECS에 다른 Amazon ECS 서비스를 호출할 권한을 부여하는 AWS 서비스 연결 역할이 필요합니다. 이 역할은 클러스터를 생성하거나 AWS Management Console에서 서비스를 생성 또는 업데이트할 때 자동으로 생성됩니다. 자세한 정보는 Amazon ECS용 서비스 연결 역할을 참조하세요. 다음 AWS CLI 명령을 사용하여 서비스 연결 역할을 생성할 수도 있습니다.

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • Amazon EC2 Linux 인스턴스는 awsvpc 네트워크 모드를 사용하는 태스크를 실행하기 위해 버전 1.15.0 이상의 컨테이너 에이전트가 필요합니다. Amazon ECS 최적화 AMI를 사용하는 경우 해당 인스턴스에는 1.15.0-4 이상 버전의 ecs-init 패키지가 필요합니다.

  • Amazon ECS는 enableDnsHostnamesenableDnsSupport 옵션이 모두 VPC에서 활성화된 경우 Amazon에서 제공한 (내부) DNS 호스트 이름을 함께 사용하여 태스크의 호스트 이름을 채웁니다. 이러한 옵션이 사용 설정되지 않으면 태스크의 DNS 호스트 이름이 임의의 호스트 이름이 설정됩니다. VPC DNS 설정에 대한 자세한 정보는 Amazon VPC 사용 설명서VPC와 함께 DNS 사용을 참조하세요.

  • awsvpc 네트워크 모드를 사용하는 각 Amazon ECS 태스크는 고유한 탄력적 네트워크 인터페이스(ENI)를 받습니다. 이 ENI는 이를 호스팅하는 Amazon EC2 인스턴스에 연결되어 있습니다. Amazon EC2 Linux 인스턴스에 연결할 수 있는 네트워크 인터페이스 수에 대한 기본 할당량이 있습니다. 기본 네트워크 인터페이스는 해당 할당량에 대해 하나로 계산됩니다. 예를 들어 기본적으로 c5.large 인스턴스에는 ENI를 3개까지만 연결할 수 있습니다. 인스턴스에 대한 기본 네트워크 인터페이스는 한 개로 계산됩니다. 따라서 인스턴스에 ENI를 2개 더 연결할 수 있습니다. awsvpc 네트워크 모드를 사용하는 각 태스크에는 ENI가 필요하므로 대개 이 인스턴스 유형에서는 이러한 태스크를 2개까지만 실행할 수 있습니다. 각 인스턴스 유형의 기본 ENI 제한에 자세한 정보는 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스 유형별 네트워크 인터페이스당 IP 주소를 참조하세요.

  • Amazon ECS에서는 지원되는 인스턴스 유형을 사용하여 늘어난 ENI 밀도와 함께 Amazon EC2 Linux 인스턴스를 시작할 수 있습니다. awsvpcTrunking 계정 설정에 옵트인하고 이러한 인스턴스 유형을 사용하여 Amazon EC2 Linux 인스턴스를 클러스터에 등록하는 경우 이러한 인스턴스의 ENI 할당량이 더 높습니다. 이러한 인스턴스를 이 정도 높은 할당량으로 사용하면 각 Amazon EC2 Linux 인스턴스에 더 많은 태스크를 배치할 수 있습니다. 트렁킹 기능과 함께 늘어난 ENI 밀도를 활용하려면 Amazon EC2 인스턴스에 버전 1.28.1 이상의 컨테이너 에이전트가 필요합니다. Amazon ECS 최적화 AMI를 사용하는 경우 해당 인스턴스에는 1.28.1-2 이상 버전의 ecs-init 패키지가 필요합니다. awsvpcTrunking 계정 설정 옵트인에 대한 자세한 정보는 계정 설정 섹션을 참조하세요. ENI 트렁킹에 대한 자세한 정보는 탄력적 네트워크 인터페이스 트렁킹 섹션을 참조하세요.

  • Amazon EC2 Linux 인스턴스에서 awsvpc 네트워크 모드를 사용하는 태스크를 호스팅할 때 작업 ENI에 퍼블릭 IP 주소가 부여되지 않습니다. 인터넷에 액세스하려면 NAT 게이트웨이를 사용하도록 구성된 프라이빗 서브넷에서 시작되어야 합니다. 자세한 정보는 Amazon VPC 사용 설명서NAT 게이트웨이 섹션을 참조하세요. 인바운드 네트워크 액세스는 프라이빗 IP 주소를 사용하는 VPC에서 시도하거나 VPC 내에서 로드 밸런서를 통해 라우팅되어야 합니다. 퍼블릭 서브넷 내에서 시작된 태스크는 인터넷에 액세스할 수 없습니다.

  • Amazon ECS는 Amazon EC2 Linux 인스턴스에 연결된 ENI만 인식합니다. 인스턴스에 ENI를 수동으로 연결한 경우, Amazon ECS는 네트워크 어댑터가 충분하지 않은 인스턴스에 태스크를 추가하려고 시도할 수 있습니다. 이로 인해 태스크 시간이 초과되고 프로비저닝 해제 상태가 된 다음 중지 상태가 될 수 있습니다. 따라서 ENI를 인스턴스에 수동으로 연결하지 않는 것이 좋습니다.

  • Amazon EC2 Linux 인스턴스는 awsvpc 네트워크 모드로 태스크를 배치하는 것을 감안하여 ecs.capability.task-eni 용량으로 등록해야 합니다. 1.15.0-4 이상 버전의 ecs-init을 실행 중인 인스턴스는 이 속성으로 자동 등록됩니다.

  • Amazon EC2 Linux 인스턴스에서 생성 및 연결하는 ENI는 계정을 통해 수동으로 분리하거나 수정할 수 없습니다. 이는 실행 중인 태스크와 연결된 ENI가 우발적으로 삭제되는 일을 방지하기 위한 것입니다. 태스크에 대한 ENI를 해제하려면 태스크를 중지합니다.

  • awsvpcConfiguration 네트워크 모드를 사용하는 태스크를 실행하거나 서비스를 생성할 때 awsvpc에서 서브넷 16개와 보안 그룹 5개만 지정할 수 있다는 제한이 있습니다. 자세한 정보는 Amazon Elastic Container Service API 참조AwsVpcConfiguration을 참조하세요.

  • awsvpc 네트워크 모드에서 태스크가 시작되면 Amazon ECS 컨테이너 에이전트는 태스크 정의에 있는 컨테이너를 시작하기 전에 각 태스크에 대한 추가 pause 컨테이너를 생성합니다. 그런 다음 amazon-ecs-cni-plugins CNI 플러그인을 실행하여 pause 컨테이너의 네트워크 네임스페이스를 구성합니다. 그런 다음 에이전트는 태스크의 나머지 컨테이너를 시작하며 이러한 컨테이너는 pause 컨테이너의 네트워크 스택을 공유합니다. 따라서 태스크의 모든 컨테이너가 ENI의 IP 주소로 주소를 지정할 수 있으며 localhost 인터페이스를 통해 서로 통신할 수 있습니다.

  • awsvpc 네트워크 모드만을 사용하는 태스크가 포함된 서비스는 Application Load Balancer 및 Network Load Balancer를 지원합니다. Classic Load Balancer는 지원되지 않습니다. 이러한 서비스에 대한 대상 그룹을 생성할 때 대상 유형을 ip로 선택해야 합니다. instance는 사용하지 않습니다. 이는 awsvpc 네트워크 모드를 사용하는 태스크가 Amazon EC2 Linux 인스턴스가 아닌 ENI와 연결되기 때문입니다. 자세한 정보는 서비스 로드 밸런싱을 참조하세요.

  • VPC가 사용하는 DHCP 옵션 세트를 변경하도록 업데이트된 경우, 이러한 변경 사항을 기존 작업에 적용할 수 없습니다. 이러한 변경 사항이 적용된 새 작업을 시작하고 올바르게 작동하는지 확인한 다음 기존 작업을 중지하여 네트워크 구성을 안전하게 변경합니다.

Windows 운영 체제를 사용할 때 고려할 사항을 다음과 같습니다.

  • Amazon ECS 최적화 Windows 서버 2016 AMI를 사용하는 컨테이너 인스턴스는 awsvpc 네트워크 모드를 사용하는 태스크를 호스팅할 수 없습니다. Amazon ECS 최적화 Windows Server 2016 AMI와 awsvpc 네트워크 모드를 지원하는 Windows AMI가 포함된 클러스터가 있는 경우, awsvpc 네트워크 모드를 사용하는 태스크는 Windows 2016 Server 인스턴스에서 시작되지 않습니다. 대신, 지원하는 awsvpc네트워크 모드 인스턴스에서 시작됩니다.

  • awsvpc 네트워크 모드를 사용하는 Windows 컨테이너에 CloudWatch 지표를 사용하려면 Amazon EC2 Windows 인스턴스에 버전 1.57.1 이상의 컨테이너 에이전트가 필요합니다.

  • awsvpc 네트워크 모드를 사용하는 태스크 및 서비스는 사용자를 대신하여 Amazon ECS에 다른 Amazon ECS 서비스를 호출할 권한을 부여하는 AWS 서비스 연결 역할이 필요합니다. 이 역할은 클러스터를 생성하거나 AWS Management Console에서 서비스를 생성 또는 업데이트할 때 자동으로 생성됩니다. 자세한 정보는 Amazon ECS용 서비스 연결 역할을 참조하세요. 다음 AWS CLI 명령을 사용하여 서비스 연결 역할을 생성할 수도 있습니다.

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • Amazon EC2 Windows 인스턴스는 awsvpc 네트워크 모드를 사용하는 태스크를 실행하기 위해 버전 1.54.0 이상의 컨테이너 에이전트가 필요합니다. 인스턴스를 부트스트랩할 때 awsvpc 네트워크 모드에 필요한 옵션을 구성해야 합니다. 자세한 정보는 Amazon EC2 사용자 데이터를 사용하여 Windows 컨테이너 인스턴스 부트스트래핑을 참조하세요.

  • Amazon ECS는 enableDnsHostnamesenableDnsSupport 옵션이 모두 VPC에서 사용 설정된 경우 Amazon에서 제공한 (내부) DNS 호스트 이름을 함께 사용하여 태스크의 호스트 이름을 채웁니다. 이러한 옵션이 사용 설정되지 않으면 태스크의 DNS 호스트 이름이 임의의 호스트 이름입니다. VPC DNS 설정에 대한 자세한 정보는 Amazon VPC 사용 설명서VPC와 함께 DNS 사용을 참조하세요.

  • awsvpc 네트워크 모드를 사용하는 각 Amazon ECS 태스크는 고유한 탄력적 네트워크 인터페이스(ENI)를 받습니다. 이 ENI는 이를 호스팅하는 Amazon EC2 Windows 인스턴스에 연결되어 있습니다. Amazon EC2 Windows 인스턴스에 연결할 수 있는 네트워크 인터페이스 수에 대한 기본 할당량이 있습니다. 기본 네트워크 인터페이스는 해당 할당량에 대해 하나로 계산됩니다. 예를 들어 기본적으로 c5.large 인스턴스에는 ENI를 3개까지만 연결할 수 있습니다. 인스턴스에 대한 기본 네트워크 인터페이스는 그 중 한 개로 계산됩니다. 따라서 인스턴스에 ENI를 2개 더 연결할 수 있습니다. awsvpc 네트워크 모드를 사용하는 각 태스크에는 ENI가 필요하므로 대개 이 인스턴스 유형에서는 이러한 태스크를 2개까지만 실행할 수 있습니다. 각 인스턴스 유형의 기본 ENI 제한에 자세한 정보는 Windows 인스턴스용 Amazon EC2 사용 설명서인스턴스 유형별 네트워크 인터페이스당 IP 주소를 참조하세요.

  • Amazon EC2 Windows 인스턴스에서 awsvpc 네트워크 모드를 사용하는 태스크를 호스팅할 때 태스크 ENI에 퍼블릭 IP 주소가 부여되지 않습니다. 인터넷에 액세스하려면 NAT 게이트웨이를 사용하도록 구성된 프라이빗 서브넷에서 태스크를 시작합니다. 자세한 정보는 Amazon VPC 사용 설명서NAT 게이트웨이 섹션을 참조하세요. 인바운드 네트워크 액세스는 프라이빗 IP 주소를 사용하는 VPC에서 시도하거나 VPC 내에서 로드 밸런서를 통해 라우팅되어야 합니다. 퍼블릭 서브넷 내에서 시작된 태스크는 인터넷에 액세스할 수 없습니다.

  • Amazon ECS는 Amazon EC2 Windows 인스턴스에 연결된 ENI만 인식합니다. 인스턴스에 ENI를 수동으로 연결한 경우, Amazon ECS는 네트워크 어댑터가 충분하지 않은 인스턴스에 태스크를 추가하려고 시도할 수 있습니다. 이로 인해 태스크 시간이 초과되고 프로비저닝 해제 상태가 된 다음 중지 상태가 될 수 있습니다. 따라서 ENI를 인스턴스에 수동으로 연결하지 않는 것이 좋습니다.

  • Amazon EC2 Windows 인스턴스는 awsvpc 네트워크 모드로 태스크를 배치하는 것을 감안하여 ecs.capability.task-eni 용량으로 등록해야 합니다.

  • Amazon EC2 Windows 인스턴스에서 생성 및 연결하는 ENI는 수동으로 분리하거나 수정할 수 없습니다. 이는 실행 중인 태스크와 연결된 ENI가 우발적으로 삭제되는 일을 방지하기 위한 것입니다. 태스크에 대한 ENI를 해제하려면 태스크를 중지합니다.

  • 태스크를 실행하거나 awsvpc 네트워크 모드를 사용하는 서비스를 생성할 때, awsvpcConfiguration에는 최대 16개의 서브넷과 5개의 보안 그룹만 지정할 수 있습니다. 자세한 정보는 Amazon Elastic Container Service API 참조AwsVpcConfiguration을 참조하세요.

  • awsvpc 네트워크 모드에서 태스크가 시작되면 Amazon ECS 컨테이너 에이전트는 태스크 정의에 있는 컨테이너를 시작하기 전에 각 태스크에 대한 추가 pause 컨테이너를 생성합니다. 그런 다음 amazon-ecs-cni-plugins CNI 플러그인을 실행하여 pause 컨테이너의 네트워크 네임스페이스를 구성합니다. 그런 다음 에이전트는 태스크의 나머지 컨테이너를 시작하며 이러한 컨테이너는 pause 컨테이너의 네트워크 스택을 공유합니다. 따라서 태스크의 모든 컨테이너가 ENI의 IP 주소로 주소를 지정할 수 있으며 localhost 인터페이스를 통해 서로 통신할 수 있습니다.

  • awsvpc 네트워크 모드만을 사용하는 태스크가 포함된 서비스는 Application Load Balancer 및 Network Load Balancer를 지원합니다. Classic Load Balancer는 지원되지 않습니다. 이러한 서비스에 대한 대상 그룹을 생성할 때 대상 유형을 instance가 아닌 ip로 선택해야 합니다. 이는 awsvpc 네트워크 모드를 사용하는 태스크가 Amazon EC2 Windows 인스턴스가 아닌 ENI와 연결되기 때문입니다. 자세한 정보는 서비스 로드 밸런싱을 참조하세요.

  • VPC가 사용하는 DHCP 옵션 세트를 변경하도록 업데이트된 경우, 이러한 변경 사항을 기존 작업에 적용할 수 없습니다. 이러한 변경 사항이 적용된 새 작업을 시작하고 올바르게 작동하는지 확인한 다음 기존 작업을 중지하여 네트워크 구성을 안전하게 변경합니다.

  • 다음은 EC2 Windows 구성에서 awsvpc 네트워크 모드를 사용할 때 지원되지 않는 항목입니다.

    • 듀얼 스택 구성

    • IPv6

    • ENI 트렁킹

태스크 네트워킹 활성화

태스크에서 awsvpc 네트워크 모드를 사용하려면 태스크 정의에서 지정해야 합니다. 자세한 정보는 네트워크 모드을 참조하세요. 그 다음에 태스크를 실행하거나 서비스를 생성할 때는 태스크를 배치할 하나 이상의 서브넷이 포함된 네트워크 구성을 지정합니다. 또한 ENI에 연결할 하나 이상의 보안 그룹을 지정합니다. 이 태스크는 해당 서브넷과 동일한 가용 영역에서 호환되는 Amazon EC2 인스턴스에 배치되고 지정된 보안 그룹은 이 태스크에 대해 프로비저닝된 ENI와 연결됩니다.

듀얼 스택 모드로 VPC 사용하기

VPC를 듀얼 스택 모드로 사용하는 경우 태스크는 IPv4나 IPv6, 또는 둘 다를 통해 통신할 수 있습니다. IPv4 및 IPv6 주소는 서로 독립적이며 IPv4 및 IPv6에 대해 별도로 VPC의 라우팅 및 보안을 구성해야 합니다. VPC를 듀얼 스택 모드로 구성하는 방법에 대한 자세한 정보는 Amazon VPC 사용 설명서IPv6로 마이그레이션하기를 참조하세요.

인터넷 게이트웨이 또는 아웃바운드 전용 인터넷 게이트웨이로 VPC를 구성한 경우, VPC 듀얼 스택 모드로 사용할 수 있습니다. 이렇게 하면 IPv6 주소에 할당되는 태스크가 인터넷 게이트웨이 또는 송신 전용 인터넷 게이트웨이를 통해 인터넷에 액세스할 수 있습니다. NAT 게이트웨이는 선택 사항입니다. 자세한 정보는 Amazon VPC 사용 설명서인터넷 게이트웨이송신 전용 인터넷 게이트를 참조하세요.

다음 조건이 충족되면 Amazon ECS 태스크에 IPv6 주소가 할당됩니다.

  • 태스크를 호스팅하는 Amazon EC2 Linux 인스턴스가 버전 1.45.0 이상의 컨테이너 에이전트를 사용하고 있습니다. 인스턴스에서 사용 중인 에이전트 버전을 확인하고 필요한 경우 업데이트하는 방법에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요.

  • dualStackIPv6 계정 설정이 활성화되어 있습니다. 자세한 정보는 계정 설정 섹션을 참조하세요.

  • 태스크가 awsvpc 네트워크 모드를 사용하고 있습니다.

  • VPC 및 서브넷은 IPv6으로 구성됩니다. 구성에는 지정된 서브넷에서 생성된 네트워크 인터페이스가 포함됩니다. 이중 스택 모드용 VPC 구성 방법에 대한 자세한 정보는 Amazon VPC 사용 설명서IPv6로 마이그레이션하기서브넷의 IPv6 주소 지정 속성 수정을 참조하세요.