Elastic Load Balancing
Network Load Balancer

Network Load Balancer 대상 그룹

대상 그룹은 하나 이상의 등록된 대상에 요청을 라우팅하는 데 사용됩니다. 각 리스너 규칙을 생성할 때 대상 그룹 및 조건을 지정합니다. 규칙 조건이 충족되면 해당하는 대상 그룹으로 트래픽이 전달됩니다. 서로 다른 유형의 요청에 대해 서로 다른 대상 그룹을 생성할 수 있습니다. 예를 들어, 일반 요청인 경우 하나의 대상 그룹을 생성하고 애플리케이션에 대한 마이크로 서비스의 요청인 경우 다른 대상 그룹을 생성합니다. 자세한 내용은 Network Load Balancer 구성 요소 섹션을 참조하십시오.

대상 그룹 기준으로 로드 밸런서에 대한 상태 확인 설정을 정의합니다. 대상 그룹을 만들거나 나중에 변경할 때 재정의하지 않는 이상 각 대상 그룹은 기본 상태 확인 설정을 사용합니다. 리스너에 대한 규칙에 대상 그룹을 지정한 후, 로드 밸런서는 해당 로드 밸런서에 대해 활성화된 가용 영역의 대상 그룹에 등록된 모든 대상의 상태를 지속적으로 모니터링합니다. 로드 밸런서는 정상 상태로 등록된 대상으로 요청을 라우팅합니다.

라우팅 구성

기본적으로 로드 밸런서는 대상 그룹을 생성할 때 지정한 프로토콜과 포트 번호를 사용하여 대상으로 요청을 라우팅합니다. 또는 대상 그룹에 등록할 때 대상으로 트래픽을 라우팅하는 데 사용되는 포트를 재정의할 수 있습니다.

Network Load Balancer 대상 그룹은 다음과 같은 프로토콜 및 포트를 지원합니다.

  • 프로토콜: TCP

  • 포트: 1-65535

대상 유형

대상 그룹을 생성할 때는 대상 유형을 지정하며, 이 대상 유형은 해당 대상을 지정하는 방법을 결정합니다. 대상 그룹을 생성한 후에는 대상 유형을 변경할 수 없습니다.

가능한 대상 유형은 다음과 같습니다.

instance

대상이 인스턴스 ID에 의해 지정됩니다.

ip

대상이 IP 주소에 의해 지정됩니다.

대상 유형이 ip인 경우, 다음 CIDR 블록 중 하나에서 IP 주소를 지정할 수 있습니다.

  • 대상 그룹에 대한 VPC의 서브넷

  • 10.0.0.0/8(RFC 1918)

  • 100.64.0.0/10(RFC 6598)

  • 172.16.0.0/12(RFC 1918)

  • 192.168.0.0/16(RFC 1918)

중요

공개적으로 라우팅 가능한 IP 주소는 지정할 수 없습니다.

지원되는 이러한 CIDR 블록을 사용하여 ClassicLink 인스턴스, IP 주소 및 포트로 주소를 지정할 수 있는 AWS 리소스(예: 데이터베이스), AWS Direct Connect 또는 소프트웨어 VPN 연결을 통해 AWS에 연결되는 온프레미스 리소스를 대상 그룹에 등록할 수 있습니다.

대상 유형이 ip인 경우, 로드 밸런서는 각각의 고유 대상(IP 주소 및 포트)에 대해 55,000건의 동시 연결 또는 분당 약 55,000건의 연결을 지원할 수 있습니다. 연결 건수가 이보다 더 많을 경우, 포트 할당 오류가 발생할 가능성이 증가합니다. 포트 할당 오류가 발생할 경우, 대상 그룹에 더 많은 대상들을 추가하십시오.

Network Load Balancer는 lambda 대상 유형을 지원하지 않으며 Application Load Balancer만 lambda 대상 유형을 지원합니다. 자세한 내용은 Application Load Balancer 사용 설명서대상으로서 Lambda 함수를 참조하십시오.

라우팅 및 IP 주소 요청

인스턴스 ID를 사용하여 대상을 지정하면 해당 인스턴스의 기본 네트워크 인터페이스에 지정된 기본 프라이빗 IP 주소를 사용하여 트래픽이 인스턴스로 라우팅됩니다. IP 주소를 사용하여 대상을 지정하면 하나 이상의 네트워크 인터페이스에서 프라이빗 IP 주소를 사용하여 트래픽을 인스턴스로 라우팅할 수 있습니다. 그러면 한 인스턴스의 여러 애플리케이션이 동일한 포트를 사용할 수 있습니다. 각 네트워크 인터페이스에는 자체 보안 그룹이 있을 수 있습니다.

