Java/Spring 개발자를 위한 Kubernetes 외부 트래픽 처리 구조

Spring Boot 애플리케이션을 Kubernetes에서 운영할 때 중요한 요소 중 하나는 외부 트래픽을 어떻게 전달할 것인가입니다.

로컬 환경에서는 다음과 같이 서버 포트로 직접 접근할 수 있습니다.

 
http://localhost:8080
 

하지만 Kubernetes 환경에서는 애플리케이션이 Pod 형태로 여러 개 실행되기 때문에 외부 트래픽을 관리하는 구조가 필요합니다.

이 역할을 하는 것이 Service와 Ingress입니다.


1. Kubernetes 네트워크 구조

Spring Boot 애플리케이션이 Kubernetes에서 실행되는 기본 구조는 다음과 같습니다.

 
Client

Service

Pod
Pod
Pod
 

Pod는 Kubernetes에서 애플리케이션이 실행되는 단위입니다.

하지만 Pod는 IP가 동적으로 변경될 수 있기 때문에 외부에서 직접 접근하기 어렵습니다.

그래서 Service가 필요합니다.


2. Kubernetes Service 역할

Service는 여러 Pod 앞에서 로드밸런서 역할을 합니다.

구조

 
Client

Service

Pod1
Pod2
Pod3
 

Service 예시

 
apiVersion: v1
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 서비스로 전달하는 리소스입니다.

구조

 
Internet

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입니다.

구조

 
Internet

NGINX Ingress Controller

Service

Pod
 

5. Spring Boot Ingress 설정 예시

Spring Boot 애플리케이션을 Ingress로 연결하는 예시입니다.

 
apiVersion: networking.k8s.io/v1
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/users → user-service
example.com/orders → order-service
 

이 방식은 마이크로서비스 환경에서 많이 사용됩니다.


7. HTTPS 설정

Ingress에서는 SSL 설정도 가능합니다.

 
tls:
- hosts:
- api.example.com
secretName: tls-secret
 

구조

 
Client HTTPS

Ingress (SSL Termination)

Service

Pod
 

SSL 처리는 Ingress Controller가 담당합니다.


8. Kubernetes 트래픽 관리 전체 구조

Spring Boot 애플리케이션 트래픽 흐름

 
Internet

DNS

Ingress Controller

Kubernetes Service

Spring Boot Pod
 

이 구조를 통해

  • 트래픽 라우팅
  • 로드 밸런싱
  • SSL 처리

가 가능합니다.


9. 실제 운영 환경 아키텍처

Spring Boot 애플리케이션 Kubernetes 운영 구조

 
Client

Load Balancer

Ingress Controller

Service

Pod
└ Spring Boot Application
 

이 구조는 Kubernetes 기반 웹 서비스의 표준 아키텍처입니다.


결론

Kubernetes에서 Spring Boot 애플리케이션을 운영할 때 Ingress는 외부 트래픽을 관리하는 핵심 구성 요소입니다.

Ingress를 사용하면 다음과 같은 기능을 구현할 수 있습니다.

  • 외부 트래픽 라우팅
  • 도메인 기반 접근
  • SSL 처리
  • 서비스 분리

Java/Spring 개발자가 Ingress 구조를 이해하면 Kubernetes 환경에서 웹 서비스 트래픽 흐름을 명확하게 이해할 수 있습니다.

LIST

+ Recent posts