내부 통신과 외부 트래픽은 어떻게 나뉘는가
Kubernetes에서 애플리케이션을 배포하면 반드시 Service와 Ingress를 접하게 된다. 두 리소스 모두 트래픽을 전달하는 역할을 하지만, 목적과 사용 위치는 명확히 다르다. 이 글에서는 Kubernetes Service와 Ingress의 역할 차이를 중심으로, 각각 언제 사용해야 하는지 정리한다.
Kubernetes Service의 역할
Service는 Pod 집합에 대한 안정적인 접근 지점을 제공하는 리소스다.
Pod는 언제든지 재생성될 수 있고 IP가 변경되기 때문에, Pod에 직접 접근하는 방식은 적합하지 않다.
Service의 주요 역할은 다음과 같다.
- Pod IP 변경과 무관한 고정 엔드포인트 제공
- 여러 Pod에 대한 로드밸런싱
- 서비스 간 내부 통신 표준화
Service는 기본적으로 클러스터 내부 통신을 책임진다.
Kubernetes Ingress의 역할
Ingress는 외부에서 들어오는 HTTP/HTTPS 트래픽을 내부 Service로 전달하기 위한 규칙을 정의한다.
Ingress 자체는 트래픽을 처리하지 않으며, 실제 처리는 Ingress Controller가 수행한다.
Ingress의 주요 역할은 다음과 같다.
- 외부 트래픽의 진입 지점 제공
- 도메인 및 경로 기반 라우팅
- TLS(HTTPS) 종료 지점 제공
Ingress는 외부 요청을 클러스터 내부로 연결하는 역할을 한다.
Service와 Ingress의 근본적인 차이
두 리소스의 가장 큰 차이는 트래픽이 들어오는 위치다.
- Service
- 클러스터 내부 기준
- Pod 앞단의 접근 지점
- Ingress
- 클러스터 외부 기준
- 외부 트래픽의 진입 지점
Ingress는 Service 위에서 동작하며, Pod를 직접 대상으로 삼지 않는다.
트래픽 흐름으로 보는 차이
실제 트래픽 흐름은 다음과 같다.
- 외부 사용자 → Ingress → Service → Pod
- 내부 서비스 → Service → Pod
Ingress는 외부 요청에만 관여하며, 내부 통신은 Service만으로 충분하다.
왜 Service와 Ingress를 분리했는가
Kubernetes는 네트워크 역할을 명확히 분리했다.
- Service는 연결 안정성과 로드밸런싱 담당
- Ingress는 라우팅 정책과 외부 노출 담당
이 분리를 통해 각 역할을 단순화하고, 확장성과 운영성을 확보한다.
Service만으로 충분한 경우
다음과 같은 경우에는 Ingress 없이 Service만 사용해도 된다.
- 내부 서비스 간 통신
- 배치 작업이나 백그라운드 서비스
- 외부 노출이 필요 없는 시스템
이 경우 대부분 ClusterIP Service를 사용한다.
Ingress가 필요한 경우
다음과 같은 경우에는 Ingress가 필요하다.
- 외부 사용자가 접근하는 웹 서비스
- 여러 서비스를 하나의 도메인으로 운영
- URL 경로 기반 라우팅이 필요한 경우
- HTTPS 인증서를 중앙에서 관리하고 싶은 경우
Ingress는 외부 트래픽 관리에 최적화된 구조다.
Service 타입과 Ingress의 관계
Ingress는 일반적으로 ClusterIP Service와 함께 사용된다.
- Service는 내부 접근용
- Ingress는 외부 접근용
NodePort나 LoadBalancer Service를 직접 사용하는 방식보다 Ingress를 사용하는 것이 운영과 비용 측면에서 유리한 경우가 많다.
자주 발생하는 오해
다음과 같은 오해가 자주 발생한다.
- Ingress가 Pod로 직접 트래픽을 보낸다
- Service와 Ingress는 대체 관계다
- Ingress만 있으면 Service가 필요 없다
Ingress와 Service는 대체 관계가 아니라 보완 관계다.
언제 무엇을 선택해야 하는가
선택 기준을 단순화하면 다음과 같다.
- Pod에 안정적으로 접근해야 하는가 → Service
- 외부에서 HTTP/HTTPS로 접근해야 하는가 → Ingress
이 기준을 바탕으로 네트워크 구조를 설계하면 된다.
정리
Kubernetes Service와 Ingress는 서로 다른 문제를 해결하는 리소스다. Service는 Pod 앞단의 안정적인 접근 지점 역할을 하고, Ingress는 외부 트래픽을 내부 Service로 라우팅한다. 두 리소스의 역할 차이를 이해하면 Kubernetes 네트워크 구조를 훨씬 명확하게 설계할 수 있다.