**쿠버네티스(Kubernetes) 인그레스(Ingress)**는 클러스터 외부에서 내부 서비스로 트래픽을 라우팅하는 중요한 역할을 합니다. 인그레스를 사용하면 단순한 로드 밸런싱뿐만 아니라, 경로 기반 라우팅, TLS(HTTPS) 설정, 가상 호스트(Virtual Host) 구성 등을 쉽게 설정할 수 있습니다.
이 글에서는 쿠버네티스 인그레스의 개념, 주요 기능, 동작 방식, 설정 방법 및 실전 예제를 상세히 설명합니다.
📌 목차
- 쿠버네티스 인그레스란?
- 인그레스가 필요한 이유
- 인그레스 vs 서비스 (LoadBalancer & NodePort)
- 인그레스의 주요 기능
- 인그레스 컨트롤러(Ingress Controller)
- 인그레스 설정 및 예제
- 결론
1. 쿠버네티스 인그레스(Ingress)란?
✅ **인그레스(Ingress)**는 쿠버네티스 클러스터 외부에서 내부 서비스로 트래픽을 라우팅하는 API 객체입니다.
✅ 단순한 외부 접근뿐만 아니라, 도메인 기반 및 경로 기반 트래픽 라우팅을 제공하며, TLS(SSL) 인증서 적용도 가능합니다.
💡 쉽게 말해?
➡️ 인그레스는 쿠버네티스 내부 서비스들을 위한 “스마트”한 HTTP/HTTPS 트래픽 관리 기능을 제공하는 네트워크 게이트웨이입니다.
2. 인그레스가 필요한 이유
쿠버네티스에서 애플리케이션을 외부에서 접근 가능하게 하려면 LoadBalancer 또는 NodePort 서비스를 사용할 수도 있습니다.
하지만, 이 방식에는 다음과 같은 한계가 있습니다.
방법 | 문제점 |
---|---|
NodePort | – 클러스터의 각 노드에서 특정 포트를 개방해야 함. – 동적 IP 사용으로 유지보수 어려움. |
LoadBalancer | – 클라우드 환경에서만 사용 가능. – 각 서비스마다 별도의 로드 밸런서를 생성해야 하므로 비용이 증가. |
✅ 인그레스(Ingress)를 사용하면?
- 하나의 고정 IP 및 도메인 이름으로 여러 서비스에 접근 가능.
- 경로 기반 라우팅(
/api
,/dashboard
등) 지원. - TLS(SSL) 인증 적용 가능.
- 클라우드 환경에 상관없이 로컬에서도 실행 가능.
3. 인그레스 vs 서비스 (LoadBalancer & NodePort)
기능 | NodePort | LoadBalancer | Ingress |
---|---|---|---|
외부 접근 | 가능 | 가능 | 가능 |
로드 밸런싱 | 불가능 | 가능 | 가능 |
여러 서비스 연결 | 불가능 | 불가능 | 가능 |
경로 기반 라우팅 | 불가능 | 불가능 | 가능 |
TLS(HTTPS) 지원 | 불가능 | 가능 (설정 필요) | 가능 (기본 지원) |
클러스터 내에서 실행 | 가능 | 불가능 (클라우드 필요) | 가능 |
💡 인그레스는 여러 서비스 간의 트래픽을 효율적으로 관리하는 최적의 방법입니다.
4. 인그레스의 주요 기능
✅ 1) 경로 기반 라우팅(Path-based Routing)
- URL 경로에 따라 트래픽을 특정 서비스로 라우팅.
<yaml>rules:
- http:
paths:
- path: /api
backend:
service:
name: api-service
port:
number: 80
- path: /dashboard
backend:
service:
name: dashboard-service
port:
number: 80
🔹 https://example.com/api
→ api-service
로 이동
🔹 https://example.com/dashboard
→ dashboard-service
로 이동
✅ 2) 도메인 기반 라우팅(Host-based Routing)
- 도메인별로 다른 서비스로 연결 가능.
<yaml>rules:
- host: api.example.com
http:
paths:
- path: /
backend:
service:
name: api-service
port:
number: 80
- host: dashboard.example.com
http:
paths:
- path: /
backend:
service:
name: dashboard-service
port:
number: 80
🔹 https://api.example.com
→ api-service
🔹 https://dashboard.example.com
→ dashboard-service
✅ 3) TLS(SSL) 적용
- HTTPS를 지원하는 SSL 인증서 적용 가능.
<yaml>tls:
- hosts:
- example.com
secretName: tls-secret
🔹 tls-secret
은 kubectl create secret tls
로 생성 가능.
<bash>kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem
5. 인그레스 컨트롤러(Ingress Controller)
인그레스 리소스를 사용하려면 Ingress Controller가 필요합니다.
쿠버네티스 기본 설치에는 인그레스 컨트롤러가 포함되어 있지 않으므로, 별도로 설치해야 합니다.
✅ 인기 있는 Ingress Controller:
- NGINX Ingress Controller (가장 많이 사용됨)
- Traefik
- HAProxy
- AWS ALB Ingress Controller (AWS 환경)
- Istio Gateway (Service Mesh)<
<bash># NGINX Ingress Controller 설치 (Helm 사용)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-ingress ingress-nginx/ingress-nginx
6. 인그레스 설정 및 예제
🔹 Step 1: 서비스(Service) 생성
먼저, 두 개의 서비스를 생성합니다.
<yaml>apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: dashboard-service
spec:
selector:
app: dashboard
ports:
- protocol: TCP
port: 80
targetPort: 8081
<bash>kubectl apply -f services.yaml
🔹 Step 2: 인그레스(Ingress) 생성
다음으로, 인그레스를 설정하여 하나의 도메인으로 여러 서비스를 연결합니다.
<yaml>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
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /dashboard
pathType: Prefix
backend:
service:
name: dashboard-service
port:
number: 80
<bash>kubectl apply -f ingress.yaml
🔹 http://example.com/api
→ api-service
🔹 http://example.com/dashboard
→ dashboard-service
7. 결론
쿠버네티스 **인그레스(Ingress)**는 클러스터 외부에서 내부 서비스로 트래픽을 효율적으로 라우팅하는 강력한 기능을 제공합니다.
✅ 왜 인그레스를 사용할까?
- 하나의 고정 IP로 여러 서비스 연결.
- 경로 및 도메인 기반 트래픽 라우팅 지원.
- TLS(HTTPS) 인증 적용 가능.
- 로드 밸런싱 및 외부 접근 최적화.
📌 쿠버네티스를 효과적으로 운영하려면, 인그레스를 적절히 활용하는 것이 필수적입니다! 🚀