
NodePort 사용
외부 접근: http://<Node-IP>:<High-Port>
문제:
LoadBalancer 사용
클라우드에서 퍼블릭 IP 자동 할당
문제:
Client
↓
Ingress Controller (NGINX, Traefik, etc.)
↓
Ingress Rules (Path/Host Based Routing)
↓
Backend Services (watch-service, wear-service)
| 항목 | 설명 |
|---|---|
| Ingress Controller | NGINX, Traefik, HAProxy 같은 실제 트래픽 처리 도구 |
| Ingress Resource | YAML 파일로 정의한 라우팅 규칙 |
→ Ingress Controller가 있어야 Ingress Resource가 동작
Deployment
→ nginx-ingress-controller
→ 내부적으로 NGINX 동작
Service (NodePort 또는 LoadBalancer)
→ 외부에서 접근 가능하게 함 (80, 443 포트)
ConfigMap
→ NGINX 동작 설정
ServiceAccount + RBAC
→ Kubernetes 리소스 감시 권한 부여
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: store-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my-online-store.com
http:
paths:
- path: /wear
pathType: Prefix
backend:
service:
name: wear-service
port:
number: 80
- path: /watch
pathType: Prefix
backend:
service:
name: watch-service
port:
number: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: store-ingress
spec:
rules:
- host: wear.my-online-store.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wear-service
port:
number: 80
- host: watch.my-online-store.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: watch-service
port:
number: 80
tls:
- hosts:
- my-online-store.com
secretName: tls-secret
tls-secret는 kubectl로 생성kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem
| 기존 방식 | Ingress 방식 |
|---|---|
| 서비스마다 LoadBalancer | 하나의 LoadBalancer만 필요 |
| IP도 서비스마다 따로 | 단일 IP로 모든 서비스 처리 가능 |
| SSL도 서비스마다 설정 | Ingress에서 통합 관리 |
| 방화벽 규칙 복잡 | Ingress 포트만 열면 됨 (80, 443) |
→ 비효율적, 비확장성
DNS → Ingress LoadBalancer → Ingress Controller → Path/Host → Backend Service
| 개념 | 설명 |
|---|---|
| Ingress | L7 Load Balancer 역할 |
| Controller | 실제 트래픽 처리 (NGINX, Traefik 등) |
| Resource | 라우팅 규칙 정의 (YAML) |
| Path Routing | /watch → watch-service, /wear → wear-service |
| Host Routing | watch.domain.com → watch-service |
| SSL 지원 | Ingress 레벨에서 통합 관리 가능 |