Ingress는 클러스터 외부에서 내부 서비스로 들어오는 HTTP/HTTPS 트래픽을 관리하는 Kubernetes 리소스이다. Ingress를 사용하면 특정 도메인이나 경로에 따라 요청을 적절한 서비스로 라우팅할 수 있다. Ingress는 자체적으로 동작하지 않으며, 반드시 Ingress Controller(Nginx Ingress Controller, Traefik, HAProxy 등)가 필요하다.
Ingress는 L7(Application Layer, 애플리케이션 계층)에서 동작하며, 주로 다음과 같은 기능을 제공한다.
API Gateway는 Ingress와 비슷한 역할을 하지만, API 관리 기능이 추가된 서비스이다. API Gateway는 단순한 트래픽 라우팅을 넘어 인증/인가, 로깅, 속도 제한(Rate Limiting), 캐싱 등의 기능을 제공한다. Kubernetes에서 API Gateway로 사용되는 대표적인 도구는 Istio, Kong, Ambassador, AWS API Gateway 등이 있다.
API Gateway는 L7(Application Layer, 애플리케이션 계층)에서 동작하며, 종종 서비스 메시(Service Mesh)와 함께 사용된다. API Gateway의 주요 기능은 다음과 같다.
Service는 Kubernetes 내에서 Pod들을 추상화하여 네트워크 서비스를 제공하는 리소스이다. Pod는 동적으로 생성되며, IP 주소가 변경될 수 있기 때문에 안정적인 네트워크 접근을 위해 Service가 필요하다.
Service는 L4(Transport Layer, 전송 계층)에서 동작하며, 다음과 같은 타입이 존재한다.
Service는 내부적으로 Pod 간의 로드 밸런싱을 수행하며, 트래픽을 적절한 Pod으로 분배하는 역할을 한다.
1️⃣ 클라이언트 요청
사용자가 https://example.com/api/v1/users 와 같은 요청을 보낸다.
2️⃣ Ingress 또는 API Gateway 처리
Ingress가 요청을 받아서 특정 서비스로 라우팅한다. API Gateway가 존재하는 경우, API Gateway가 먼저 인증, 로깅, 속도 제한 등의 기능을 수행한 후 Ingress로 요청을 전달할 수도 있다.
3️⃣ Service로 요청 전달
Ingress에서 받은 요청을 내부의 특정 Kubernetes Service로 전달한다. 예를 들어, /api/v1/users 요청이 들어오면 users-service로 요청을 전달할 수 있다.
4️⃣ Pod으로 요청 전달
Service가 내부적으로 트래픽을 관리하는 Pod으로 요청을 전달한다. Kubernetes는 Service를 통해 여러 개의 Pod으로 로드 밸런싱을 수행한다.
5️⃣ 응답 반환
요청을 처리한 Pod이 응답을 보낸다. 이 응답은 다음과 같은 흐름으로 전달된다.
다음은 Kubernetes에서 Nginx Ingress를 사용하여 특정 서비스로 트래픽을 라우팅하는 설정 예제이다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /api/v1/users
pathType: Prefix
backend:
service:
name: users-service
port:
number: 80
위 설정에서는 example.com/api/v1/users 경로로 요청이 들어오면 users-service로 트래픽을 전달하도록 설정되어 있다.