Java/Spring 개발자를 위한 Kubernetes 외부 트래픽 처리 구조
Spring Boot 애플리케이션을 Kubernetes에서 운영할 때 중요한 요소 중 하나는 외부 트래픽을 어떻게 전달할 것인가입니다.
로컬 환경에서는 다음과 같이 서버 포트로 직접 접근할 수 있습니다.
하지만 Kubernetes 환경에서는 애플리케이션이 Pod 형태로 여러 개 실행되기 때문에 외부 트래픽을 관리하는 구조가 필요합니다.
이 역할을 하는 것이 Service와 Ingress입니다.
1. Kubernetes 네트워크 구조
Spring Boot 애플리케이션이 Kubernetes에서 실행되는 기본 구조는 다음과 같습니다.
↓
Service
↓
Pod
Pod
Pod
Pod는 Kubernetes에서 애플리케이션이 실행되는 단위입니다.
하지만 Pod는 IP가 동적으로 변경될 수 있기 때문에 외부에서 직접 접근하기 어렵습니다.
그래서 Service가 필요합니다.
2. Kubernetes Service 역할
Service는 여러 Pod 앞에서 로드밸런서 역할을 합니다.
구조
↓
Service
↓
Pod1
Pod2
Pod3
Service 예시
kind: Service
metadata:
name: spring-service
spec:
selector:
app: spring-app
ports:
- port: 80
targetPort: 8080
type: ClusterIP
이 설정은
- Service 포트 80
- Pod 포트 8080
으로 트래픽을 전달합니다.
하지만 ClusterIP Service는 클러스터 내부에서만 접근 가능합니다.
외부에서 접근하려면 Ingress가 필요합니다.
3. Ingress란 무엇인가
Ingress는 외부 HTTP/HTTPS 트래픽을 Kubernetes 서비스로 전달하는 리소스입니다.
구조
↓
Ingress
↓
Service
↓
Pod
Ingress는 다음 기능을 제공합니다.
- URL 기반 라우팅
- 도메인 기반 라우팅
- SSL 종료
- 트래픽 관리
즉 Kubernetes에서 웹 서버 또는 API Gateway 역할을 합니다.
4. Ingress Controller
Ingress 리소스는 실제로 트래픽을 처리하지 않습니다.
트래픽을 처리하는 것은 Ingress Controller입니다.
대표적인 Ingress Controller
- NGINX Ingress
- Traefik
- HAProxy
- Istio Gateway
가장 많이 사용되는 것은 NGINX Ingress Controller입니다.
구조
↓
NGINX Ingress Controller
↓
Service
↓
Pod
5. Spring Boot Ingress 설정 예시
Spring Boot 애플리케이션을 Ingress로 연결하는 예시입니다.
kind: Ingress
metadata:
name: spring-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spring-service
port:
number: 80
이 설정은 다음 의미를 가집니다.
- api.example.com 요청
- spring-service로 전달
- Pod로 트래픽 전달
6. URL 기반 라우팅
Ingress는 URL 경로 기반 라우팅도 지원합니다.
예
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: user-service
port:
number: 80
- path: /orders
pathType: Prefix
backend:
service:
name: order-service
port:
number: 80
구조
example.com/orders → order-service
이 방식은 마이크로서비스 환경에서 많이 사용됩니다.
7. HTTPS 설정
Ingress에서는 SSL 설정도 가능합니다.
예
- hosts:
- api.example.com
secretName: tls-secret
구조
↓
Ingress (SSL Termination)
↓
Service
↓
Pod
SSL 처리는 Ingress Controller가 담당합니다.
8. Kubernetes 트래픽 관리 전체 구조
Spring Boot 애플리케이션 트래픽 흐름
↓
DNS
↓
Ingress Controller
↓
Kubernetes Service
↓
Spring Boot Pod
이 구조를 통해
- 트래픽 라우팅
- 로드 밸런싱
- SSL 처리
가 가능합니다.
9. 실제 운영 환경 아키텍처
Spring Boot 애플리케이션 Kubernetes 운영 구조
↓
Load Balancer
↓
Ingress Controller
↓
Service
↓
Pod
└ Spring Boot Application
이 구조는 Kubernetes 기반 웹 서비스의 표준 아키텍처입니다.
결론
Kubernetes에서 Spring Boot 애플리케이션을 운영할 때 Ingress는 외부 트래픽을 관리하는 핵심 구성 요소입니다.
Ingress를 사용하면 다음과 같은 기능을 구현할 수 있습니다.
- 외부 트래픽 라우팅
- 도메인 기반 접근
- SSL 처리
- 서비스 분리
Java/Spring 개발자가 Ingress 구조를 이해하면 Kubernetes 환경에서 웹 서비스 트래픽 흐름을 명확하게 이해할 수 있습니다.
'Spring & Backend' 카테고리의 다른 글
| 백엔드 개발자가 가장 깔끔하게 쓰는 Git 전략 (0) | 2026.03.05 |
|---|---|
| Spring Boot 애플리케이션을 Kubernetes에서 운영할 때 생기는 문제 (0) | 2026.03.05 |
| Kubernetes에서 Spring Boot ConfigMap과 Secret 관리 (0) | 2026.03.05 |
| Spring Boot + Docker + Kubernetes 배포 구조 (0) | 2026.03.05 |
| 레거시 Java(Spring4, Java8) 시스템은 Kubernetes에서 잘 동작할까? (0) | 2026.03.05 |
