쿠버네티스(Kubernetes)를 활용해 서비스를 운영하다 보면 외부 트래픽을 클러스터 내부의 서비스로 유입시켜야 할 때가 많습니다. 이때 사용하는 핵심 리소스가 바로 **Ingress(인그레스)**입니다. 이 글에서는 인그레스의 개념부터 설정 방법, 그리고 실전 사용 시 고려할 점까지 상세히 소개하겠습니다.
🔍 인그레스란 무엇인가?
Ingress는 HTTP(S) 트래픽을 클러스터 외부에서 내부 서비스로 라우팅하는 규칙을 정의하는 쿠버네티스 리소스입니다. 간단히 말해, 여러 개의 서비스를 외부에 노출할 때 각각의 서비스에 LoadBalancer를 설정하는 대신, 하나의 진입점(Ingress Controller)을 두고 도메인이나 URL 경로 기반으로 트래픽을 분기할 수 있도록 도와주는 역할을 합니다.
예를 들어 다음과 같은 구성을 생각해볼 수 있습니다.
- https://example.com/api → 백엔드 API 서비스
- https://example.com/web → 프론트엔드 웹 서비스
이처럼 URL 경로 또는 호스트명을 기반으로 적절한 서비스로 라우팅할 수 있도록 설정할 수 있는 것이 Ingress입니다.
🚪 인그레스와 서비스 노출 방법 비교
방식 | 설명 | 외부 노출 | 라우팅 유연성 |
NodePort | 클러스터 노드의 포트를 외부에 노출 | O | X |
LoadBalancer | 클라우드 로드밸런서와 연동하여 서비스 노출 | O | X |
Ingress | 경량화된 HTTP 라우팅 컨트롤러 사용 | O (Ingress Controller 필요) | O |
Ingress는 특히 HTTP/HTTPS 기반의 웹 서비스 운영에 적합하며, 비용 효율적으로 여러 서비스를 하나의 LoadBalancer 뒤에 배치할 수 있습니다.
⚙️ 인그레스 구성 요소
Ingress 리소스를 제대로 이해하려면 그 구성 요소를 알아야 합니다.
- Ingress Resource: 트래픽 라우팅 규칙이 정의된 쿠버네티스 리소스 (YAML 파일로 작성)
- Ingress Controller: 실제로 트래픽을 라우팅하는 역할을 수행하는 애플리케이션. Nginx, Traefik, HAProxy, Istio 등 다양한 구현체가 있음
- Service: Ingress가 라우팅할 쿠버네티스 내의 대상 서비스
🧪 예제: Nginx 인그레스 설정
1. Ingress Controller 설치 (예: Helm 사용)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx
2. Ingress 리소스 작성
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
위 예시는 example.com/api 요청은 backend-service로, /web 요청은 frontend-service로 각각 라우팅하도록 설정한 것입니다.
🔒 HTTPS 지원을 위한 인증서 설정
Ingress는 TLS 인증서를 사용하여 HTTPS를 손쉽게 지원할 수 있습니다. 일반적으로는 Let's Encrypt와 같은 무료 인증서 제공 서비스를 cert-manager와 함께 사용하는 것이 일반적입니다.
tls:
- hosts:
- example.com
secretName: example-tls
📌 실전 팁 및 주의사항
- 도메인 매핑 필수: Ingress가 동작하려면 실제 도메인(example.com)이 클러스터의 Ingress Controller로 연결되도록 DNS 설정이 필요합니다.
- PathType 주의: Prefix, Exact 등의 PathType은 라우팅 동작에 영향을 미칩니다.
- HTTPS 기본 설정 권장: 보안을 위해 가능하면 HTTPS를 기본 설정으로 사용하는 것이 좋습니다.
- Rate Limiting & Auth: Nginx Ingress의 경우 주석(annotation)을 통해 인증, 속도 제한 등의 부가 기능도 설정 가능합니다.
🧩 인그레스 vs API 게이트웨이
Ingress는 클러스터 내부 트래픽 라우팅에 집중하는 반면, API 게이트웨이는 인증, 속도 제한, 요청 조작 등 좀 더 풍부한 기능을 제공합니다. Ingress는 비교적 경량이며, 기초적인 트래픽 분기 용도로 적합합니다. 복잡한 정책이 필요한 경우에는 Kong, Istio, Ambassador 같은 API 게이트웨이 도입을 고려할 수 있습니다.
✅ 마무리: 인그레스를 왜 써야 할까?
- 하나의 LoadBalancer로 여러 서비스를 외부에 노출 가능
- 도메인 기반 또는 URL 경로 기반 트래픽 라우팅 지원
- HTTPS 설정 용이
- 확장성과 유연성 확보
쿠버네티스 환경에서 안정적인 서비스 외부 노출 구조를 설계하려면 Ingress의 이해와 활용은 필수입니다. 다양한 컨트롤러와 기능을 실험하면서 자신만의 운영 노하우를 쌓아보세요.
'클라우드' 카테고리의 다른 글
AWS에서 클러스터란? 클라우드 환경의 확장성과 안정성을 책임지는 핵심 구성 요소 (0) | 2025.05.06 |
---|---|
ENI(Elastic Network Interface) (0) | 2025.05.05 |
PVC와 PV의 차이점: 쿠버네티스 스토리지 개념 완벽 정리 (0) | 2025.05.05 |
배포 전략(Deployment Strategy) (0) | 2025.05.05 |
Helm이란? (0) | 2025.05.05 |