ingress 규칙에 따라 Ingress controller pod가 요청을 패킷으로 전달합니다.
이때, 주소 변환(NAT) 작업이 빈번하게 발생되는 것은 필연적이라고 할 수 있습니다.
아래 다이어그램에서의 빨간 박스 지점이 NAT가 발생하는 지점으로 간단한 구조임에도 두번의 NAT가 발생함을 알 수 있습니다.

위와 같은 이유로 인하여 Ingress controller pod는 Servcie를 사용하여 파드로 트래픽을 라우팅하지 않습니다.
대신 Endpoint API를 사용하요 kube-proxy를 우회하고, 세션 어피니티 및 LB 같은 Nginx의 기능을 제공합니다.
현재 ingress 구성은 아래와 같이, 일반적인 service > pod의 흐름 구조로 되어 있습니다.
이때, 빨간 박스를 살펴보시면, endpoints 가 설정되어 있으며, 이는 Service와 연결된 Pod의 IP입니다.


위 내용을 다이어그램으로 표현하면 아래와 같습니다.
위와 같이 ingress에 endpoints가 지정되어 있다면, Service를 굳이 찍지 않고, ByPass하여 Endpoints인 Nginx Pod로 다이렉트 통신됩니다.

위와 같이 Ingress는 Service의 Endpoints 항목을 가져올 수 있어야하기에, role/cluster role에 대한 rolebinding이 되어 있습니다.
kubectl -n ingress-nginx describe role ingress-nginx | grep endpoints
kubectl describe clusterrole ingress-nginx | grep endpoints
