외부 트래픽은 어떻게 Pod까지 전달되는가
Kubernetes에서 Service를 사용하면 Pod에 안정적으로 접근할 수 있다. 그러나 외부 트래픽을 클러스터 내부의 여러 서비스로 라우팅하려면 추가적인 계층이 필요하다. Kubernetes는 이를 위해 Ingress라는 리소스를 제공한다. 이 글에서는 Kubernetes Ingress의 기본 개념과 역할을 중심으로 정리한다.
Kubernetes Ingress란 무엇인가
Ingress는 외부에서 들어오는 HTTP/HTTPS 트래픽을 클러스터 내부 Service로 라우팅하기 위한 규칙 집합이다.
Ingress 자체가 트래픽을 처리하는 컴포넌트는 아니며, 라우팅 규칙을 선언적으로 정의하는 리소스다.
Ingress의 핵심 역할은 다음과 같다.
- 외부 요청을 내부 Service로 전달
- URL 경로 또는 도메인 기반 라우팅
- TLS(HTTPS) 종료 지점 제공
즉, Ingress는 “어디로 보낼지”를 정의하는 설정이다.
Ingress Controller의 역할
Ingress 리소스는 단독으로 동작하지 않는다.
실제 트래픽을 처리하는 주체는 Ingress Controller다.
Ingress Controller의 역할은 다음과 같다.
- Ingress 리소스 감시
- 라우팅 규칙 적용
- 외부 트래픽 수신 및 전달
대표적인 Ingress Controller는 다음과 같다.
- NGINX Ingress Controller
- Traefik
- HAProxy
- Cloud Provider Ingress
Ingress Controller는 보통 Deployment 형태로 클러스터에 배포된다.
Service와 Ingress의 차이
Service와 Ingress는 역할이 다르다.
- Service
- Pod 집합에 대한 내부 접근 지점
- L4/L7 트래픽 분산
- Ingress
- 외부 트래픽 진입 지점
- L7(HTTP/HTTPS) 라우팅
Ingress는 Service 위에서 동작하며, 직접 Pod를 대상으로 하지 않는다.
Ingress가 필요한 이유
Ingress가 없으면 외부 트래픽을 서비스로 노출하기 위해 다음과 같은 방식이 필요하다.
- Service를 LoadBalancer 타입으로 생성
- 서비스마다 외부 IP 할당
이 방식은 다음 문제를 가진다.
- 서비스 수만큼 로드밸런서 필요
- 비용 증가
- 라우팅 규칙 관리 어려움
Ingress는 하나의 진입점으로 여러 서비스를 효율적으로 노출할 수 있게 한다.
Ingress의 기본 동작 흐름
외부 트래픽이 Pod까지 전달되는 흐름은 다음과 같다.
- 외부 클라이언트 요청 발생
- Ingress Controller가 트래픽 수신
- Ingress 규칙에 따라 Service 선택
- Service가 Pod로 트래픽 전달
Ingress는 트래픽의 첫 진입점 역할을 수행한다.
Ingress에서 지원하는 라우팅 방식
Ingress는 다양한 라우팅 방식을 지원한다.
- 도메인 기반 라우팅
- 경로 기반 라우팅
- 헤더 기반 라우팅
이를 통해 하나의 엔드포인트에서 여러 서비스를 운영할 수 있다.
TLS 처리 방식
Ingress는 TLS 설정을 통해 HTTPS를 처리할 수 있다.
- 인증서 Secret 참조
- HTTPS 종료 지점 제공
- 내부 트래픽은 HTTP 유지 가능
이를 통해 애플리케이션은 TLS 처리 부담 없이 서비스 로직에 집중할 수 있다.
Ingress와 Deployment의 관계
Ingress는 Deployment와 직접적인 관계는 없다.
Ingress는 Service를 대상으로 라우팅을 수행하고, Service가 Pod를 관리한다.
역할 분리는 다음과 같다.
- Deployment: Pod 생성과 유지
- Service: Pod 접근 지점 제공
- Ingress: 외부 트래픽 라우팅
이 구조가 Kubernetes 네트워크 계층을 구성한다.
Ingress 사용 시 자주 발생하는 문제
다음과 같은 문제가 자주 발생한다.
- Ingress Controller 미설치
- Service 타입과 Ingress 설정 불일치
- TLS 인증서 설정 오류
- 경로 규칙 충돌
Ingress 리소스만 작성하고 Controller를 설치하지 않으면 트래픽은 전달되지 않는다.
어떤 경우에 Ingress 이해가 중요한가
Ingress 개념은 다음 상황에서 필수다.
- 외부 트래픽을 받는 서비스 운영
- 다수의 서비스를 하나의 도메인으로 운영
- HTTPS 종료 지점 통합 관리
- MSA 기반 웹 서비스 구조
Ingress는 Kubernetes 외부 통신 구조의 핵심이다.
정리
Kubernetes Ingress는 외부 트래픽을 내부 Service로 전달하기 위한 라우팅 규칙을 정의하는 리소스다. 실제 트래픽 처리는 Ingress Controller가 담당하며, Ingress는 선언적인 설정 역할을 한다. Service와 Ingress의 역할 차이를 이해하면 Kubernetes 네트워크 흐름을 명확하게 파악할 수 있다.