AWS LB 에는 클라이언트 IP 보존을 위한 옵션이 있다. 단 이 옵션을 EKS 환경에서 이해없이 사용 시 일부 트래픽이 응답을 받지 못하는 현상이 발생한다. 이에대해 알아보자

 

1) 클라이언트 IP 보존 기능이 비활성화 되었을 때 통신의 흐름
- 기본적으로 클라이언트 IP 보존 기능이 비활성화 되면 NLB 는 출발지의 IP 주소를 NLB 의 내부 IP 주소로 재기록하여 타겟과 통신을 하게 됩니다.(NLB 의 IP로 대상을 찾음)
다만, NLB 의 타겟이 다시 타겟의 NLB 를 재귀적으로 호출 (예> POD -> NLB -> POD) 하는 구조일때, 클라이언트 IP 보존 기능이 활성화 되어 있을 경우 타겟인 POD 는 자신의 IP 주소가 목적지인 패킷을 전달받을 수 있으며 (여러 타겟들이 있을 경우), 이러한 패킷에 대해서는 Timeout 이 발생할 수 있음
따라서 위와 같은 상황에서는 간헐적으로 통신이 실패하는 상황이 발생할 수 있으며, 위와 같은 아키텍처에서는 클라이언트 IP 주소 보존 기능을 비활성화 권장

2) 해당 기능이 활성화 되어있을 때 통신의 흐름 (예> 포트/IP 가 변경되는지 등)
- 기본적으로 해당 기능이 활성화 되어 있을때는 포트, IP 주소가 재기록 되지 않음
- 다만, 헤어핀 (응답 패킷이 타겟에서 NLB 를 거치지 않고 클라이언트로 직접 전달) 기능은 지원하지 않으며, 다시 NLB 를 거쳐 NLB 가 클라이언트에게 직접 응답하도록 구성되어 있습니다.
- 즉, 이러한 경우 응답 패킷이 정상적으로 돌아가지 않는 것은 아니며, 출발지/목적지 IP 주소가 변경되지 않아도 NLB 의 내부동작에 의해 NLB 를 거쳐 클라이언트로 응답 패킷이 반환됨

 

요약하자면, EKS 에서 서비스를 사용할 경우, POD 가 NLB를 통해 POD를 재호출 하는경우 트래픽이 정상적으로 흐르지 않으며, 일부 트래픽에서 TIME OUT 이 발생 한다. 따라서, EKS 에서 서비스를 할 경우에는 SVC 옵션에 어논테이션을 추가하여 Client IP 보존 옵션을 OFF 하도록 하자 (LB 컨트롤러 필요)

 

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/network/load-balancer-target-groups.html#client-ip-preservation

 

Network Load Balancer 대상 그룹 - Elastic Load Balancing

Network Load Balancer 대상 그룹 각 대상 그룹은 하나 이상의 등록된 대상에 요청을 라우팅하는 데 사용됩니다. 리스너를 생성할 때 기본 작업에 대한 대상 그룹을 지정합니다. 트래픽은 리스너 규칙

docs.aws.amazon.com

 

'AWS' 카테고리의 다른 글

AWS 특정 VPC, IP S3 버킷 허용 하는 방법  (0) 2023.07.11
AWS EC2 Instance Metadata(IMDS)  (0) 2023.07.10
EKS Config Update  (0) 2023.07.08
Multi Region Endpoint Sharing  (0) 2023.06.15
AWS EKS efs-csi-driver install  (0) 2023.06.07

AWs NLB 와 ALB 에서는 Source IP 를 확인이 가능하다.

다만 아래와 같은 설정이 필요하기 때문에, 설정에 참고 하도록 하자.

 

ALB : 기본적으로는 Application 서버에서 Source IP로 ALB IP 가 남게 된다. 다만 X-Forwarded-For 설정을 추가 함으로써, Source IP를 남길 수 있다.

 

NLB : NLB는 대상그룹을 설정한 방법에 따라 Suorce IP를 남길 수 있다. 대상그룹에서 Instance ID 를 지정한경우 Source IP는 클라이언트 IP가 남게 된다. 대상 그룹에서 Instance IP를 지정한경우에는 NLB IP가 Source IP로 남게 된다.

 

 

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/x-forwarded-headers.html

 

HTTP 헤더 및 Application Load Balancer - Elastic Load Balancing

클라이언트 포트 보존 속성(routing.http.xff_client_port.enabled)을 활성화하고 routing.http.xff_header_processing.mode 속성에 preserve 또는 remove을(를) 선택할 경우 Application Load Balancer는 클라이언트 포트 보존 속

docs.aws.amazon.com

 

'AWS > ANS' 카테고리의 다른 글

AWS ANS (Network) - DX Type  (0) 2023.06.27
AWS ANS (Network) - DX, VGW, VIF  (0) 2023.06.26
AWS ANS (Network) - DHCP  (0) 2023.06.25
AWS ANS (Network) - Route53 Loging  (0) 2023.06.25
AWS ANS (Network) - BFD  (0) 2023.06.17

AWS EKS 에서 서비스의 형식으로 LB를 사용하는 경우 여러 옵션 값들을 사용 할 수 있다.

 

각 어플리케이션의 인입으로 LB를 사용할 경우 환경에 맞게 세팅 변경이 필요한데 이때 Annotations 를 사용하여 변경하면 된다.

 

대표적으로 LB의 종류, 서브넷 지정, IP 지정 등 다양한 옵션을 아래 문서에서 찾아서 사용 하면 된다.

 

[AWS Annotations 문서]

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/service/annotations/

 

Annotations - AWS Load Balancer Controller

Annotations Service annotations Annotation keys and values can only be strings. All other types below must be string-encoded, for example: boolean: "true" integer: "42" stringList: "s1,s2,s3" stringMap: "k1=v1,k2=v2" json: "{ \"key\": \"value\" }" Annotati

kubernetes-sigs.github.io

 

'AWS' 카테고리의 다른 글

ECR Multi Region Replication  (0) 2023.06.04
EKS 최초 생성 권한 문제  (0) 2023.04.16
EventBridge 를 사용한 알람 발송  (0) 2023.01.20
AWS EKS nodegroup 생성 시 필요 조건  (0) 2023.01.20
AWS Instance Network Bandwidth  (0) 2022.10.30

+ Recent posts