원본 IP 보존

인스턴스 ID를 사용하여 대상을 지정하는 경우 클라이언트의 원본 IP 주소가 보존되고 애플리케이션에 제공됩니다.

IP 주소로 대상을 지정하는 경우 원본 IP 주소는 로드 밸런서 노드의 프라이빗 IP 주소입니다. 클라이언트의 IP 주소가 필요한 경우, 프록시 프로토콜을 활성화하고 프록시 프로토콜 헤더에서 클라이언트 IP 주소를 가져옵니다.

Network Load Balancer에 등록된 인스턴스에 마이크로 서비스가 있는 경우, 로드 밸런서가 인터넷 경계이거나 인스턴스가 IP 주소로 등록되지 않은 한 로드 밸런서를 사용하여 이들 간의 통신을 제공할 수 없습니다. 자세한 내용은 대상에서 로드 밸런서로의 요청에서 연결 시간이 초과됨 섹션을 참조하십시오.

등록된 대상

로드 밸런서는 클라이언트에 대해 단일 접점의 역할을 하며 정상적으로 등록된 대상 간에 수신 트래픽을 자동으로 분산합니다. 각 대상 그룹에는 로드 밸런서에 사용되는 각 가용 영역에 하나 이상의 등록된 대상이 있어야 합니다. 하나 이상의 대상 그룹에 각 대상을 등록할 수 있습니다. 서로 다른 포트를 사용하여 각 EC2 인스턴스 또는 IP 주소를 동일한 대상 그룹에 여러 번 등록할 수 있으며, 이를 통해 로드 밸런서는 요청을 마이크로서비스로 라우팅할 수 있습니다.

애플리케이션에 대한 요구가 증가하면 이를 처리하기 위해 하나 이상의 대상 그룹에 추가 대상을 등록할 수 있습니다. 등록 과정이 완료되는 즉시, 로드 밸런서는 새로 등록된 대상으로 트래픽을 라우팅하기 시작합니다.

애플리케이션에 대한 요구가 감소하거나 대상을 서비스해야 하는 경우에는 대상 그룹에서 대상 등록을 취소할 수 있습니다. 대상을 등록 취소하면 대상 그룹에서 제거되지만 대상에 영향을 미치지는 않습니다. 등록이 취소되는 즉시 로드 밸런서는 대상으로 트래픽을 라우팅하는 것을 중지합니다. 진행 중인 요청이 완료될 때까지 해당 대상은 draining 상태를 유지합니다. 트래픽 수신을 다시 시작할 준비가 되면 대상 그룹에 대상을 다시 등록할 수 있습니다.

인스턴스 ID로 대상을 등록하는 경우 Auto Scaling 그룹에 로드 밸런서를 사용할 수 있습니다. Auto Scaling 그룹에 대상 그룹을 연결하면 Auto Scaling는 대상을 시작할 때 대상 그룹에 해당 대상을 등록합니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서에서 Auto Scaling 그룹에 로드 밸런서 연결을 참조하십시오.

제한 사항

  • C1, CC1, CC2, CG1, CG2, CR1, G1, G2, HI1, HS1, M1, M2, M3, T1 인스턴스 유형인 경우 인스턴스 ID로 인스턴스를 등록할 수 없습니다. 이러한 인스턴스 유형은 IP 주소로 등록할 수 있습니다.

  • 인스턴스 ID를 통해 피어링된 VPC에 인스턴스를 등록할 수 없으므로 IP 주소를 통해 인스턴스를 등록해야 합니다.

대상 그룹 속성

다음은 대상 그룹의 속성입니다.

deregistration_delay.timeout_seconds

등록 취소된 대상의 상태를 draining에서 unused로 변경하기 전에 Elastic Load Balancing가 대기하는 시간입니다. 범위는 0~3600초입니다. 기본 값은 300초입니다.

proxy_protocol_v2.enabled

프록시 프로토콜 버전 2의 활성화 여부를 나타냅니다. 기본값으로 프록시 프로토콜은 비활성화됩니다.

등록 취소 지연

Elastic Load Balancing는 등록 취소 중인 인스턴스로 요청을 전송하는 것을 중지합니다. 연결 드레이닝은 기존 연결이 닫히기 전에 진행 중인 요청이 완료되도록 합니다. 등록을 취소하는 대상의 초기 상태는 draining입니다. 기본적으로 등록 취소된 대상의 상태는 300초 후 unused로 변경됩니다. unused로 상태를 변경하기 전에 Elastic Load Balancing가 대기하는 시간을 변경하려면 등록 취소 지연 값을 업데이트합니다. 요청이 완료될 수 있도록 120초 이상의 값을 지정하는 것이 좋습니다.

