Amazon ECS에 Network Load Balancer 사용하기
Amazon ECS에 Network Load Balancer 사용하기
Network Load Balancer는 전송 계층(TCP/SSL)에서 라우팅 결정을 내려요. 초당 수백만 개의 요청을 처리할 수 있습니다. 로드 밸런서가 연결을 받으면 플로우 해시(flow hash) 라우팅 알고리즘으로 기본 규칙에 대한 대상 그룹에서 대상을 선택합니다.
출처: 문서
본문
로드 밸런서는 리스너 구성에 지정된 포트에서 선택된 대상으로 TCP 연결을 열려고 시도하고, 헤더를 수정하지 않고 요청을 전달해요. Network Load Balancer는 동적 호스트 포트 매핑을 지원합니다. 예를 들어 태스크의 컨테이너 정의가 NGINX 컨테이너 포트에 포트 80, 호스트 포트에 포트 0을 지정하면, 호스트 포트는 컨테이너 인스턴스의 임시 포트 범위(최신 Amazon ECS 최적화 AMI에서 32768~61000)에서 동적으로 선택됩니다. 태스크가 시작되면 NGINX 컨테이너가 인스턴스 ID와 포트 조합으로 Network Load Balancer에 등록되고, 그 컨테이너에 해당하는 인스턴스 ID와 포트로 트래픽이 분산됩니다. 이 동적 매핑을 사용하면 같은 컨테이너 인스턴스에서 단일 서비스의 여러 태스크를 실행할 수 있어요. 자세한 내용은 Network Load Balancers 사용자 가이드(User Guide for Network Load Balancers)를 참고하세요.
배포를 빠르게 하기 위한 파라미터 설정 모범 사례는 다음을 참고하세요:
- Amazon ECS용 로드 밸런서 상태 확인 파라미터 최적화(Optimize load balancer health check parameters for Amazon ECS)
- Amazon ECS용 로드 밸런서 연결 드레이닝 파라미터 최적화(Optimize load balancer connection draining parameters for Amazon ECS)
Amazon ECS와 함께 Network Load Balancer를 사용할 때 다음을 고려하세요:
- Amazon ECS는 태스크가 만들어지고 중지될 때 로드 밸런서에서 대상 등록·등록 해제에 필요한 권한을 제공하는 service-linked IAM role을 요구해요. 자세한 내용은 Amazon ECS용 서비스 연결 역할 사용(Using service-linked roles for Amazon ECS)을 참고하세요.
- 서비스에 5개보다 많은 대상 그룹을 연결할 수 없어요.
- IPv6 전용 구성의 서비스는 Network Load Balancer의 대상 그룹 IP 주소 유형을
dualstack으로 설정해야 합니다. awsvpc네트워크 모드를 사용하는 태스크가 있는 서비스의 경우, 서비스용 대상 그룹을 만들 때 대상 유형으로instance가 아닌ip를 선택해야 해요.awsvpc네트워크 모드를 사용하는 태스크는 Amazon EC2 인스턴스가 아닌 탄력적 네트워크 인터페이스와 연결되기 때문입니다.- 로드 밸런서 서브넷 구성에는 컨테이너 인스턴스가 있는 모든 가용 영역이 포함되어야 해요.
- 서비스를 만든 후에는 AWS Management Console에서 로드 밸런서 구성을 변경할 수 없습니다. AWS Copilot, AWS CloudFormation, AWS CLI 또는 SDK를 사용해 ECS 롤링 배포 컨트롤러(코드디플로이 blue/green이나 external은 제외)의 로드 밸런서 구성을 수정할 수 있어요. 로드 밸런서 구성을 추가, 업데이트 또는 제거하면 Amazon ECS가 업데이트된 Elastic Load Balancing 구성으로 새 배포를 시작합니다. 이로 인해 태스크가 로드 밸런서에 등록되고 등록 해제됩니다. Elastic Load Balancing 구성을 업데이트하기 전에 테스트 환경에서 이를 검증할 것을 권장합니다. 구성 수정 방법은 Amazon Elastic Container Service API Reference의 UpdateService를 참고하세요.
- 서비스 태스크가 로드 밸런서 상태 확인 기준에 실패하면 태스크가 중지되고 다시 시작됩니다. 이 과정은 서비스가 원하는 실행 태스크 수에 도달할 때까지 계속돼요.
- 대상으로 IP 주소를 구성하고 Client IP Preservation이 꺼진 Gateway Load Balancer를 사용하면 요청이 Gateway Load Balancer의 프라이빗 IP 주소에서 온 것처럼 보입니다. 이는 대상 보안 그룹에서 인바운드 요청과 상태 확인을 허용하는 즉시 Gateway Load Balancer 뒤의 서비스가 사실상 외부에 공개된다는 뜻이에요.
- Fargate 태스크에는 플랫폼 버전 1.4.0(Linux) 또는 1.0.0(Windows)을 사용해야 합니다.
- 로드 밸런서가 활성화된 서비스에 문제가 있다면 Amazon ECS의 서비스 로드 밸런서 트러블슈팅(Troubleshooting service load balancers in Amazon ECS)을 참고하세요.
instance대상 유형을 사용할 때는 태스크와 로드 밸런서가 같은 VPC에 있어야 해요.ip대상 유형을 사용할 때는 크로스 VPC 연결이 지원됩니다.- Network Load Balancer 클라이언트 IP 주소 보존은 Fargate 대상과 호환됩니다.
- 각 서비스에 고유한 대상 그룹을 사용하세요. 여러 서비스에 같은 대상 그룹을 사용하면 서비스 배포 중 문제가 발생할 수 있어요.
- Network Load Balancer와 연결된 대상 그룹을 지정해야 합니다. Network Load Balancer를 만드는 방법은 Network Load Balancers의 Network Load Balancer 만들기(Create a Network Load Balancer)를 참고하세요.
중요: 서비스의 태스크 정의가 awsvpc 네트워크 모드를 사용한다면(Fargate에 필요), 대상 유형으로 instance가 아닌 ip를 선택해야 해요. awsvpc 네트워크 모드를 사용하는 태스크는 Amazon EC2 인스턴스가 아닌 탄력적 네트워크 인터페이스와 연결되기 때문입니다. 다음 인스턴스 유형이면 인스턴스 ID로 등록할 수 없습니다: C1, CC1, CC2, CG1, CG2, CR1, G1, G2, HI1, HS1, M1, M2, M3, T1. 이러한 유형의 인스턴스는 IP 주소로 등록할 수 있어요.