Ingress, LoadBalancer, NodePort, ClusterIP 의 차이점
0. ClusterIP
- 클러스터 내부에서만 Pod에 접근이 가능한 type
- 쿠버네티스는 내부 서비스 DNS 가지기 때문에 이 클러스터 IP를 통해서 서로 통신이 가능
1. NodePort
- 서비스를 이용해서 포트를 외부에 노출함
- 외부 트래픽을 직접 보내는 방식
- 모든 노드에 특정 포트를 개방해서 서비스에 접근하는 방식
2. LoadBalancer
- 로드밸런서 타입은 노드포트와 다르게 특정 포트가 아니라 클라우드 플랫폼으로 부터 IP를 할당 받기 때문에 쉽게 서비스 에 접근 가능
- L4 계층에서 작동함
- IP, Port 기준으로 스케줄링 알고리즘을 통해 부하 분산
- 다만 온프레미스 환경에서는 MetalLB를 통해 직접 구축해야함
- NodePort는 각 노드의 IP와 포트를 알아야 하지만 로드밸런서는 클라우드 플랫폼으로 부터 할당받은 IP를 통해서 서비스,Pod에 접근이 가능하다.
3. Ingress
- 로드밸런서와 노드포트 방식을 합친방식
- L7계층에서 작동함
- IP, Port 이외에도 URI, PayLoad, Http Header, Cookie 등 기준으로 부하를 분산
- 그래서 콘텐츠 기반 스위칭이라고 부름
- L4 계층과 다르게 데이터를 분석해서 처리가 가능
- 악의적이거나 비정상적 컨텐츠 감지해서 보안 지점 구축 장점 있음
- 자원 소모가 크다.
- Ingress는 외부에서 서비스로 접속 가능한 URL을 입력받아서 정해진 인그레스 규칙에 따라 서비스로 라우팅 해주는 특징을 가집니다.
- 인그레스를 사용하지 않으면 각각의 서비스들을 외부로 노출시키는 작업(전송계층, Layer4., TCP,UDP)을 해야한다.
- 인그레스를 사용하면 Layer 7인 응용 계층에서 처리 가능
- 요청에 대한 특정 HTTP 경로의 라우팅, 로드밸런싱, TLS/SSL 인증서 처리 등 인그레스 규칙을 자세하게 정의할 수 있다.
- NodePort, LoadBalancer로도 구현이 가능하지만 세부적인 로직을 모두 각각 구현하게 되면 운영 측면에서 복잡성이 증가되는 단점 존재