콘솔을 사용하여 등록 취소 지연 값을 업데이트하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창의 [LOAD BALANCING] 아래에서 [Target Groups]를 선택합니다.

  3. 대상 그룹을 선택합니다.

  4. [Description], [Edit attributes]를 선택합니다.

  5. 필요에 따라 [Deregistration delay] 값을 변경한 후 [Save]를 선택합니다.

AWS CLI를 사용하여 등록 취소 지연 값을 업데이트하려면

modify-target-group-attributes 명령을 사용합니다.

프록시 프로토콜

Network Load Balancer는 프록시 프로토콜 버전 2를 사용하여 원본 및 대상과 같은 추가 연결 정보를 보냅니다. 프록시 프로토콜 버전 2는 프록시 프로토콜 헤더의 이진 인코딩을 제공합니다. 로드 밸런서는 TCP 데이터에 프록시 프로토콜 헤더를 추가합니다. 로드 밸런서는 클라이언트에서 전송한 모든 프록시 프로토콜 헤더 또는 네트워크 경로에 있는 그 밖의 모든 프록시, 로드 밸런서 또는 서버를 포함해 기존 데이터를 폐기하거나 덮어쓰지 않습니다. 따라서 하나 이상의 프록시 프로토콜 헤더를 수신할 수 있습니다. 또한 Network Load Balancer 외부의 대상에 대한 다른 네트워크 경로가 있을 경우, 첫 번째 프록시 프로토콜 헤더는 Network Load Balancer의 헤더가 아닐 수도 있습니다.

IP 주소로 대상을 지정하는 경우 애플리케이션에 제공된 원본 IP 주소는 로드 밸런서 노드의 프라이빗 IP 주소입니다. 애플리케이션이 클라이언트의 IP 주소가 필요한 경우 로드 밸런서의 프록시 프로토콜을 활성화하고 프록시 프로토콜 헤더에서 클라이언트 IP 주소를 가져옵니다.

인스턴스 ID로 대상을 지정하는 경우 애플리케이션에 제공되는 원본 IP 주소는 클라이언트 IP 주소입니다. 하지만 원하는 경우 로드 밸런서의 프록시 프로토콜을 활성화하고 프록시 프로토콜 헤더에서 클라이언트 IP 주소를 가져옵니다.

상태 확인 연결

프록시 프로토콜을 활성화한 이후 프록시 프로토콜 헤더는 또한 로드 밸런서의 상태 확인 연결에 포함됩니다. 하지만 상태 확인 연결을 통해 클라이언트 연결 정보는 프록시 프로토콜 헤더에 전송되지 않습니다.

VPC 엔드포인트 서비스

서비스 소비자에서 VPC 엔드포인트 서비스를 통해 오는 트래픽의 경우 애플리케이션에 제공된 원본 IP 주소는 로드 밸런서 노드의 프라이빗 IP 주소입니다. 애플리케이션이 서비스 소비자의 IP 주소가 필요한 경우 프록시 프로토콜을 활성화하고 프록시 프로토콜 헤더에서 이를 가져옵니다.

프록시 프로토콜 헤더에는 또한 엔드포인트의 ID가 포함됩니다. 이 정보는 다음과 같은 사용자 지정 TLV(유형-길이-값) 벡터를 사용하여 인코딩됩니다.

필드 길이(자리) 설명

형식

1

PP2_TYPE_AWS(0xEA)

길이

2

값의 길이

1

PP2_SUBTYPE_AWS_VPCE_ID(0x01)

변수(값 길이 -1) 엔드포인트의 ID

TLV 유형 0xEA를 구문 분석하는 예는 https://github.com/aws/elastic-load-balancing-tools/tree/master/proprot를 참조하십시오.

프록시 프로토콜 활성화

대상 그룹에 프록시 프로토콜을 활성화하기 전에 애플리케이션이 프록시 프로토콜 v2 헤더를 분석할 수 있도록 해야 합니다. 그렇지 않은 경우 실패할 수 있습니다. 자세한 내용은 프록시 프로토콜 버전 1 및 2를 참조하십시오.

콘솔을 사용하여 프록시 프로토콜을 활성화하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창의 [LOAD BALANCING] 아래에서 [Target Groups]를 선택합니다.

  3. 대상 그룹을 선택합니다.

  4. [Description], [Edit attributes]를 선택합니다.

  5. [Enable proxy protocol v2]를 선택한 다음 [Save]를 선택합니다.

AWS CLI를 프록시 프로토콜을 활성화하려면

modify-target-group-attributes 명령을 사용합니다.