Study_note
Ingress의 Target Type 및 externalTrafficPolicy: Local 설정 본문
쿠버네티스 내부 통신은 트래픽이 들어올때 iptables를 거치면서 snat/dnat 되어 client ip를 할당 받지 못한다
이런 경우 client ip를 할당 받으려면 2가지 방법이 있다.
1. 서비스 타입을 nodeport 또는 loadbalancer로 사용할 때 externalTrafficPolicy: Local를 통해 파드로 직접 통신
2. Ingress를 사용할때 Target Type을 instance가 아닌 ip로 사용
우선 1에서 서비스를 loadbalancer를 사용한다 가정 하고 externalTrafficPolicy: Local 유무에 대한 트래픽을 보면 아래와 같다.
예를들어 2개의 컨트롤러가 있는 3개의 노드를 타겟으로 잡으며 externalTrafficPolicy: Local 설정이 포함한 nlb를 생성했을때 아래와 같이 컨트롤러가 없는 노드에서는 unhealthy가 발생됩니다.
로드벨런서는 우선 트래픽을 보내기전에 헬스체크를 하기 때문에 컨트롤러가 없어 unhealthy가 발생한 노드에는 트래픽을 보내지 않고 컨트롤러가 있는 노드에만 트래픽을 전송합니다.
하지만 서비스를 nodeport로 사용하는 경우 헬스체크 기능이 없기 때문에 만약 아래와 같이 파드가 없는 노드로 트래픽을 전달할 시 패킷이 손실될 수 있다.
(참고로 서비스를 사용하여 nlb 생성 시 아래 처럼 nlb 명시 해야지 안하면 clb로 생성됨 주의! )
2. ingress target type에 따른 ip 변화
우선 target type이 instance일때
아래 캡쳐와 같이 타겟 포트는 파드의 연결한 서비스의 노드포트가 되고 타겟 또한 파드의 ip가 아닌 인스턴스 id로 지정된것을 확인 할 수 있다
다음으로는 우선 target type이 ip일 때다
ip일 경우 아래 캡쳐와 같이 파드의 ip와 파드에 지정한 포트로 타겟 포트가 열려있는것을 확인 할 수 있다.
즉 ingress target type -> ip는 파드로 직접 통신
ingress target type -> instance는 노드로 진입 후 iptables을 거쳐 파드로 통신
참고
https://zigispace.net/1174?category=774237
'Kubernetes' 카테고리의 다른 글
[kubernetes] karpenter vs ca (0) | 2022.11.10 |
---|---|
[EKS] POD 자원관리 (QoS) 및 OOM 킬러 우선 순위 (0) | 2022.11.08 |
AWS EKS Load Balancer Controller 및 IAM OIDC Provider (0) | 2022.10.27 |
[Kubernetes] CKA 취득 후기 (0) | 2022.09.05 |
[Kubernetes] object, namespace, pod, lable 개념 정리 (0) | 2021.11.23 |